axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <Michael.S.W...@wellsfargo.com>
Subject axis 1.2.1 fails to deserialize xs:date in responses
Date Tue, 12 Jul 2005 20:45:57 GMT
Axis 1.2.1, as a client, seems to be failing to deserialize responses
properly and completely fails when parsing a date returned from an Axis
1.1 document/literal service.  Listed below are 3 scenarios where the
same WSDL was used to generate the client and serverside bindings using
WSDL2Java.  I ended up making a change to one of the WSDL2Java classes
to get this working.  This may or may not need to be filed as a bug and
I'm not sure if the change I made is safe or if it just solves my
problem.
 
I found through debugging that during deserialization that axis 1.2.1
would always end up stepping into lines 291-297 of the BeanDeserializer
where the comment states that it is an error if the deserializer is not
found at this point.  After comparing the generated 1.1 and 1.2.1
binding classes I found that making the following change fixed my
problem.  I've also attached the WSDL used below.
 

$ diff
./axis-1_2_1/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java
./axis-1_2_1/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java.o
rig 
363,369c363
<                       if (elemType != null &&
<                           elemType.getRefType() != null &&
<                           elemType.getRefType().getQName() != null) {
<                             pw.println("        elemField.setXmlType("
<                                 +
Utils.getNewQName(elemType.getRefType().getQName()) + ");");
<                       } else {
<                             pw.println("        elemField.setXmlType("
---
>                         pw.println("        elemField.setXmlType("
371d364
<                       }
 
If someone could take a look and let me know if I should be doing
something else I would appreciate it.  Unfortunately having everyone
upgrade to 1.2.1 is not an option right now so I really need this type
of interoperability to work.
 
thanks,
-mike
 
 
 

<wsdl:definitions xmlns="http://test.axis.com/wsdl2java/
<http://test.axis.com/wsdl2java/> "
xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/
<http://schemas.xmlsoap.org/wsdl/soap/> "
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/
<http://schemas.xmlsoap.org/wsdl/> "
xmlns:xs="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> "
targetNamespace="http://test.axis.com/wsdl2java/
<http://test.axis.com/wsdl2java/> " name="axisTest">
    <wsdl:types>
        <xs:schema targetNamespace="http://test.axis.com/wsdl2java/
<http://test.axis.com/wsdl2java/> "
xmlns="http://test.axis.com/wsdl2java/ <http://test.axis.com/wsdl2java/>
" xmlns:xs="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> " elementFormDefault="unqualified"
attributeFormDefault="unqualified">
            <xs:element name="testString" type="xs:string"/>
            <xs:element name="testDate" type="xs:date"/>
            <xs:complexType name="WSDLTest_Type">
                <xs:sequence>
                    <xs:element ref="testString" minOccurs="1"
maxOccurs="1"/>
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="WSDLTestResponse_Type">
                <xs:sequence>
                    <xs:element ref="testDate" minOccurs="1"
maxOccurs="1"/>
                </xs:sequence>
            </xs:complexType>
            <xs:element name="getWSDLTest" type="WSDLTest_Type"/>
            <xs:element name="getWSDLTestResponse"
type="WSDLTestResponse_Type"/>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="GetWSDLTestRequestMessage">
        <wsdl:part name="getWSDLTestRequest" element="getWSDLTest"/>
    </wsdl:message>
    <wsdl:message name="GetWSDLTestResponseMessage">
        <wsdl:part name="getWSDLTestResponse"
element="getWSDLTestResponse"/>
    </wsdl:message>
    <wsdl:portType name="GetWSDLTestPortType">
        <wsdl:operation name="getWSDLTest">
            <wsdl:input message="GetWSDLTestRequestMessage"/>
            <wsdl:output message="GetWSDLTestResponseMessage"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="GetWSDLTestSoapBinding"
type="GetWSDLTestPortType">
        <soapbind:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/
<http://schemas.xmlsoap.org/soap/http"/> >
        <wsdl:operation name="getWSDLTest" >
            <soapbind:operation style="document"
soapAction="http://service.wellsfargo.com/provider/pcs/account/2004/"/
<http://service.wellsfargo.com/provider/pcs/account/2004/"/> >
            <wsdl:input>
                <soapbind:body parts="getWSDLTestRequest"
use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soapbind:body parts="getWSDLTestResponse"
use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="GetWSDLTestService">
        <wsdl:port name="getWSDLTest" binding="GetWSDLTestSoapBinding">
            <soapbind:address
location="http://localhost:7001/services/getWSDLTest/"/
<http://localhost:7001/services/getWSDLTest/"/> >
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>
 
 
 
 
 
 
 
Axis 1.1 Client --> Axis 1.1 Service
Request:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
<http://schemas.xmlsoap.org/soap/envelope/> "
xmlns:xsd="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance> ">
 <soapenv:Body>
  <getWSDLTest xmlns="http://test.axis.com/wsdl2java/
<http://test.axis.com/wsdl2java/> ">
   <testString>Test String</testString>
  </getWSDLTest>
 </soapenv:Body>
</soapenv:Envelope>
 
Response:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
<http://schemas.xmlsoap.org/soap/envelope/> "
xmlns:xsd="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance> ">
 <soapenv:Body>
  <getWSDLTestResponse xmlns="http://test.axis.com/wsdl2java/
<http://test.axis.com/wsdl2java/> ">
   <testDate>2005-07-12</testDate>
  </getWSDLTestResponse>
 </soapenv:Body>
</soapenv:Envelope>
 
Result: works!!
 
 
 
Axis 1.2.1 Client --> Axis 1.1 Service
Request:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
<http://schemas.xmlsoap.org/soap/envelope/> "
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> "
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance> ">
                  
  <soapenv:Body>
    <getWSDLTest xmlns="http://test.axis.com/wsdl2java/
<http://test.axis.com/wsdl2java/> ">
      <testString xsi:type="xsd:string">Test String</testString>
    </getWSDLTest>
  </soapenv:Body>
</soapenv:Envelope>
 

Response:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
<http://schemas.xmlsoap.org/soap/envelope/> "
xmlns:xsd="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance> ">
 <soapenv:Body>
  <getWSDLTestResponse xmlns="http://test.axis.com/wsdl2java/
<http://test.axis.com/wsdl2java/> ">
   <testDate>2005-07-12</testDate>
  </getWSDLTestResponse>
 </soapenv:Body>
</soapenv:Envelope>
 
Result: Client fails to deserialize with
`java.lang.NumberFormatException: Invalid date/time`
 
 
 
Axis 1.2.1-fix Client --> Axis 1.1 Service
Request:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
<http://schemas.xmlsoap.org/soap/envelope/> "
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> "
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance> ">
                  
  <soapenv:Body>
    <getWSDLTest xmlns="http://test.axis.com/wsdl2java/
<http://test.axis.com/wsdl2java/> ">
      <testString>Test String</testString>
    </getWSDLTest>
  </soapenv:Body>
</soapenv:Envelope>
 

Response:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
<http://schemas.xmlsoap.org/soap/envelope/> "
xmlns:xsd="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema> "
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance> ">
 <soapenv:Body>
  <getWSDLTestResponse xmlns="http://test.axis.com/wsdl2java/
<http://test.axis.com/wsdl2java/> ">
   <testDate>2005-07-12</testDate>
  </getWSDLTestResponse>
 </soapenv:Body>
</soapenv:Envelope>
 
Result: works!!

Mime
View raw message