Simon, Choice is supported now in generated code, but unfortunately extension is not there yet. I would agree that extension is the better method to use for services that use types in a natural hierarchy. I added choice recently for a different use case. I'm not sure if or where extension is in the plans, but suspect you could contribute it if you have time.
Chuck Simon Fell wrote on 04/28/2006 09:06 PM: > 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. >>>
