axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 12753] - problem while deserializing output params based on WSDL (3 in params, 2 out params) in the client; org.xml.sax.SAXException: Bad types (double -> class java.lang.String)
Date Fri, 20 Sep 2002 04:24:55 GMT
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12753>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12753

problem while deserializing output params based on WSDL (3 in params, 2 out params) in the
client; org.xml.sax.SAXException: Bad types (double -> class java.lang.String)





------- Additional Comments From nbrennan@touchcorp.com  2002-09-20 04:24 -------
I have had the exact same problem as both of these bugs, but with complex types.

My error trace looks like this:

org.xml.sax.SAXException: Bad types (class com.touchcorp.soap.ihire.THireInfo -
> class java.lang.String)
        at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:273)
        at org.apache.axis.encoding.DeserializationContextImpl.startElement
(DeserializationContextImpl.java:883)
        at org.apache.axis.message.SAX2EventRecorder.replay
(SAX2EventRecorder.java:158)
        at org.apache.axis.message.MessageElement.publishToHandler
(MessageElement.java:681)
        at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
        at org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
        at org.apache.axis.client.Call.invoke(Call.java:1862)
        at org.apache.axis.client.Call.invoke(Call.java:1768)
        at org.apache.axis.client.Call.invoke(Call.java:1306)
        at com.touchcorp.soap.ihire.IHirebindingStub.getHireFromCustomerLicence
(IHirebindingStub.java:257)
        at com.touchcorp.remote.party.MystHireService.getHireFromCustomerLicence
(MystHireService.java:141)
        at com.touchcorp.remote.party.MystHireService.main
(MystHireService.java:188)
[ERROR] Call - -Exception: <org.xml.sax.SAXException: Bad types (class 
com.touchcorp.soap.ihire.THireInfo -> class java.lang.String)>
Exception in thread "main" AxisFault
 faultCode: {http://xml.apache.org/axis/}Server.userException
 faultString: org.xml.sax.SAXException: Bad types (class 
com.touchcorp.soap.ihire.THireInfo -> class java.lang.String)
 faultActor: null
 faultDetail:
        stackTrace: org.xml.sax.SAXException: Bad types (class 
com.touchcorp.soap.ihire.THireInfo -&gt; class java.lang.String)
...
(goes FOREVER)

Looking at the code in org.apache.axis.message.RPCHandler.onStartChild(), it 
looks to me like (just maybe) it's trying a bit too hard.  

The section that's failing appears to be trying to head off a possible 
deserialization problem by checking that source and destination types are 
actually convertible.   While this appears to be an appropriate action, you 
have to ask, "Why?  What would happen if we didn't do this check?"  If the 
deserialization actually is impossible, we'll throw an exception then.  This 
piece of code seems (to me, again, with respect) to be totally superfluous PLUS 
it means that you have to maintain JavaUtils.isConvertable() as well.

So I removed lines 267 to 277:
              if (paramDesc != null && paramDesc.getJavaType() != null) {
                  // If we have an xsi:type, make sure it makes sense
                  // with the current paramDesc type
                  Class xsiClass = 
                          context.getTypeMapping().getClassForQName(type);
                  if (!JavaUtils.isConvertable(xsiClass, destClass)) {
		      System.out.println("dser = " + dser.getClass().getName());
                      throw new SAXException("Bad types (" +
                                             xsiClass + " -> " + destClass 
+ ")"); // FIXME!
                  }
              }

And now it works for me.

My complex object "com.touchcorp.soap.ihire.THireInfo" is handled by the 
BeanSerializer and my client now works totally happily.  

Hope this is useful to you.

Mime
View raw message