Wouldn't this be incorrect? Because then wouldn't the SOAP
message come across like:
<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">
<soapenv:Body>
<soapenv:Body>
<listTest
xmlns="http://CoretestWebServices/service/WSObjectService">
<WSObject>
<WSObject>
......
</WSObject>
<WSObject>
......
</WSObject>
<WSObject>
......
</WSObject>
<field>quantity</field>
<value>25</value>
<value>25</value>
</listTest>
</soapenv:Body>
</soapenv:Envelope>
</soapenv:Body>
</soapenv:Envelope>
And then wouldn't that cause Axis to be looking for a
method that looks like:
public WSObject[] listTest (WSObject arg1, WSObject arg2,
WSObject arg3, String field, String, value)?
Or, does Axis automatically see that there's multiple
children of the same type and include them in an array? This can't be, because
what if I had a method signiture that looked like:
public WSObject[] listTest (WSObject [] arg1, WSObject
arg2, String field, String,
value)
Then how would the ArrayDeserializer know which
WSObjects are part of the array for the first parameter and which is on it's own
for the second? I thought that was part of the whole point of wrapping
arrays as one element in the WSDL, and I've read that this is actually
prefered. Isn't what I had originally more correct?
<element name="listTest">
<complexType>
<sequence>
<element name="ArrayOfWSObject" type="tns1:ArrayOfWSObject"/>
<element name="field" type="xsd:string"/>
<element name="value" type="xsd:string"/>
</sequence>
</complexType>
</element>
<complexType>
<sequence>
<element name="ArrayOfWSObject" type="tns1:ArrayOfWSObject"/>
<element name="field" type="xsd:string"/>
<element name="value" type="xsd:string"/>
</sequence>
</complexType>
</element>
<complexType
name="ArrayOfWSObject">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="WSObject" type="tns1:WSObject"/>
</sequence>
</complexType>
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="WSObject" type="tns1:WSObject"/>
</sequence>
</complexType>
Where in the WSDL I have an ArrayOfWSObject referenced, and
then I have ArrayOfWSObject defined as the actual array. Then in my wsdd file
I have:
<arrayMapping
xmlns:ns="http://webservices.test.domain.coretest.ams.com"
qname="ns:ArrayOfWSObject"
type="java:com.ams.coretest.domain.test.webservices.WSObject[]"
innerType="cmp-ns:WSObject" xmlns:cmp-ns="http://webservices.test.domain.coretest.ams.com"
encodingStyle=""
/>
xmlns:ns="http://webservices.test.domain.coretest.ams.com"
qname="ns:ArrayOfWSObject"
type="java:com.ams.coretest.domain.test.webservices.WSObject[]"
innerType="cmp-ns:WSObject" xmlns:cmp-ns="http://webservices.test.domain.coretest.ams.com"
encodingStyle=""
/>
<operation name="listTest" qname="operNS:listTest"
xmlns:operNS="http://CoretestWebServices/service/WSObjectService"
returnQName="retNS:listTestResponse" xmlns:retNS="http://CoretestWebServices/service/WSObjectService"
returnType="rtns:ArrayOfWSObject" xmlns:rtns="http://webservices.test.domain.coretest.ams.com"
returnItemQName="tns:WSObject" xmlns:tns="http://webservices.test.domain.coretest.ams.com" soapAction="listTest" >
<parameter qname="pns:ArrayOfWSObject" xmlns:pns="http://CoretestWebServices/service/WSObjectService"
type="tns:ArrayOfWSObject" xmlns:tns="http://webservices.test.domain.coretest.ams.com"
itemQName="itns:WSObject" xmlns:itns="http://webservices.test.domain.coretest.ams.com"/>
<parameter qname="pns:field" xmlns:pns="http://CoretestWebServices/service/WSObjectService" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema"/>
<parameter qname="pns:value" xmlns:pns="http://CoretestWebServices/service/WSObjectService" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema"/>
</operation>
returnQName="retNS:listTestResponse" xmlns:retNS="http://CoretestWebServices/service/WSObjectService"
returnType="rtns:ArrayOfWSObject" xmlns:rtns="http://webservices.test.domain.coretest.ams.com"
returnItemQName="tns:WSObject" xmlns:tns="http://webservices.test.domain.coretest.ams.com" soapAction="listTest" >
<parameter qname="pns:ArrayOfWSObject" xmlns:pns="http://CoretestWebServices/service/WSObjectService"
type="tns:ArrayOfWSObject" xmlns:tns="http://webservices.test.domain.coretest.ams.com"
itemQName="itns:WSObject" xmlns:itns="http://webservices.test.domain.coretest.ams.com"/>
<parameter qname="pns:field" xmlns:pns="http://CoretestWebServices/service/WSObjectService" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema"/>
<parameter qname="pns:value" xmlns:pns="http://CoretestWebServices/service/WSObjectService" type="tns:string" xmlns:tns="http://www.w3.org/2001/XMLSchema"/>
</operation>
Based on the method signiture in the implementation class
and the wsdd file, shouldn't the java2wsdl generate the correct WSDL that I had
before? You can't seriously expect people to be manually writting WSDL just
because they're using document or wrapped style services. Is this just a bug in
the java2wsdl Emitter, or is there something wrong with my wsdd
file?
Ben
