|
Anna,
You are a star! Thanks loads for that.
It does exactly what I need it to!
Thanks loads
Paul
----- Original Message -----
Sent: Thursday, June 06, 2002 3:57
PM
Subject: Re: Retrieving data from a SOAP
packet
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
|