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.
