Hi
 
Is there are a reason why you have commented out the call to
client.registerTypeMapping in your client program . This surely will
fail since there is no deserializerfactory registered for Person. Can
you run the code with the typemapping registered. You could also set the
return type to be of type Person instead of anytype.
 
Vidyanand
 
-----Original Message----- 
From: Quinn, Kim John 
Sent: Fri 12/13/2002 8:50 PM 
To: '[EMAIL PROTECTED]' 
Cc: 
Subject: Problems with Deserialization



        Hello all,
        
        I am having a super frustrating problem with deserializing an
object in
        Axis.
        
        It says it cannot find the "deserializer for {xxx}YYY".  I can
see in the
        TCPMonitor though that it seems to be working correctly.  I have
a custom
        serializer and deserializer that I am using.  I have tried
scouring the
        newsgroups and saw a lot on the topic but I couldnt seem to find
anything
        that helped me.
        
        Everything seems to be working fine till i get to the client...
        
        
        
        Here is my error:
        ---------------------------------
        org.xml.sax.SAXException: Deserializing parameter
'createPersonReturn':
        could not find deserializer
         for type {PersonWorkflowService}Person
                at
        
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:264)
                at
        
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
liza
        tionContextIm
        pl.java:883)
                at
        
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
                at
        
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:
        681)
                at
        
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
                at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
                at org.apache.axis.client.Call.invoke(Call.java:1862)
                at org.apache.axis.client.Call.invoke(Call.java:1768)
                at org.apache.axis.client.Call.invoke(Call.java:1306)
                at test.testwf.TestWfWs.testPerson(TestWfWs.java:61)
                at test.testwf.TestWfWs.main(TestWfWs.java:87)
        Exception in thread "main" AxisFault
         faultCode: { http://xml.apache.org/axis/}Server.userException
         faultString: org.xml.sax.SAXException: Deserializing parameter
        'createPersonReturn':  could not fin
        d deserializer for type {PersonWorkflowService}Person
         faultActor: null
         faultDetail:
                stackTrace: org.xml.sax.SAXException: Deserializing
parameter
        'createPersonReturn':  could n
        ot find deserializer for type {PersonWorkflowService}Person
                at
        
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:264)
                at
        
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
liza
        tionContextIm
        pl.java:883)
                at
        
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
                at
        
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:
        681)
                at
        
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
                at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
                at org.apache.axis.client.Call.invoke(Call.java:1862)
                at org.apache.axis.client.Call.invoke(Call.java:1768)
                at org.apache.axis.client.Call.invoke(Call.java:1306)
                at test.testwf.TestWfWs.testPerson(TestWfWs.java:61)
                at test.testwf.TestWfWs.main(TestWfWs.java:87)
        
        
        org.xml.sax.SAXException: Deserializing parameter
'createPersonReturn':
        could not find deserializer
         for type {PersonWorkflowService}Person
                at
org.apache.axis.AxisFault.makeFault(AxisFault.java:115)
                at org.apache.axis.client.Call.invoke(Call.java:1865)
                at org.apache.axis.client.Call.invoke(Call.java:1768)
                at org.apache.axis.client.Call.invoke(Call.java:1306)
                at test.testwf.TestWfWs.testPerson(TestWfWs.java:61)
                at test.testwf.TestWfWs.main(TestWfWs.java:87)
        Caused by: org.xml.sax.SAXException: Deserializing parameter
        'createPersonReturn':  could not find d
        eserializer for type {PersonWorkflowService}Person
                at
        
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:264)
                at
        
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
liza
        tionContextIm
        pl.java:883)
                at
        
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
                at
        
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:
        681)
                at
        
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
                at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
                at org.apache.axis.client.Call.invoke(Call.java:1862)
                ... 4 more
        
        
        Here is my deploy.wsdd
        ---------------------------------
        <deployment
            xmlns=" http://xml.apache.org/axis/wsdd/";
            xmlns:java="
http://xml.apache.org/axis/wsdd/providers/java";>
        
          <!-- Services from PersonWorkflowService WSDL service -->
        
          <service name="PersonWorkflowService" provider="java:RPC">
              <parameter name="wsdlTargetNamespace"
        value="urn:PersonWorkflowService"/>
              <parameter name="wsdlServiceElement"
value="PersonWorkflowService"/>
              <parameter name="wsdlServicePort"
value="PersonWorkflowService"/>
              <parameter name="className"
        
value="com.x2.blocks.person.webservice.PersonWorkflowServiceSoapBindingS
kele
        ton"/>
              <parameter name="wsdlPortType"
value="PersonWorkflowPort"/>
              <parameter name="allowedMethods" value="*"/>
              <parameter name="scope" value="Request"/>
                                <typeMapping qname="MyNS:Person"
        xmlns:MyNS="PersonWorkflowService"
               
        languageSpecificType="java:com.x2.blocks.person.Person"
               
        serializer="com.x2.ext.axis.PersistableSerializerFactory"
               
        deserializer="com.x2.ext.axis.PersistableDeserializerFactory"
               
        encodingStype=" http://schema.xmlsoap.org/soap/encoding/"; />
          </service>
        </deployment>
        
        
        Here is my WSDL file:
        ----------------------------------------
        <?xml version="1.0" encoding="UTF-8"?>
        <wsdl:definitions
              targetNamespace="urn:PersonWorkflowService"
                  xmlns:soapenc="
http://schemas.xmlsoap.org/soap/encoding/";
                  xmlns:wsdlsoap="
http://schemas.xmlsoap.org/wsdl/soap/";
                  xmlns:tns2=" http://person.blocks.x2.com";
                  xmlns:typens="urn:PersonWorkflowService"
                  xmlns:apachesoap=" http://xml.apache.org/xml-soap";
                  xmlns:xsd=" http://www.w3.org/2001/XMLSchema";
                  xmlns:intf="urn:PersonWorkflowService"
                  xmlns:wsdl=" http://schemas.xmlsoap.org/wsdl/";
                  xmlns:impl="urn:PersonWorkflowService"
              xmlns=" http://schemas.xmlsoap.org/wsdl/";>
         <wsdl:types/>
        
         <!--
           <types>
              <xsd:schema targetNamespace="urn:PersonWorkflowService"
        xmlns:xsd=" http://www.w3.org/1999/XMLSchema";>
              <xsd:complexType name="Person">
                <xsd:all>
                    <xsd:element name="PersonID" type="xsd:int"/>
                    <xsd:element name="FirstName" type="xsd:string"/>
                    <xsd:element name="LastName" type="xsd:string"/>
                </xsd:all>
              </xsd:complexType>
            </xsd:schema>
          </types>
        -->
        
           <wsdl:message name="testResponse">
        
              <wsdl:part name="testReturn" type="xsd:string"/>
        
           </wsdl:message>
        
           <wsdl:message name="createPersonResponse">
        
              <wsdl:part name="createPersonReturn" type="xsd:anyType"/>
        
           </wsdl:message>
        
           <wsdl:message name="createPersonRequest">
        
           </wsdl:message>
        
           <wsdl:message name="testRequest">
        
           </wsdl:message>
        
           <wsdl:portType name="PersonWorkflowPort">
        
              <wsdl:operation name="test">
        
                 <wsdl:input name="testRequest"
message="intf:testRequest"/>
        
                 <wsdl:output name="testResponse"
message="intf:testResponse"/>
        
              </wsdl:operation>
        
              <wsdl:operation name="createPerson">
        
                 <wsdl:input name="createPersonRequest"
        message="intf:createPersonRequest"/>
        
                 <wsdl:output name="createPersonResponse"
        message="intf:createPersonResponse"/>
        
              </wsdl:operation>
        
           </wsdl:portType>
        
           <wsdl:binding name="PersonWorkflowServiceSoapBinding"
        type="intf:PersonWorkflowPort">
        
              <wsdlsoap:binding style="rpc"
        transport=" http://schemas.xmlsoap.org/soap/http"/>
        
              <wsdl:operation name="test">
        
                 <wsdlsoap:operation soapAction=""/>
        
                 <wsdl:input name="testRequest">
        
                    <wsdlsoap:body use="encoded"
        encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/";
        namespace="urn:PersonWorkflowService"/>
        
                 </wsdl:input>
        
                 <wsdl:output name="testResponse">
        
                    <wsdlsoap:body use="encoded"
        encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/";
        namespace="urn:PersonWorkflowService"/>
        
                 </wsdl:output>
        
              </wsdl:operation>
        
              <wsdl:operation name="createPerson">
        
                 <wsdlsoap:operation soapAction=""/>
        
                 <wsdl:input name="createPersonRequest">
        
                    <wsdlsoap:body use="encoded"
        encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/";
        namespace="urn:PersonWorkflowService"/>
        
                 </wsdl:input>
        
                 <wsdl:output name="createPersonResponse">
        
                    <wsdlsoap:body use="encoded"
        encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/";
        namespace="urn:PersonWorkflowService"/>
        
                 </wsdl:output>
        
              </wsdl:operation>
        
           </wsdl:binding>
        
           <wsdl:service name="PersonWorkflowService">
        
              <wsdl:port name="PersonWorkflowService"
        binding="intf:PersonWorkflowServiceSoapBinding">
        
                 <wsdlsoap:address
        location="
http://localhost:8080/axis/services/PersonWorkflowService"/>
        
              </wsdl:port>
        
           </wsdl:service>
        
        </wsdl:definitions>
        
        
        Here is my TCPMonitor Report:
        ------------------------------------------
        Listen Port: 8070
        Target Host: localhost
        Target Port: 8080
        ==== Request ====
        POST /axis/services/PersonWorkflowService HTTP/1.0
        Content-Type: text/xml; charset=utf-8
        Accept: application/soap+xml, application/dime,
multipart/related, text/*
        User-Agent: Axis/beta3
        Host: localhost
        Cache-Control: no-cache
        Pragma: no-cache
        SOAPAction: ""
        Content-Length: 389
        
        <?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>
          <ns1:createPerson
        soapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/";
        xmlns:ns1="PersonWorkflowService"/>
         </soapenv:Body>
        </soapenv:Envelope>==== Response ====
        HTTP/1.1 200 OK
        Date: Sat, 14 Dec 2002 04:50:48 GMT
        Server: Jetty/4.1.0 (Windows 2000 5.0 x86)
        Servlet-Engine: Jetty/4.1.0 (Servlet 2.3; JSP 1.2; java 1.4.0)
        Content-Type: text/xml; charset=utf-8
        
        <?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>
          <ns1:createPersonResponse
        soapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/";
        xmlns:ns1="PersonWorkflowService">
           <createPersonReturn href="#id0"/>
          </ns1:createPersonResponse>
          <multiRef id="id0" soapenc:root="0"
        soapenv:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/";
        xsi:type="ns2:Person"
        xmlns:soapenc=" http://schemas.xmlsoap.org/soap/encoding/";
        xmlns:ns2="PersonWorkflowService">
           <PersonID xsi:type="xsd:int">1177</PersonID>
           <FisrtName xsi:type="xsd:string">Super</FisrtName>
           <LastName xsi:type="xsd:string">Man</LastName>
          </multiRef>
         </soapenv:Body>
        </soapenv:Envelope>
        
        
        Here is my test:
        ---------------------------------------------
        public void testPerson() throws Exception
            {
                String endpoint =
        " http://localhost:8070/axis/services/PersonWorkflowService";;
               
                Service srvc = new Service();
               
                Call    call = (Call)srvc.createCall();
               
                call.setTargetEndpointAddress ( new
java.net.URL(endpoint) );
               
                call.setOperationName         ( new
QName("PersonWorkflowService",
        "createPerson") );
                                       
                                        /*
                                        QName qname = new
        QName("PersonWorkflowService", "Person");
                                        Class clz =
        com.x2.blocks.person.Person.class;
                                        call.registerTypeMapping(clz,
qname,
        com.x2.ext.axis.PersistableSerializerFactory.class,
        com.x2.ext.axis.PersistableDeserializerFactory.class);
        
call.setReturnType(XMLType.XSD_ANYTYPE);
                                        */
                                       
                                        Person p = (Person)call.invoke(
new Object[]
        {} );
                                       
                                        System.out.println("Person: " +
        p.getPersonID() + " = " + p.getFirstName() + ", " +
p.getLastName() + "\n");
                        }
        
        
        Gad, any help or tips or suggestions would be really
appreciated, I've been
        banging my head against the wall on this one for some time
now...
        
        Thanks.
        
        KJQ
        [EMAIL PROTECTED]
        

<<winmail.dat>>

Reply via email to