the few verbs lots of nouns approach is a very successful design
model, to do it in web services with a static schema requires the
schema/runtime stack to support choice or extension, and IMO extension
is much better supported than choice, YMMV.

Cheers
Simon

On Sat, 29 Apr 2006 03:01:37 +0000 (GMT+00:00), in soap you wrote:

>    [ 
> http://issues.apache.org/jira/browse/AXIS2-632?page=comments#action_12377061 
> ] 
>
>Sanjiva Weerawarana commented on AXIS2-632:
>-------------------------------------------
>
>Its not whether to wrap or unwrap .. there is no unwrap support in 1.0.
>
>We came up with a model for stubs as follows (and it was in fact driven by 
>enterprise.wsdl because it lead to the generation of some 2000 classes with 
>XmlBeans):
>
>- default is to generate one class with inner classes for data types .. this 
>is like what WCF does
>- next step is to generate 1+n where n is the number of top level elements for 
>which classes have to be generated
>- final option is the n classes where we gen one class per whatever needs to 
>be done- no inner classes
>
>Enterprise.wsdl is a good test but its a weird test in that regard .. none of 
>the patterns gives an easily managable set of things. I'm going to annoy Simon 
>but I'd venture to say its not a very well designed Web service when it has an 
>object oriented data model represented in XML Schema. Hey but that's just me 
>.. and they're Salesforce, so who am I to tell.
>
>> get errors trying to parse valid response
>> -----------------------------------------
>>
>>          Key: AXIS2-632
>>          URL: http://issues.apache.org/jira/browse/AXIS2-632
>>      Project: Apache Axis 2.0 (Axis2)
>>         Type: Bug
>
>>   Components: databinding
>>  Environment: Axis2.0 RC4, JDK 1.5.06, WinXP
>>     Reporter: Simon Fell
>>     Priority: Blocker
>>  Attachments: WhiteSpaceAndExtensionTypes.zip
>>
>> A valid response from the query call (wsdl is the enterprise wsdl that's now 
>> part of the tests) fails to be de-serialized with an error.
>> Exception in thread "main" java.lang.RuntimeException: 
>> java.lang.RuntimeException: Unexpected subelement Name
>>      at 
>> org.apache.axis2.SforceServiceStub.fromOM(SforceServiceStub.java:59718)
>>      at org.apache.axis2.SforceServiceStub.query(SforceServiceStub.java:2545)
>>      at client.main(client.java:19)
>> Caused by: java.lang.RuntimeException: Unexpected subelement Name
>>      at 
>> org.apache.axis2.SforceServiceStub$QueryResult$Factory.parse(SforceServiceStub.java:57735)
>>      at 
>> org.apache.axis2.SforceServiceStub$QueryResponse$Factory.parse(SforceServiceStub.java:20706)
>>      at 
>> org.apache.axis2.SforceServiceStub.fromOM(SforceServiceStub.java:59594)
>>      ... 2 more
>> Here's the response msg it fails to deserialize
>> <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope 
>> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; 
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
>> xmlns="urn:enterprise.soap.sforce.com" 
>> xmlns:sf="urn:sobject.enterprise.soap.sforce.com"><soapenv:Body><queryResponse><result><done>true</done><queryLocator
>>  xsi:nil="true"/><records 
>> xsi:type="sf:Account"><sf:Id>0013000000Bnr1qAAB</sf:Id><sf:AccountNumber>axis2Test</sf:AccountNumber><sf:Name>New
>>  Account 2</sf:Name></records><records 
>> xsi:type="sf:Account"><sf:Id>0013000000BnspUAAR</sf:Id><sf:AccountNumber>axis2Test</sf:AccountNumber><sf:Name>New
>>  Account 
>> 1</sf:Name></records><size>2</size></result></queryResponse></soapenv:Body></soapenv:Envelope>
>> the client stub was generated with WSDL2Java -s -u -uri enterprise.wsdl
>> The test code is
>>              SforceServiceStub stub = new SforceServiceStub();
>>              SforceServiceStub.Login l = new SforceServiceStub.Login();
>>              l.setUsername("*username*");
>>              l.setPassword("*password*");
>>              SforceServiceStub.LoginResponse lr = stub.login(l);
>>              
>>              SforceServiceStub.SessionHeader sh = new 
>> SforceServiceStub.SessionHeader();
>>              sh.setSessionId(lr.getResult().getSessionId());
>>              stub = new SforceServiceStub(lr.getResult().getServerUrl());
>>              
>>              SforceServiceStub.Query q = new SforceServiceStub.Query();
>>              q.setQueryString("select id, name, AccountNumber from Account 
>> where AccountNumber='axis2Test'");
>>              SforceServiceStub.QueryResponse qr = stub.query(q, sh, null);
>>              
>>              System.out.println("query returned " + qr.getResult().getSize() 
>> + " rows");
>>              
>>              for(SforceServiceStub.SObject o : qr.getResult().getRecords()) {
>>                      SforceServiceStub.Account a = 
>> (SforceServiceStub.Account)o;
>>                      System.out.println(a.getId() + " " + a.getName() + " " 
>> + a.getAccountNumber());
>>              }
>> Also the generated stub has getId() returning an OMElement, and not a string.

Reply via email to