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=12758>. 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=12758 Deserialization of complex classes throws SAXException Summary: Deserialization of complex classes throws SAXException Product: Axis Version: current (nightly) Platform: PC OS/Version: Linux Status: NEW Severity: Normal Priority: Other Component: Serialization/Deserialization AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I'm using what I believe to be the latest version of AXIS on Linux (I downloaded "xml-axis-rc1-bin.zip" yesterday - 16 Sept 02) and trying to talk to a Borland SOAP server with 5 different services. I used WSDL2Java to generate all the classes I need from the following service: http://tims.moveyourselftrailer.com.au:8000/scripts/SackTruck.dll/wsdl/ISackTruc k I used this snippet of code to try and access the simplest of the ports, just as worked previously for another service on the same server: ISackTruckservice locator = new ISackTruckserviceLocator(); ISackTruck client = locator.getISackTruckPort(); Object fees = client.getSackTruckFees(); And got: org.xml.sax.SAXException: operation description is missing parameter description! at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220) 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.isacktruck.ISackTruckbindingStub.getSackTruckFees (ISackTruckbindingStub.java:228) at com.touchcorp.remote.party.ISackTruckService.getSackTruckFees (ISackTruckService.java:96) at com.touchcorp.remote.party.ISackTruckService.main (ISackTruckService.java:133) [ERROR] Call - -Exception: <org.xml.sax.SAXException: operation description is missing parameter description!> Exception in thread "main" AxisFault faultCode: {http://xml.apache.org/axis/}Server.userException faultString: org.xml.sax.SAXException: operation description is missing parameter description! faultActor: null faultDetail: stackTrace: org.xml.sax.SAXException: operation description is missing parameter description! at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220) 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.isacktruck.ISackTruckbindingStub.getSackTruckFees (ISackTruckbindingStub.java:228) at com.touchcorp.remote.party.ISackTruckService.getSackTruckFees (ISackTruckService.java:96) at com.touchcorp.remote.party.ISackTruckService.main (ISackTruckService.java:133) org.xml.sax.SAXException: operation description is missing parameter description! org.xml.sax.SAXException: operation description is missing parameter description! at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220) 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.isacktruck.ISackTruckbindingStub.getSackTruckFees (ISackTruckbindingStub.java:228) at com.touchcorp.remote.party.ISackTruckService.getSackTruckFees (ISackTruckService.java:96) at com.touchcorp.remote.party.ISackTruckService.main (ISackTruckService.java:133) But, if I go back and use Apache SOAP directly, everything seems to work just fine. I am *not* using an operation style of "rpc" when I call via SOAP directly. My code looks more like this: URL url = new URL(locator.getISackTruckPortAddress()); String uri = "urn:uSackTruckFee"; String method = "getSackTruckFees"; Class type = com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class; Vector args = new Vector(); // get short version of type class name String typeName = type.getName(); int index = typeName.lastIndexOf("."); if (index > 0) typeName = typeName.substring(index+1); // set up bean mappings SOAPMappingRegistry registry = new SOAPMappingRegistry(); BeanSerializer serializer = new BeanSerializer(); registry.mapTypes(Constants.NS_URI_SOAP_ENC, new QName(uri, typeName), type, serializer, serializer); // build the call Call call = new Call(); call.setSOAPMappingRegistry(registry); call.setTargetObjectURI(uri); call.setMethodName(method); call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); call.setParams(args); // make the call Response response = call.invoke(url, ""); Help! I have attached some of the relevant WSDL2Java-generated code below. This is the most common error I am seeing with AXIS, and I get it with almost every method of this service I try. -------------------------------------------------------------------------------- ---------------------------------------------------------------------------- ============================ from ISackTruckbindingStub.java: ============================ public com.touchcorp.soap.isacktruck.TSackTruckFeeInfo getSackTruckFees() throws java.rmi.RemoteException { if (super.cachedEndpoint == null) { throw new org.apache.axis.NoEndPointException(); } org.apache.axis.client.Call _call = createCall(); _call.setReturnType(new javax.xml.namespace.QName ("urn:uSackTruckFee", "TSackTruckFeeInfo"), com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class); _call.setUseSOAPAction(true); _call.setSOAPActionURI("urn:uSackTruckIntf- ISackTruck#getSackTruckFees"); _call.setOperationStyle("rpc"); _call.setOperationName(new javax.xml.namespace.QName ("urn:uSackTruckIntf-ISackTruck", "getSackTruckFees")); java.lang.Object _resp = _call.invoke(new java.lang.Object[] {}); if (_resp instanceof java.rmi.RemoteException) { throw (java.rmi.RemoteException)_resp; } else { try { return (com.touchcorp.soap.isacktruck.TSackTruckFeeInfo) _resp; } catch (java.lang.Exception _exception) { return (com.touchcorp.soap.isacktruck.TSackTruckFeeInfo) org.apache.axis.utils.JavaUtils.convert(_resp, com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class); } } } ============================ from TSackTruckFeeInfo.java: ============================ /** * TSackTruckFeeInfo.java * * This file was auto-generated from WSDL * by the Apache Axis WSDL2Java emitter. */ package com.touchcorp.soap.isacktruck; public class TSackTruckFeeInfo implements java.io.Serializable { private double deposit; private double hireFee; public TSackTruckFeeInfo() { } public double getDeposit() { return deposit; } public void setDeposit(double deposit) { this.deposit = deposit; } public double getHireFee() { return hireFee; } public void setHireFee(double hireFee) { this.hireFee = hireFee; } private java.lang.Object __equalsCalc = null; public synchronized boolean equals(java.lang.Object obj) { if (!(obj instanceof TSackTruckFeeInfo)) return false; TSackTruckFeeInfo other = (TSackTruckFeeInfo) obj; if (obj == null) return false; if (this == obj) return true; if (__equalsCalc != null) { return (__equalsCalc == obj); } __equalsCalc = obj; boolean _equals; _equals = true && deposit == other.getDeposit() && hireFee == other.getHireFee(); __equalsCalc = null; return _equals; } private boolean __hashCodeCalc = false; public synchronized int hashCode() { if (__hashCodeCalc) { return 0; } __hashCodeCalc = true; int _hashCode = 1; _hashCode += new Double(getDeposit()).hashCode(); _hashCode += new Double(getHireFee()).hashCode(); __hashCodeCalc = false; return _hashCode; } // Type metadata private static org.apache.axis.description.TypeDesc typeDesc = new org.apache.axis.description.TypeDesc(TSackTruckFeeInfo.class); static { org.apache.axis.description.FieldDesc field = new org.apache.axis.description.ElementDesc(); field.setFieldName("deposit"); field.setXmlName(new javax.xml.namespace.QName("", "Deposit")); typeDesc.addFieldDesc(field); field = new org.apache.axis.description.ElementDesc(); field.setFieldName("hireFee"); field.setXmlName(new javax.xml.namespace.QName("", "HireFee")); typeDesc.addFieldDesc(field); }; /** * Return type metadata object */ public static org.apache.axis.description.TypeDesc getTypeDesc() { return typeDesc; } /** * Get Custom Serializer */ public static org.apache.axis.encoding.Serializer getSerializer( java.lang.String mechType, java.lang.Class _javaType, javax.xml.namespace.QName _xmlType) { return new org.apache.axis.encoding.ser.BeanSerializer( _javaType, _xmlType, typeDesc); } /** * Get Custom Deserializer */ public static org.apache.axis.encoding.Deserializer getDeserializer( java.lang.String mechType, java.lang.Class _javaType, javax.xml.namespace.QName _xmlType) { return new org.apache.axis.encoding.ser.BeanDeserializer( _javaType, _xmlType, typeDesc); } }