You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-user@ws.apache.org by Te...@i2.com on 2001/04/03 17:09:52 UTC
RE: Array Serialization - Thanks
Thanks. That did the trick.
Terry
"Toomey, Joe"
<jtoomey@rati To: "'soap-user@xml.apache.org'" <so...@xml.apache.org>
onal.com> cc:
Subject: RE: Array Serialization
04/02/01
06:19 PM
Please
respond to
soap-user
Unless you attached the code after you starting chaging it, you
are not setting the parameter type to a string array when you build
your parameter vector in your client call. You're setting it to a string.
Instead of the line:
params.addElement (new Parameter("inBoard", String.class, inBoard,
null));
Try using:
params.addElement (new Parameter("inBoard", inBoard.getClass(),
inBoard,
null));
--Joe
-----Original Message-----
From: Terry_Truta@i2.com [mailto:Terry_Truta@i2.com]
Sent: Monday, April 02, 2001 6:20 PM
To: soap-user@xml.apache.org
Subject: Re: Array Serialization
I tried "doing nothing" for array serialization and I got the following
error.
Fault detected =
tictactoe.TicTacToeServer.moveTest(java.lang.String,boolean) --
no signature match
java.lang.Exception
at tictactoe.TicTacToeClient.getMove(TicTacToeClient.java:157)
at tictactoe.TicTacToeClient.main(TicTacToeClient.java:65)
Exception in thread "main" java.lang.NullPointerException
at tictactoe.TicTacToeClient.main(TicTacToeClient.java:67)
Below is my client and server code. Note that when I modified this code to
just to send a String (non array) it worked fine. So I think I need to do
something else in order to get it to work with arrays. I also included the
XML envelopes from the TCP Tunnel tool. As you can see the client seems is
serializing the String array but it doesn't look like the data is being
serialized - just the information about the array object. The fault is
happening on the server side since it is looking for the method with the
signature (String, boolean) and not (String[], boolean). Can you see what
I'm doing wrong? Thanks.
Client code:
public String[] getMove(String[] inBoard) {
// Build the call.
Call call = new Call();
// Service uses standard SOAP encoding
String encodingStyleURI = Constants.NS_URI_SOAP_ENC;
call.setEncodingStyleURI(encodingStyleURI);
// Set service locator parameters
call.setTargetObjectURI ("urn:TicTacToeServer");
call.setMethodName ("moveTest");
// Create input parameter vector
Vector params = new Vector ();
params.addElement (new Parameter("inBoard", String.class, inBoard,
null));
params.addElement (new Parameter("isX", Boolean.class, new
Boolean(true), null));
call.setParams (params);
try {
// Invoke the service ....
log("Invoking service...");
Response resp = call.invoke (url,"");
...
My server code is just this:
public String[] moveTest(String[] board, boolean isX)
{
System.out.println("Processing move request...");
if (isX) {
board[4] = "X";
return board;
}
else {
board[4] = "O";
return board;
}
}
Finally, Here is the XML Envelopes for the request and response:
--------------------------- Request -----------------------------------
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV
="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi
="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd
="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:moveTest xmlns:ns1="urn:TicTacToeServer" SOAP-ENV:encodingStyle
="http://schemas.xmlsoap.org/soap/encoding/">
<inBoard xsi:type="xsd:string">[Ljava.lang.String;@43c749</inBoard>
<isX xsi:type="xsd:boolean">false</isX>
</ns1:moveTest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
------------------------------ Response ---------------------------------
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV
="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi
="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd
="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>tictactoe.TicTacToeServer.moveTest(java.lang.String,boolean)
-- no signature match</faultstring>
<faultactor>/soap/servlet/rpcrouter</faultactor>
<detail>
<stackTrace>java.lang.NoSuchMethodException:
tictactoe.TicTacToeServer.moveTest(java.lang.String,boolean) -- no
signature match
at
org.apache.soap.util.MethodUtils.getEntryPoint(MethodUtils.java:194)
at org.apache.soap.util.MethodUtils.getMethod(MethodUtils.java:548)
at org.apache.soap.util.MethodUtils.getMethod(MethodUtils.java:528)
at org.apache.soap.server.RPCRouter.invoke(RPCRouter.java:102)
at
org.apache.soap.providers.RPCJavaProvider.invoke(RPCJavaProvider.java:124)
at
org.apache.soap.server.http.RPCRouterServlet.doPost(RPCRouterServlet.java:26
7)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
at org.apache.tomcat.core.Handler.service(Handler.java:286)
at
org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:79
7)
at
org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpC
onnectionHandler.java:210)
at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
at java.lang.Thread.run(Thread.java:484)
</stackTrace>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Rainer Faller
<rainer.faller@innov To:
soap-user@xml.apache.org
ations.de> cc:
Subject: Re: Array
Serialization
04/02/01 06:20 AM
Please respond to
soap-user
> Terry_Truta@i2.com schrieb:
>
> Has anyone done array serialization? None of the examples do this. What
do
> you put for the javaType parameter for the mapTypes method of the
> SOAPMappingRegistry object? Better yet does any have some sample code?
> Thanks.
If you want to use the standard datatypes like String or int, nothing
has to be done. No changes to the mapping, no own
serializer/deserializer. For user-defined datatypes follow the
instructions of Stéphane Bélanger posted in this thread.
Rainer
---------------------------------------------------------------------
To unsubscribe, e-mail: soap-user-unsubscribe@xml.apache.org
For additional commands, email: soap-user-help@xml.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: soap-user-unsubscribe@xml.apache.org
For additional commands, email: soap-user-help@xml.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: soap-user-unsubscribe@xml.apache.org
For additional commands, email: soap-user-help@xml.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: soap-user-unsubscribe@xml.apache.org
For additional commands, email: soap-user-help@xml.apache.org