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 [EMAIL PROTECTED]  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.

Reply via email to