Hello,

   I need help.  I have a service that returns a Java Bean.  My problem is
that the de-serializer doesn't appear to grab the right element.  My service
returns a connectivityReturn bean, and within that bean is the GMML object I
really want.  But if I return a connectivityReturn with just a GMML object
inside, I get a deserialization error.  If I modify the WSDL so that you can
nest connectivityReturn objects (and regenerate the Java classes) and put
the connectivityReturn with the GMML inside of another connectivityReturn it
works, but then I have two namespaces (that are the same) and repetition for
no reason on the wire.  I tried modifying the WSDL to expect a <return>
object between the <connectivityReturn> and the <GMML> but when WSDL2Java
creates the new classes I get the same de-serialization error.




I'm thinking a work around would be to leave the WSDL without the nesting,
and take the generated beans and place the padding <return> bean within the
connectivityReturn class.  This seems rather round-a-bout, and I would have
to manually edit a lot of classes.




Any ideas as to why this happens?  Am I expecting the wrong type of object
on the client side, or sending the wrong type from the server side?
Insanity check on my work-around?




Thanks


-W




Some code:


---------------START ConnectivityTest------




public class ConnectivityTest {


   public ConnectivityReturn connectivity () {


           GMML toReturn = new GMML();


           Child1 childLevel1 = new Child1();


         //Set some stuff on the child


         //Snipped


         toReturn.setChild1(childLevel1);


         ConnectivityReturn CR = new ConnectivityReturn();


         CR.setGMML(toReturn);


         //This does not work....


         //return CR


           ConnectivityReturn CR2 = new ConnectivityReturn();


         CR2.setConnectivityReturn(CR);


         //But this does...


         return CR2;


   }


}


---------------END ConnectivityTest ------




My 'working' WSDL looks like:




-------- WSDL File ----------


<wsdl:definitions targetNamespace="http://blah/GMML";
xmlns:impl="http://blah/GMML"; xmlns:intf="http://metsoautomation.com/GMML";
xmlns:apachesoap="http://xml.apache.org/xml-soap";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns="http://schemas.xmlsoap.org/wsdl/";>


        <wsdl:types>


        <xs:schema elementFormDefault="qualified"
targetNamespace="http://blah/GMML";>


        <xs:element name="ConnectivityReturn">


                           <xs:complexType>


                                        <xs:sequence>


                                            <xs:element minOccurs="1" maxOccurs="1" 
ref="impl:GMML"/>


                                            <xs:element minOccurs="0" maxOccurs="1"
ref="impl:ConnectivityReturn"/>


                                        </xs:sequence>


                           </xs:complexType>


                        </xs:element>


        <xs:element name="GMML">


                <xs:complexType>


                <xs:element name="Child1" type="xs:string">


                ....


            </xs:complexType>


      </xs:element>


</xs:schema>


        </wsdl:types>


        <wsdl:message name="connectivityResponse">


                <wsdl:part name="connectivityReturn"
element="intf:ConnectivityReturn"/>


        </wsdl:message>


        <wsdl:message name="connectivityRequest"/>


        <wsdl:portType name="ConnectivityTest">


                <wsdl:operation name="connectivity">


                        <wsdl:input name="connectivityRequest"
message="impl:connectivityRequest"/>


                        <wsdl:output name="connectivityResponse"
message="impl:connectivityResponse"/>


                </wsdl:operation>


        </wsdl:portType>


        <wsdl:binding name="ConnectivitySoapBinding"
type="impl:ConnectivityTest">


                <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>


                <wsdl:operation name="connectivity">


                        <soap:operation soapAction=""/>


                        <wsdl:input name="connectivityRequest">


                                <soap:body use="literal" namespace="http://blah/GMML"/>


                        </wsdl:input>


                        <wsdl:output name="connectivityResponse">


                                <soap:body use="literal" namespace="http://blah/GMML"/>


                        </wsdl:output>


                </wsdl:operation>


        </wsdl:binding>


        <wsdl:service name="ConnectivityTestService">


                <wsdl:port name="Connectivity"
binding="impl:ConnectivitySoapBinding">


                        <soap:address
location="http://localhost:8080/axis/services/Connectivity"/>


                </wsdl:port>


        </wsdl:service>


</wsdl:definitions>


-------------END WSDL---------------




Finally my wsdd:




------------Start WSDD-------------


<deployment xmlns="http://xml.apache.org/axis/wsdd/";>


   <service name="Connectivity" provider="java:RPC" style="document"
use="literal">


      <wsdlFile>/GMML.wsdl</wsdlFile>


      <parameter name="className" value="ConnectivityTest"/>


      <parameter name="allowedMethods" value="*"/>


   </service>


</deployment>


-----------End WSDD----------------




this doesn't work, and I think it should


----------On the Wire--------------


<?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";>


 <soapenv:Body>


  <connectivityReturn xmlns="">


   <ns1:GMML xmlns:ns1="http://blah/GMML";>


    <ns1:Child1>


      ...


    </ns1:Child1>


   </ns1:GMML>


  </connectivityReturn>


 </soapenv:Body>


</soapenv:Envelope>


----------End On the Wire------------




this Does work, and i think it shouldn't




------------On the wire--------------


<?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";>


 <soapenv:Body>


  <connectivityReturn xmlns="">


   <ns1:GMML xsi:nil="true" xmlns:ns1="http://blah/GMML"/>


   <ns2:ConnectivityReturn xmlns:ns2="http://blah/GMML";>


    <ns2:GMML>


     <ns2:Child1>


       ....


     </ns2:Child1>


    </ns2:GMML>


   </ns2:ConnectivityReturn>


  </connectivityReturn>


 </soapenv:Body>


</soapenv:Envelope>


-----------End On the Wire--------




If you made it this far, I thank you. :-)





Reply via email to