You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsif-user@ws.apache.org by Jeff Greif <jg...@alumni.princeton.edu> on 2003/07/19 04:23:50 UTC
Deserialization error
I'm using WSIF 2.0 dynamic invocation to access the operation getAllServiceSummaries of http://www.xmethods.net/interfaces/query.wsdl
The operation returns a soap array type (but the WSDL forgets to import the soap-encoding schema, so for the sake of my code, which must parse it, I've tweaked a copy of the wsdl to do so).
In my WSIF invocation, which uses the axis protocol, I register a serializer/deserializer for the type in question, which is called
ArrayOfServiceSummary, supposedly directing it to use a java class of mine called ComplexTypeWrapper (which just encloses the Element from the soap body). The serializer/deserializer was registered by provider-specific code like this:
log.debug("registering Axis ser/deser factories for "
+ (forInputEncoding ? "input " : "output ")
+ "parameter " + part.getName()
+ " java type " + jtype
+ " xml type " + part.getTypeName()
);
((WSIFPort_ApacheAxis)port).getCall()
.registerTypeMapping(jtype,
part.getTypeName(),
ComplexTypeWrapperSerializerFactory.class,
ComplexTypeWrapperDeserializerFactory.class);
and I see the log message with the right stuff in it when I run the program. (This code is old, and perhaps is failing to use a more generic WSIF type mapping facility that might have been added more recently.)
The program, when run, falls over in the Axis-specific deserialization of the response, with the exception below, on receipt of the Soap body excerpted below that. Somehow, the right deserialization class has been found, but the RPCHandler code is doing an extra "consistency" check against something that looks a bit peculiar (a variable called xsiClass which is supposed to be based on xsi:type values, which are not present in this particular Soap body!) and rejecting what it finds. The line numbers below refer to axis.jar from Axis 1.1 final, which I tried in place of the original axis.jar that came with WSIF 2.0, and which also crashed the same way near line 285.)
Does anyone have a suggestion about how to attack this problem? In particular, should I be addressing this to the Axis mailing list instead of the wsif one?
Jeff
- Exception:
org.xml.sax.SAXException: Bad types (class [Ljava.lang.Object; -> class com.webalo.wsdlclient.ComplexTypeWrapper)
at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:311)
at org.apache.axis.encoding.DeserializationContextImpl.startElement(Dese
rializationContextImpl.java:963)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.ja
va:198)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElemen
t.java:722)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:323)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
at org.apache.axis.client.Call.invoke(Call.java:2272)
at org.apache.axis.client.Call.invoke(Call.java:2171)
at org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.in
vokeAXISRPCStyle(Unknown Source)
at org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.in
vokeRequestResponseOperation(Unknown Source)
at org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.ex
ecuteRequestResponseOperation(Unknown Source)
...
Soap Response:
...
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<n:getAllServiceSummariesResponse xmlns:n="http://www.xmethods.net/interfaces/query">
<Result soapenc:arrayType="n4:ServiceSummary[355]">
<i><name>StrikeIron Simple Statistics Web Service</name><id>uuid:DE745F1B-6775-0A4E-DCFE-7A0CFD0623A0</id><shortDescription>This Web service takes a string of numbers (separated by a space) as input and allows the user to perform various statistical functions using this string of numbers.</shortDescription><wsdlURL>http://www.strikeiron.com/scripts/statistics.asmx?WSDL</wsdlURL><publisherID>StrikeIron</publisherID></i>...
Re: Deserialization error
Posted by Nirmal Mukhi <nm...@us.ibm.com>.
Hello Jeff,
I would try writing an Axis client for this and seeing if you are able to
do that (which should be simple enough). If that works ok, at least we can
be clear where the problem lies.
I would also encourage that you do the type mappings without writing
provider-specific code. You can do the mappings automatically (see
http://marc.theaimsgroup.com/?l=wsif-user&m=104696754929402&w=2), or
manually by adding a type mapping using the service.mapType(..) method on
the WSIFService object. This of course has nothing to do with the error
you are seeing.
Nirmal.
"Jeff Greif" <jg...@alumni.princeton.edu>
07/18/2003 10:23 PM
Please respond to wsif-user
To: <ws...@ws.apache.org>
cc:
Subject: Deserialization error
I'm using WSIF 2.0 dynamic invocation to access the operation
getAllServiceSummaries of http://www.xmethods.net/interfaces/query.wsdl
The operation returns a soap array type (but the WSDL forgets to import
the soap-encoding schema, so for the sake of my code, which must parse it,
I've tweaked a copy of the wsdl to do so).
In my WSIF invocation, which uses the axis protocol, I register a
serializer/deserializer for the type in question, which is called
ArrayOfServiceSummary, supposedly directing it to use a java class of mine
called ComplexTypeWrapper (which just encloses the Element from the soap
body). The serializer/deserializer was registered by provider-specific
code like this:
log.debug("registering Axis ser/deser factories for "
+ (forInputEncoding ? "input " : "output ")
+ "parameter " + part.getName()
+ " java type " + jtype
+ " xml type " + part.getTypeName()
);
((WSIFPort_ApacheAxis)port).getCall()
.registerTypeMapping(jtype,
part.getTypeName(),
ComplexTypeWrapperSerializerFactory.class,
ComplexTypeWrapperDeserializerFactory.class);
and I see the log message with the right stuff in it when I run the
program. (This code is old, and perhaps is failing to use a more generic
WSIF type mapping facility that might have been added more recently.)
The program, when run, falls over in the Axis-specific deserialization of
the response, with the exception below, on receipt of the Soap body
excerpted below that. Somehow, the right deserialization class has been
found, but the RPCHandler code is doing an extra "consistency" check
against something that looks a bit peculiar (a variable called xsiClass
which is supposed to be based on xsi:type values, which are not present in
this particular Soap body!) and rejecting what it finds. The line numbers
below refer to axis.jar from Axis 1.1 final, which I tried in place of the
original axis.jar that came with WSIF 2.0, and which also crashed the same
way near line 285.)
Does anyone have a suggestion about how to attack this problem? In
particular, should I be addressing this to the Axis mailing list instead
of the wsif one?
Jeff
- Exception:
org.xml.sax.SAXException: Bad types (class [Ljava.lang.Object; -> class
com.webalo.wsdlclient.ComplexTypeWrapper)
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:311)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Dese
rializationContextImpl.java:963)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.ja
va:198)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElemen
t.java:722)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:323)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
at org.apache.axis.client.Call.invoke(Call.java:2272)
at org.apache.axis.client.Call.invoke(Call.java:2171)
at
org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.in
vokeAXISRPCStyle(Unknown Source)
at
org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.in
vokeRequestResponseOperation(Unknown Source)
at
org.apache.wsif.providers.soap.apacheaxis.WSIFOperation_ApacheAxis.ex
ecuteRequestResponseOperation(Unknown Source)
...
Soap Response:
...
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<n:getAllServiceSummariesResponse xmlns:n="
http://www.xmethods.net/interfaces/query">
<Result soapenc:arrayType="n4:ServiceSummary[355]">
<i><name>StrikeIron Simple Statistics Web
Service</name><id>uuid:DE745F1B-6775-0A4E-DCFE-7A0CFD0623A0</id><shortDescription>This
Web service takes a string of numbers (separated by a space) as input and
allows the user to perform various statistical functions using this string
of
numbers.</shortDescription><wsdlURL>http://www.strikeiron.com/scripts/statistics.asmx?WSDL</wsdlURL><publisherID>StrikeIron</publisherID></i>...