There are two different problems:
- one is in the WSDL generation for List<person>
(not specifying maxOccurs="unbounded" and specifying xs:anyType
rather than Person)
- the other is at runtime
(not generating the proper xsi:type attribute)
Please file two JIRAs.
Thanks,
Anne
On Mon, Mar 24, 2008 at 8:45 PM, Nate Roe <[EMAIL PROTECTED]> wrote:
> Anne,
>
> Interesting.
>
> My service is a POJO returning a List<Person>. The WSDL is generated by
> Axis2 automatically on deployment. Here is the relevant method from the POJO
> service:
>
> public List<Person> getPeople(int numPeople)
> {
> List<Person> list = new LinkedList<Person>();
>
> for (int i = 0; i < numPeople; i++)
> {
> list.add(createPerson(Integer.toString(i)));
> }
>
> return list;
> }
>
> Should I file a JIRA for this problem in general, or the "anyType" problem
> specifically?
>
> I will try using a modified WSDL to generate the client stub and see how
> that goes.
>
> Thank you,
> Nate
>
>
> -----Original Message-----
> From: Anne Thomas Manes [mailto:[EMAIL PROTECTED]
>
> Sent: Monday, March 24, 2008 5:41 PM
> To: [email protected]
>
>
> Subject: Re: What might cause "Unexpected subelement return"?
>
> Nate,
>
> My guess is that Axis2 is barfing on the second <ns:return> element.
> You did not declare maxOccurs="unbounded" in the "return" element type
> definition:
>
> <xs:element name="getPeopleResponse">
> <xs:complexType>
> <xs:sequence>
> <xs:element minOccurs="0" name="return"
> nillable="true" type="xs:anyType"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>
> Also, is there some reason why you specified type="xs:anyType" rather
> than type="ns0:Person"? Axis2 is generating an invalid "type"
> attribute for each return element. The attribute should be "xsi:type"
> rather than "type". Please file a JIRA for this problem.
>
> Meanwhile, please modify the element declaration to this and try it again:
>
> <xs:element name="getPeopleResponse">
> <xs:complexType>
> <xs:sequence>
> <xs:element minOccurs="0" maxOccurs="unbounded"
> name="return" nillable="true" type="ns0:Person"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>
> Anne
>
> On Mon, Mar 24, 2008 at 6:04 PM, Nate Roe <[EMAIL PROTECTED]> wrote:
> >
> > I wonder if this is related to the Java packages created for my data
> beans, or some kind of mistake during stub generation. I don't understand
> from looking at my WSDL and my SOAP messages how they mis-match.
> >
> > I have managed to create a test case that I believe exemplifies this
> problem. For this I modified the calculator example. I instead of
> performing a calculation, my service now requires an integer. In response to
> this integer the service creates the specified number of Person instances,
> each of which have one Address.
> >
> > The WSDL:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:axis2="http://quickstart.samples/"
> xmlns:ns1="http://calculate.vegas.com"
> xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
> xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
> xmlns:ns0="http://data.test.vegas.com/xsd"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
> targetNamespace="http://quickstart.samples/">
> > <wsdl:documentation>doCalculate</wsdl:documentation>
> > <wsdl:types>
> > <xs:schema xmlns:ax21="http://data.test.vegas.com/xsd"
> attributeFormDefault="qualified" elementFormDefault="qualified"
> targetNamespace="http://data.test.vegas.com/xsd">
> > <xs:complexType name="Person">
> > <xs:sequence>
> > <xs:element minOccurs="0" name="address"
> nillable="true" type="ax21:Address"/>
> > <xs:element minOccurs="0" name="name" nillable="true"
> type="xs:string"/>
> > </xs:sequence>
> > </xs:complexType>
> > <xs:complexType name="Address">
> > <xs:sequence>
> > <xs:element minOccurs="0" name="city" nillable="true"
> type="xs:string"/>
> > <xs:element minOccurs="0" name="street"
> nillable="true" type="xs:string"/>
> > </xs:sequence>
> > </xs:complexType>
> > </xs:schema>
> > <xs:schema xmlns:ns="http://calculate.vegas.com"
> attributeFormDefault="qualified" elementFormDefault="qualified"
> targetNamespace="http://calculate.vegas.com">
> > <xs:element name="getPersonResponse">
> > <xs:complexType>
> > <xs:sequence>
> > <xs:element minOccurs="0" name="return"
> nillable="true" type="ns0:Person"/>
> > </xs:sequence>
> > </xs:complexType>
> > </xs:element>
> > <xs:element name="getPeople">
> > <xs:complexType>
> > <xs:sequence>
> > <xs:element minOccurs="0" name="numPeople"
> type="xs:int"/>
> > </xs:sequence>
> > </xs:complexType>
> > </xs:element>
> > <xs:element name="getPeopleResponse">
> > <xs:complexType>
> > <xs:sequence>
> > <xs:element minOccurs="0" name="return"
> nillable="true" type="xs:anyType"/>
> > </xs:sequence>
> > </xs:complexType>
> > </xs:element>
> > </xs:schema>
> > </wsdl:types>
> > <wsdl:message name="getPeopleRequest">
> > <wsdl:part name="parameters" element="ns1:getPeople"/>
> > </wsdl:message>
> > <wsdl:message name="getPeopleResponse">
> > <wsdl:part name="parameters" element="ns1:getPeopleResponse"/>
> > </wsdl:message>
> > <wsdl:message name="getPersonRequest"/>
> > <wsdl:message name="getPersonResponse">
> > <wsdl:part name="parameters" element="ns1:getPersonResponse"/>
> > </wsdl:message>
> > <wsdl:portType name="doCalculatePortType">
> > <wsdl:operation name="getPeople">
> > <wsdl:input message="axis2:getPeopleRequest"
> wsaw:Action="urn:getPeople"/>
> > <wsdl:output message="axis2:getPeopleResponse"
> wsaw:Action="urn:getPeopleResponse"/>
> > </wsdl:operation>
> > <wsdl:operation name="getPerson">
> > <wsdl:input message="axis2:getPersonRequest"
> wsaw:Action="urn:getPerson"/>
> > <wsdl:output message="axis2:getPersonResponse"
> wsaw:Action="urn:getPersonResponse"/>
> > </wsdl:operation>
> > </wsdl:portType>
> > <wsdl:binding name="doCalculateSOAP11Binding"
> type="axis2:doCalculatePortType">
> > <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
> style="document"/>
> > <wsdl:operation name="getPeople">
> > <soap:operation soapAction="urn:getPeople" style="document"/>
> > <wsdl:input>
> > <soap:body use="literal"/>
> > </wsdl:input>
> > <wsdl:output>
> > <soap:body use="literal"/>
> > </wsdl:output>
> > </wsdl:operation>
> > <wsdl:operation name="getPerson">
> > <soap:operation soapAction="urn:getPerson" style="document"/>
> > <wsdl:input>
> > <soap:body use="literal"/>
> > </wsdl:input>
> > <wsdl:output>
> > <soap:body use="literal"/>
> > </wsdl:output>
> > </wsdl:operation>
> > </wsdl:binding>
> > <wsdl:binding name="doCalculateSOAP12Binding"
> type="axis2:doCalculatePortType">
> > <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"
> style="document"/>
> > <wsdl:operation name="getPeople">
> > <soap12:operation soapAction="urn:getPeople" style="document"/>
> > <wsdl:input>
> > <soap12:body use="literal"/>
> > </wsdl:input>
> > <wsdl:output>
> > <soap12:body use="literal"/>
> > </wsdl:output>
> > </wsdl:operation>
> > <wsdl:operation name="getPerson">
> > <soap12:operation soapAction="urn:getPerson" style="document"/>
> > <wsdl:input>
> > <soap12:body use="literal"/>
> > </wsdl:input>
> > <wsdl:output>
> > <soap12:body use="literal"/>
> > </wsdl:output>
> > </wsdl:operation>
> > </wsdl:binding>
> > <wsdl:binding name="doCalculateHttpBinding"
> type="axis2:doCalculatePortType">
> > <http:binding verb="POST"/>
> > <wsdl:operation name="getPeople">
> > <http:operation location="doCalculate/getPeople"/>
> > <wsdl:input>
> > <mime:content type="text/xml" part="getPeople"/>
> > </wsdl:input>
> > <wsdl:output>
> > <mime:content type="text/xml" part="getPeople"/>
> > </wsdl:output>
> > </wsdl:operation>
> > <wsdl:operation name="getPerson">
> > <http:operation location="doCalculate/getPerson"/>
> > <wsdl:input>
> > <mime:content type="text/xml" part="getPerson"/>
> > </wsdl:input>
> > <wsdl:output>
> > <mime:content type="text/xml" part="getPerson"/>
> > </wsdl:output>
> > </wsdl:operation>
> > </wsdl:binding>
> > <wsdl:service name="doCalculate">
> > <wsdl:port name="doCalculateSOAP11port_http"
> binding="axis2:doCalculateSOAP11Binding">
> > <soap:address
> location="http://localhost:8080/axis2/services/doCalculate"/>
> > </wsdl:port>
> > <wsdl:port name="doCalculateSOAP12port_http"
> binding="axis2:doCalculateSOAP12Binding">
> > <soap12:address
> location="http://localhost:8080/axis2/services/doCalculate"/>
> > </wsdl:port>
> > <wsdl:port name="doCalculateHttpport"
> binding="axis2:doCalculateHttpBinding">
> > <http:address
> location="http://localhost:8080/axis2/services/doCalculate"/>
> > </wsdl:port>
> > </wsdl:service>
> > </wsdl:definitions>
> >
> >
> > The Request:
> >
> > <?xml version='1.0' encoding='UTF-8'?>
> > <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
> > <soapenv:Body>
> > <ns2:getPeople xmlns:ns2="http://calculate.vegas.com">
> > <ns2:numPeople>5</ns2:numPeople>
> > </ns2:getPeople>
> > </soapenv:Body>
> > </soapenv:Envelope>
> >
> >
> > The Response:
> >
> > <?xml version='1.0' encoding='UTF-8'?>
> > <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
> > <soapenv:Body>
> > <ns:getPeopleResponse xmlns:ns="http://calculate.vegas.com"
> xmlns:ax21="http://data.test.vegas.com/xsd">
> > <ns:return type="com.vegas.test.data.Person">
> > <ax21:address type="com.vegas.test.data.Address">
> > <ax21:city>Las Vegas</ax21:city>
> > <ax21:street>12345 Pecos Road</ax21:street>
> > </ax21:address>
> > <ax21:name>Jeff Doe 0</ax21:name>
> > </ns:return>
> > <ns:return type="com.vegas.test.data.Person">
> > <ax21:address type="com.vegas.test.data.Address">
> > <ax21:city>Las Vegas</ax21:city>
> > <ax21:street>12345 Pecos Road</ax21:street>
> > </ax21:address>
> > <ax21:name>Jeff Doe 1</ax21:name>
> > </ns:return>
> > <ns:return type="com.vegas.test.data.Person">
> > <ax21:address type="com.vegas.test.data.Address">
> > <ax21:city>Las Vegas</ax21:city>
> > <ax21:street>12345 Pecos Road</ax21:street>
> > </ax21:address>
> > <ax21:name>Jeff Doe 2</ax21:name>
> > </ns:return>
> > <ns:return type="com.vegas.test.data.Person">
> > <ax21:address type="com.vegas.test.data.Address">
> > <ax21:city>Las Vegas</ax21:city>
> > <ax21:street>12345 Pecos Road</ax21:street>
> > </ax21:address>
> > <ax21:name>Jeff Doe 3</ax21:name>
> > </ns:return>
> > <ns:return type="com.vegas.test.data.Person">
> > <ax21:address type="com.vegas.test.data.Address">
> > <ax21:city>Las Vegas</ax21:city>
> > <ax21:street>12345 Pecos Road</ax21:street>
> > </ax21:address>
> > <ax21:name>Jeff Doe 4</ax21:name>
> > </ns:return>
> > </ns:getPeopleResponse>
> > </soapenv:Body>
> > </soapenv:Envelope>
> >
> >
> > I generated the stubs using the following command:
> >
> > wsdl2java -uri http://localhost:8080/axis2/services/doCalculate?wsdl -p
> com.vegas.test -u
> >
> >
> > Is there some obvious cause that I've overlooked?
> >
> > Thank you,
> > Nate Roe
> >
> >
> > -----Original Message-----
> > From: Anne Thomas Manes [mailto:[EMAIL PROTECTED]
> > Sent: Saturday, March 22, 2008 5:45 AM
> > To: [email protected]
> >
> >
> > Subject: Re: What might cause "Unexpected subelement return"?
> >
> > Nate,
> >
> > The message indicates that the unexpected subelement is called "return".
> > Look at your WSDL to determine what the expected message structure
> > should be, and compare it to the actual message returned.
> >
> > Anne
> >
> > On Fri, Mar 21, 2008 at 5:04 PM, Nate Roe <[EMAIL PROTECTED]> wrote:
> > >
> > > I have tested a few theories about the cause of this exception, but so
> far they've come up negative.
> > >
> > > Is there a way to get Axis2 to tell me which specific subelement was
> unexpected?
> > >
> > > Thanks,
> > > Nate Roe
> > >
> > >
> > >
> > > -----Original Message-----
> > > From: Nate Roe [mailto:[EMAIL PROTECTED]
> > > Sent: Thursday, March 20, 2008 5:59 PM
> > > To: '[email protected]'
> > > Subject: What might cause "Unexpected subelement return"?
> > >
> > > I am using Axis2 v1.3 and Rampart v1.3 on JBossAS v4.0.5 running on
> Java 1.6.0_03.
> > >
> > > I'm deploying a POJO service. Responses from this service cause an
> ADBExceptoion: "Unexpected subelement return".
> > >
> > > The subelements in this case are child objects, collections, etc.
> > >
> > > What are some causes of this exception? Unfortunately I cannot share
> SOAP/WSDL corresponding to this specific problem. I hope that this problem
> has some known causes that I can look into. If I cannot identify the cause
> in this way then I will try to write some smaller, sharable demonstration.
> > >
> > > I found JIRA #1746, but it was closed more than a year ago:
> http://issues.apache.org/jira/browse/AXIS2-1746
> > >
> > > Thanks,
> > > Nate Roe
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]