Hi.

I tried to pass nested JavaBeans class of nested complex types between
WebService and client.
Are BeanSerializers/Deserializers capable of handling
nested SOAP ComplexTypes JavaBeans ?
If above is false, Do I need to write own
CustomBeanSerializers/Deserializers to handle nested ComplexTypes ?


<complexType name="JasBeanImpl">
<sequence>
<element name="all" nillable="true" type="xsd:anyType"/>
</sequence>
</complexType>

<complexType name="SOAPServiceLocator">
<complexContent>
<extension base="tns1:JasBeanImpl">
<sequence>
<element name="referenceName" nillable="true" type="xsd:string"/>
<element name="serviceAddress" nillable="true" type="xsd:string"/>
<element name="serviceSignature" nillable="true" type="xsd:string"/>
<element name="signatureType" nillable="true" type="xsd:string"/>
</sequence>
</extension>
</complexContent>
</complexType>

<complexType name="ArrayOfSOAPServiceLocator">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType"
wsdl:arrayType="impl:SOAPServiceLocator[]"/>
</restriction>
</complexContent>
</complexType>

<complexType name="SOAPServiceName">
<complexContent>
<extension base="tns1:JasBeanImpl">
<sequence>
<element name="name" nillable="true" type="xsd:string"/>
</sequence>
</extension>
</complexContent>
</complexType>

<complexType name="SOAPServiceDescription">
<complexContent>
<extension base="tns1:JasBeanImpl">
<sequence>
<element name="serviceLocator" nillable="true"
type="impl:SOAPServiceLocator"/>
<element name="serviceLocators" nillable="true"
type="impl:ArrayOfSOAPServiceLocator"/>
<element name="serviceName" nillable="true" type="impl:SOAPServiceName"/>
<element name="serviceType" nillable="true" type="xsd:string"/>
</sequence>
</extension>
</complexContent>
</complexType>


--- tcpmon prints out the following SOAP-request

<soapenv:Envelope ...>
 <soapenv:Body>
  <ns1:register ... xmlns:ns1="urn:SOAPServiceDirectoryService">
   <desc href="#id0"/>
  </ns1:register>
  <multiRef id="id0" soapenc:root="0" ...
xsi:type="ns2:SOAPServiceDescription" ...
xmlns:ns2="urn:SOAPServiceDirectoryService">
   <serviceLocators xsi:type="soapenc:Array"
soapenc:arrayType="ns2:SOAPServiceLocator[1]">
    <item href="#id1"/>
   </serviceLocators>
   <serviceName href="#id2"/>
   <serviceType
xsi:type="xsd:string">org.fipa.standard.service.service-directory-service</serviceType>
  </multiRef>
  <multiRef id="id2" soapenc:root="0" ... xsi:type="ns3:SOAPServiceName"
xmlns:ns3="urn:SOAPServiceDirectoryService"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
   <name
xsi:type="xsd:string">1a577588ceec7acc:d3d6f:faebbe63d3:-8000</name>
  </multiRef>
  <multiRef id="id1" soapenc:root="0" ...
xsi:type="ns4:SOAPServiceLocator"
xmlns:ns4="urn:SOAPServiceDirectoryService"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
   <referenceName
xsi:type="xsd:string">1a577588ceec7acc:d3d6f:faebbe63d3:-8000</referenceName>
   <serviceAddress
xsi:type="xsd:string">http://localhost:8081/axis/services/urn:SOAPServiceDirectoryService</serviceAddress>
   <serviceSignature
xsi:type="xsd:string">org.fipa.standard.service.java-soap-binding</serviceSignature>
   <signatureType xsi:type="xsd:string">soap</signatureType>
  </multiRef>
 </soapenv:Body>
</soapenv:Envelope>
---

--- following is result
<soapenv:Envelope ... >
 <soapenv:Body>
  <soapenv:Fault>
   <faultcode>soapenv:Server.userException</faultcode>
   <faultstring>java.lang.ArrayIndexOutOfBoundsException: 0</faultstring>
   <detail/>
  </soapenv:Fault>
 </soapenv:Body>
</soapenv:Envelope>


WebService can deserialize only "serviceType" element, "serviceType" and
"serviceLocator" cannot deserialized.


-- 
% ASWINDOW,co.,inc.
% Ryuusei Murakami / [EMAIL PROTECTED]
% http://www.aswindow.co.jp/


Reply via email to