[ 
http://issues.apache.org/jira/browse/AXIS2-632?page=comments#action_12377083 ] 

Ajith Harshana Ranabahu commented on AXIS2-632:
-----------------------------------------------

I'm sorry that the codegenerator options are not well documented but the code 
generator can pass certain extra parameters that will be picked up by the ADB 
schema compiler to expand the classes. you can pass "-Ew false -Er true" which 
will not pack the classes and write them directly.
As for the issue we also decovered the problem and Chuck has written an 
excellent account of it. The solution I see is to keep a table of Qname-class 
mappings inside ADB and switch to that when the xsi:type attribute is present. 
Anyway it means a complete twist to the deserialization code of ADB which seems 
not appropriate at all at this moment.
The other fact is this has to do with ADB and not Axis2 as a whole. We came to 
a decision that databinding will be kept out. Although ADB fails to do the 
correct mapping, XMLBeans is perfectly capable of doing this and it is not 
justifiable to say Axis2 is incapable of handling it.
I would say we should downgrade the criticality of this and attach an 
improvement (support xsi:type based deserialization for ADB or something). 

What would the others think about this ?

> 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.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to