I am using Java2Wsdl and WSDL2Java to create a web service and also invoke it.  
This all works fine.
However, in my end use of axis, in an applicaiton developlent tool, I cannot 
use the generated 
XXXSoapBIndingStub.java code, rather I need to dynamically create the call.  In 
looking at the 
code that WSDL2Java generates I have tried to distill that down.  However in my 
code when I call the
service, I getn teh SAXException: Found character data inside an array element 
while deserializing, 
even though the same SOAP messages are send in both cases.  This leads me to 
believe that I am 
not setting up something correctly when invoking the web service.  However I am 
at a loss to 
determine what I am missing.  The service is a "wrapped" service.  I only have 
this problem for
an array of simple types.  Using an array of benas things work (though the code 
below would 
be a tad different.

Any thoughts?

Ross

------------ Source Code Simplified version ----------------------------

public class CallService {

        public static void main(String[] args) {
        try {
            Service service = new Service();
            Call call = (Call) service.createCall();
            
call.setTargetEndpointAddress("http://localhost:6060/axis/services/SimpleWrap";);
            call.setOperationName("srIntArray");
            call.setOperationStyle(org.apache.axis.constants.Style.WRAPPED);
            call.setOperationUse(org.apache.axis.constants.Use.LITERAL);
            call.setUseSOAPAction(true);
            call.setSOAPActionURI("");
            call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, 
Boolean.FALSE);
            call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, 
Boolean.FALSE);
            call.setEncodingStyle(null);
            
call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
            service.setTypeMappingVersion("1.2");

            call.registerTypeMapping(int.class, new 
QName("http://www.w3.org/2001/XMLSchema";, "int"), ArraySerializerFactory.class,
                    ArrayDeserializerFactory.class);
            call.addParameter(new QName("urn:x.SimpleWrap", "values"), new 
QName("http://www.w3.org/2001/XMLSchema";, "int"),
                    ParameterMode.IN);
            call.setReturnType(new 
javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema";, "int"));
            call.setReturnClass(int[].class);
            call.setReturnQName(new 
javax.xml.namespace.QName("urn:x.SimpleWrap", "srIntArrayReturn"));

            /* gather up the input parameters */
            Object[] parms = new Object[1];
            int[] x = new int[2];
            x[0] = 450;
            x[1] = 340;
            parms[0] = x;

            /* make the call */
            Object ret = call.invoke(parms);

        } catch (Exception e) {
            System.out.println("Error on Web Serivce call:" + e);
            e.printStackTrace();
        }
    }
}

---------- WSDL ------------------
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="urn:x.SimpleWrap" 
xmlns:impl="urn:x.SimpleWrap" xmlns:intf="urn:x.SimpleWrap" 
xmlns:apachesoap="http://xml.apache.org/xml-soap"; 
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";>
<!--WSDL created by Apache Axis version: 1.2
Built on May 03, 2005 (02:20:24 EDT)-->
 <wsdl:types>
  <schema xmlns="http://www.w3.org/2001/XMLSchema"; 
targetNamespace="urn:x.SimpleWrap" elementFormDefault="qualified">
   <element name="add">
    <complexType>
     <sequence>
      <element name="a" type="xsd:int"/>
      <element name="b" type="xsd:int"/>
     </sequence>
    </complexType>
   </element>
   <element name="addResponse">
    <complexType>
     <sequence>
      <element name="addReturn" type="xsd:int"/>
     </sequence>
    </complexType>
   </element>
   <element name="srInfo">
    <complexType>
     <sequence>
      <element name="info" type="impl:Info"/>
     </sequence>
    </complexType>
   </element>
   <complexType name="Info">
    <sequence>
     <element name="age" type="xsd:int"/>
     <element name="name" nillable="true" type="xsd:string"/>
     <element name="phone" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <element name="srInfoResponse">
    <complexType>
     <sequence>
      <element name="srInfoReturn" type="impl:Info"/>
     </sequence>
    </complexType>
   </element>
   <element name="srInfoArray">
    <complexType>
     <sequence>
      <element name="info" type="impl:Info" maxOccurs="unbounded"/>
     </sequence>
    </complexType>
   </element>
   <element name="srInfoArrayResponse">
    <complexType>
     <sequence>
      <element name="srInfoArrayReturn" type="impl:Info" maxOccurs="unbounded"/>
     </sequence>
    </complexType>
   </element>
   <element name="srIntArray">
    <complexType>
     <sequence>
      <element name="values" type="xsd:int" maxOccurs="unbounded"/>
     </sequence>
    </complexType>
   </element>
   <element name="srIntArrayResponse">
    <complexType>
     <sequence>
      <element name="srIntArrayReturn" type="xsd:int" maxOccurs="unbounded"/>
     </sequence>
    </complexType>
   </element>
  </schema>
 </wsdl:types>

   <wsdl:message name="srInfoArrayResponse">

      <wsdl:part name="parameters" element="impl:srInfoArrayResponse"/>

   </wsdl:message>

   <wsdl:message name="srInfoArrayRequest">

      <wsdl:part name="parameters" element="impl:srInfoArray"/>

   </wsdl:message>

   <wsdl:message name="srInfoResponse">

      <wsdl:part name="parameters" element="impl:srInfoResponse"/>

   </wsdl:message>

   <wsdl:message name="srIntArrayResponse">

      <wsdl:part name="parameters" element="impl:srIntArrayResponse"/>

   </wsdl:message>

   <wsdl:message name="addRequest">

      <wsdl:part name="parameters" element="impl:add"/>

   </wsdl:message>

   <wsdl:message name="srInfoRequest">

      <wsdl:part name="parameters" element="impl:srInfo"/>

   </wsdl:message>

   <wsdl:message name="addResponse">

      <wsdl:part name="parameters" element="impl:addResponse"/>

   </wsdl:message>

   <wsdl:message name="srIntArrayRequest">

      <wsdl:part name="parameters" element="impl:srIntArray"/>

   </wsdl:message>

   <wsdl:portType name="SimpleWrap">

      <wsdl:operation name="add">

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

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

      </wsdl:operation>

      <wsdl:operation name="srInfo">

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

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

      </wsdl:operation>

      <wsdl:operation name="srInfoArray">

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

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

      </wsdl:operation>

      <wsdl:operation name="srIntArray">

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

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

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="SimpleWrapSoapBinding" type="impl:SimpleWrap">

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

      <wsdl:operation name="add">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="addRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="addResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

      <wsdl:operation name="srInfo">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="srInfoRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="srInfoResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

      <wsdl:operation name="srInfoArray">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="srInfoArrayRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="srInfoArrayResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

      <wsdl:operation name="srIntArray">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="srIntArrayRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="srIntArrayResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="SimpleWrapService">

      <wsdl:port name="SimpleWrap" binding="impl:SimpleWrapSoapBinding">

         <wsdlsoap:address location="http://localhost:8080/SimpleWrap"/>

      </wsdl:port>

   </wsdl:service>

</wsdl:definitions>

Reply via email to