Hi,

I am using axis 1.3 and this simple test-service crashes at the client side:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="Testservice"
                 targetNamespace="http://test.de";
                 xmlns:test="http://test.de";
                 xmlns:testdaten="http://transport.test.de";
                 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
                 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
                 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
 <wsdl:types>
   <xsd:schema targetNamespace="http://transport.test.de";>
         <xsd:complexType name="Results">
           <xsd:sequence>
<xsd:element name="resultLines" nillable="false" minOccurs="0" maxOccurs="unbounded" type="testdaten:ResultLine" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="ResultLine">
           <xsd:sequence>
<xsd:element name="hits" nillable="false" minOccurs="0" maxOccurs="unbounded" type="testdaten:Hit" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Hit">
           <xsd:sequence>
             <xsd:element name="id" nillable="false" type="xsd:decimal" />
<xsd:element name="isElem" nillable="false" type="xsd:boolean" /> </xsd:sequence> </xsd:complexType>
   </xsd:schema>
 </wsdl:types>
 <wsdl:message name="getResultsRequest">
 </wsdl:message>
 <wsdl:message name="getResultsResponse">
   <wsdl:part name="outputArray" type="testdaten:Results"/>
 </wsdl:message>
 <wsdl:portType name="Testservice">
   <wsdl:operation name="getResults">
     <wsdl:input message="test:getResultsRequest"/>
     <wsdl:output message="test:getResultsResponse"/>
   </wsdl:operation>
 </wsdl:portType>
 <wsdl:binding name="TestserviceSOAPBinding" type="test:Testservice">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
   <wsdl:operation name="getResults">
     <wsdl:input>
       <soap:body use="literal"/>
     </wsdl:input>
     <wsdl:output>
       <soap:body use="literal"/>
     </wsdl:output>
   </wsdl:operation>
 </wsdl:binding>
 <wsdl:service name="Testservice">
   <wsdl:port binding="test:TestserviceSOAPBinding" name="Testservice">
<soap:address location="http://localhost:8889/ws/services/Testservice"/>
   </wsdl:port>
 </wsdl:service>
</wsdl:definitions>

At the client side I get a SAXException:

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: Found character data inside an array element while deserializing
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Found character data inside an array element while deserializing at org.apache.axis.encoding.ser.ArrayDeserializer.characters(ArrayDeserializer.java:502) at org.apache.axis.encoding.DeserializationContext.characters(DeserializationContext.java:966) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:177) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
   at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
   at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
   at org.apache.axis.client.Call.invoke(Call.java:2467)
   at org.apache.axis.client.Call.invoke(Call.java:2366)
   at org.apache.axis.client.Call.invoke(Call.java:1812)
at de.test.TestserviceSOAPBindingStub.getResults(TestserviceSOAPBindingStub.java:175)
   at de.test.TestClient.main(TestClient.java:18)

   {http://xml.apache.org/axis/}hostname:LAP52

org.xml.sax.SAXException: Found character data inside an array element while deserializing
   at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
   at org.apache.axis.client.Call.invoke(Call.java:2470)
   at org.apache.axis.client.Call.invoke(Call.java:2366)
   at org.apache.axis.client.Call.invoke(Call.java:1812)
at de.test.TestserviceSOAPBindingStub.getResults(TestserviceSOAPBindingStub.java:175)
   at de.test.TestClient.main(TestClient.java:18)
Caused by: org.xml.sax.SAXException: Found character data inside an array element while deserializing at org.apache.axis.encoding.ser.ArrayDeserializer.characters(ArrayDeserializer.java:502) at org.apache.axis.encoding.DeserializationContext.characters(DeserializationContext.java:966) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:177) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
   at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
   at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
   at org.apache.axis.client.Call.invoke(Call.java:2467)
   ... 4 more
Exception in thread "main"


Here is the genrated SOAP Response:

<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>
        <getResultsResponse xmlns="">
<outputArray xsi:type="ns1:Hit" xmlns:ns1="http://transport.test.de";>
              <id>1</id>
              <isElem>true</isElem>
              <place xsi:nil="true"/>
           </outputArray>
<outputArray xsi:type="ns2:Hit" xmlns:ns2="http://transport.test.de";>
              <id>1</id>
              <isElem>true</isElem>
              <place xsi:nil="true"/>
           </outputArray>
<outputArray xsi:type="ns3:Hit" xmlns:ns3="http://transport.test.de";>
              <id>1</id>
              <isElem>true</isElem>
              <place xsi:nil="true"/>
           </outputArray>
<outputArray xsi:type="ns4:Hit" xmlns:ns4="http://transport.test.de";>
              <id>1</id>
              <isElem>true</isElem>
              <place xsi:nil="true"/>
           </outputArray>
<outputArray xsi:type="ns5:Hit" xmlns:ns5="http://transport.test.de";>
              <id>1</id>
              <isElem>true</isElem>
              <place xsi:nil="true"/>
           </outputArray>
<outputArray xsi:type="ns6:Hit" xmlns:ns6="http://transport.test.de";>
              <id>1</id>
              <isElem>true</isElem>
              <place>test</place>
           </outputArray>
        </getResultsResponse>
     </soapenv:Body>
  </soapenv:Envelope>

If I redeploy the service to the running server, the SOAP-Message doesn't contain the xsi-Types for outputArray and everthing works fine. But if I restart the server client crashes again.

This is the SOAP Response after redeployment:

<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>
        <getResultsResponse xmlns="">
           <outputArray>
              <outputArray>
                 <outputArray>
                    <id>1</id>
                    <isElem>true</isElem>
                    <place xsi:nil="true"/>
                 </outputArray>
                 <outputArray>
                    <id>1</id>
                    <isElem>true</isElem>
                    <place xsi:nil="true"/>
                 </outputArray>
                 <outputArray>
                    <id>1</id>
                    <isElem>true</isElem>
                    <place xsi:nil="true"/>
                 </outputArray>
              </outputArray>
              <outputArray>
                 <outputArray>
                    <id>1</id>
                    <isElem>true</isElem>
                    <place xsi:nil="true"/>
                 </outputArray>
                 <outputArray>
                    <id>1</id>
                    <isElem>true</isElem>
                    <place xsi:nil="true"/>
                 </outputArray>
                 <outputArray>
                    <id>1</id>
                    <isElem>true</isElem>
                    <place>test</place>
                 </outputArray>
              </outputArray>
           </outputArray>
        </getResultsResponse>
     </soapenv:Body>
  </soapenv:Envelope>

Has anybody an idea what's going wrong?

Regards,
Christian

Reply via email to