Ok, here is my actual code:

        javax.xml.rpc.namespace.QName p0QName = new javax.xml.rpc.namespace.QName("controtex.com", "code1");
        call.addParameter(p0QName, new javax.xml.rpc.namespace.QName("http://www.w3.org/2001/XMLSchema", "int"), int.class,     javax.xml.rpc.ParameterMode.IN);
      
        call.setReturnType(org.apache.axis.Constants.XSD_STRING);
        call.setUseSOAPAction(true);
        call.setSOAPActionURI("controtex.com/findZipCordinates");
        call.setEncodingStyle(null);
        call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
        call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
        call.setOperationStyle("wrapped");
        call.setOperationName(new javax.xml.rpc.namespace.QName("controtex.com", "findZipCordinates"));

        RPCElement[] input = new RPCElement[1];
        RPCParam arg1 = new RPCParam("controtex.com", "code1", new Integer(code1));
        input[0] = new RPCElement("controtex.com", "findZipCordinates", new Object[]{arg1});

        Vector          elems = (Vector) call.invoke( input ); // actual invoke here.
        SOAPBodyElement elem  = null ;
        Element         e     = null ;
        try{
        elem = (SOAPBodyElement) elems.get(0);
        e    = elem.getAsDOM();

        str = XMLUtils.ElementToString(e);


        }catch(Exception ex){
          ex.printStackTrace();
        }
        return str;

The problem is you can't use call.invoke(String p0, Object[] objs) directly, if you do, Axis will use SimpleDeser to deserialize it.
Instead, I think, you should try to use call.invoke(RPCElement[] input); and get a Vector of SOAPBodyElement objects, and convert each SOAPBodyElement to xml String, then parse the xml String as you needed.

I had the same problem as you described and this is my solution.

Anna


At 03:41 PM 6/6/2002 +0100, you wrote:
Here is the code I am using:
 
        Service  service = new Service();
        Call     call    = (Call) service.createCall();
       
        // create the endpoint URL
        String endpoint = "http://localhost:8900/Soap-Control";
       
        // set up the call information
        call.setTargetEndpointAddress( new URL(endpoint) );
        call.setOperationStyle("rpc");
       
        RPCParam a1 = new RPCParam("hostSessionID", new String("ABC12345"));
        RPCParam a2 = new RPCParam("source", new String("/localstore/Partner.eps"));
        RPCParam a2a = new RPCParam("platform", new String("WinNT"));
        RPCParam a3 = new RPCParam("sessionType", new String("viewer"));
        RPCParam a4 = new RPCParam("userID", new String("1"));
        RPCParam a5 = new RPCParam("firstName", new String("Paul"));
        RPCParam a6 = new RPCParam("lastName", new String("Johnston"));

 
        String obj = "";
       
        // actually do the call
        try {
            obj = (String) call.invoke("CreateSession2", new Object[] { a1, a2, a2a, a3, a4, a5, a6 });
        } catch(AxisFault af) {
            System.err.println("FAULT:\n" + af.getFaultString());
        }
The error occurs when we hit the try{} block. The SOAP Packet returned looks like this:

 
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
           SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Body>  
        <CreateSession2Response>   
            <sessionReference>http://test.tm-ltd.co.uk:85/digest/3431393336323033323338313933363230333234360000000000000000000000</sessionReference>   
            <launch>
                <viewer>   
                    <version>3.0</version>   
                    <URL>http://test.tm-ltd.co.uk:85/digest/3431393336323033323338313933363230333234360000000000000000000000</URL>   
                    <versionURL>http://www.rtimage.com/client-version</versionURL>
                </viewer>
            </launch>  
        </CreateSession2Response> 
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 
And I get this error:
 
     [java] - Exception:
     [java]  org.xml.sax.SAXException: SimpleDeser cannot handle structured data!
    [java] FAULT:
      [java]    at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:155)
    [java] org.xml.sax.SAXException: SimpleDeser cannot handle structured data!
     [java]     at org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:831)

 
     [java]     at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:199)
     [java]     at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:589)
     [java]     at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:224)
     [java]     at org.apache.axis.message.RPCElement.getParams(RPCElement.java:248)
     [java]     at org.apache.axis.client.Call.invoke(Call.java:1701)
     [java]     at org.apache.axis.client.Call.invoke(Call.java:1608)
     [java]     at org.apache.axis.client.Call.invoke(Call.java:1634)
     [java]     at uk.co.tm.rtp.cfx_axis.processRequest(cfx_axis.java:57)
     [java]     at uk.co.tm.rtp.cfx_axis.main(cfx_axis.java:101)
     [java]

 
Basically, I have no idea why it isn't getting into Java.
 
Any more ideas?
 
Paul
 
PS Anna, I didn't really understand that code.  No comments, so I didn't see where I could put it in.  Thanks anyway.


Yiyan Chen <[EMAIL PROTECTED]>
Interactive Programmer

JGSullivan Interactive, Inc.
Tel. (312) 943-1600
Fax. (312) 943-9675


Reply via email to