Jayachandra, thanks for your info and time. But I have never had lock to make things going. Here is my code:
package ws.Echo; public interface Echo { public String echoString(String arg); public String echoString_double(String arg1, String arg2); } //////////////////////////////////////////////////////////////////// wsdl file generaged by axis-java2wsdl: <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://www.echo/wscr" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://www.echo/wscr" xmlns:intf="http://www.echo/wscr" xmlns:tns1="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!--WSDL created by Apache Axis version: 1.2RC1 Built on Sep 29, 2004 (08:29:40 EDT)--> <wsdl:types> <schema elementFormDefault="qualified" targetNamespace="http://www.echo/wscr" xmlns="http://www.w3.org/2001/XMLSchema"> <element name="in0" type="tns1:string"/> <element name="echoStringReturn" type="tns1:string"/> <element name="in1" type="tns1:string"/> <element name="in2" type="tns1:string"/> <element name="echoString_doubleReturn" type="tns1:string"/> </schema> </wsdl:types> <wsdl:message name="echoStringResponse"> <wsdl:part element="impl:echoStringReturn" name="echoStringReturn"/> </wsdl:message> <wsdl:message name="echoStringRequest"> <wsdl:part element="impl:in0" name="in0"/> </wsdl:message> <wsdl:message name="echoString_doubleResponse"> <wsdl:part element="impl:echoString_doubleReturn" name="echoString_doubleReturn"/> </wsdl:message> <wsdl:message name="echoString_doubleRequest"> <wsdl:part element="impl:in1" name="in0"/> <wsdl:part element="impl:in2" name="in1"/> </wsdl:message> <wsdl:portType name="Echo"> <wsdl:operation name="echoString" parameterOrder="in0"> <wsdl:input message="impl:echoStringRequest" name="echoStringRequest"/> <wsdl:output message="impl:echoStringResponse" name="echoStringResponse"/> </wsdl:operation> <wsdl:operation name="echoString_double" parameterOrder="in0 in1"> <wsdl:input message="impl:echoString_doubleRequest" name="echoString_doubleRequest"/> <wsdl:output message="impl:echoString_doubleResponse" name="echoString_doubleResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="Echo" type="impl:Echo"> <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="echoString"> <wsdlsoap:operation soapAction="echoString"/> <wsdl:input name="echoStringRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="echoStringResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="echoString_double"> <wsdlsoap:operation soapAction="echoString_double"/> <wsdl:input name="echoString_doubleRequest"> <wsdlsoap:body use="literal"/> </wsdl:input> <wsdl:output name="echoString_doubleResponse"> <wsdlsoap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="EchoService"> <wsdl:port binding="impl:Echo" name="Echo"> <wsdlsoap:address location="http://localhost:8088/axis/services/Echo"/> </wsdl:port> </wsdl:service> </wsdl:definitions> /////////////////////////////////////////////////////////////////////////////// wsdd file generaged by axis-wsdl2java: <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <!-- Services from EchoService WSDL service --> <service name="Echo" provider="java:RPC" style="document" use="literal"> <parameter name="wsdlTargetNamespace" value="http://www.echo/wscr"/> <parameter name="wsdlServiceElement" value="EchoService"/> <parameter name="wsdlServicePort" value="Echo"/> <parameter name="className" value="ws.Echo.EchoSkeleton"/> <parameter name="wsdlPortType" value="Echo"/> <parameter name="allowedMethods" value="*"/> <parameter name="scope" value="Session"/> </service> </deployment> ////////////////////////////////////////////////////////////// imp file generated by axis-wsdl2java: package ws.Echo; public class EchoImpl implements ws.Echo.Echo{ public java.lang.String echoString(java.lang.String in0) throws java.rmi.RemoteException { return null; } public java.lang.String echoString_double(java.lang.String in0, java.lang.String in1) throws java.rmi.RemoteException { return null; } } ///////////////////////////////////////////////////////////////////// service file: package ws.Echo; public interface EchoService extends javax.xml.rpc.Service { public java.lang.String getEchoAddress(); public ws.Echo.Echo getEcho() throws javax.xml.rpc.ServiceException; public ws.Echo.Echo getEcho(java.net.URL portAddress) throws javax.xml.rpc.ServiceException; } /////////////////////////////////////////////////////////////////////////// skeleton file: package ws.Echo; public class EchoSkeleton implements ws.Echo.Echo, org.apache.axis.wsdl.Skeleton { private ws.Echo.Echo impl; private static java.util.Map _myOperations = new java.util.Hashtable(); private static java.util.Collection _myOperationsList = new java.util.ArrayList(); /** * Returns List of OperationDesc objects with this name */ public static java.util.List getOperationDescByName(java.lang.String methodName) { return (java.util.List)_myOperations.get(methodName); } /** * Returns Collection of OperationDescs */ public static java.util.Collection getOperationDescs() { return _myOperationsList; } static { org.apache.axis.description.OperationDesc _oper; org.apache.axis.description.FaultDesc _fault; org.apache.axis.description.ParameterDesc [] _params; _params = new org.apache.axis.description.ParameterDesc [] { new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://www.echo/wscr", "in0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), }; _oper = new org.apache.axis.description.OperationDesc("echoString", _params, new javax.xml.namespace.QName("http://www.echo/wscr", "echoStringReturn")); _oper.setReturnType(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string")); _oper.setElementQName(new javax.xml.namespace.QName("", "echoString")); _oper.setSoapAction("echoString"); _myOperationsList.add(_oper); if (_myOperations.get("echoString") == null) { _myOperations.put("echoString", new java.util.ArrayList()); } ((java.util.List)_myOperations.get("echoString")).add(_oper); _params = new org.apache.axis.description.ParameterDesc [] { new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://www.echo/wscr", "in1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://www.echo/wscr", "in2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), }; _oper = new org.apache.axis.description.OperationDesc("echoString_double", _params, new javax.xml.namespace.QName("http://www.echo/wscr", "echoString_doubleReturn")); _oper.setReturnType(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string")); _oper.setElementQName(new javax.xml.namespace.QName("", "echoString_double")); _oper.setSoapAction("echoString_double"); _myOperationsList.add(_oper); if (_myOperations.get("echoString_double") == null) { _myOperations.put("echoString_double", new java.util.ArrayList()); } ((java.util.List)_myOperations.get("echoString_double")).add(_oper); } public EchoSkeleton() { this.impl = new ws.Echo.EchoImpl(); } public EchoSkeleton(ws.Echo.Echo impl) { this.impl = impl; } public java.lang.String echoString(java.lang.String in0) throws java.rmi.RemoteException { java.lang.String ret = impl.echoString(in0); return ret; } public java.lang.String echoString_double(java.lang.String in0, java.lang.String in1) throws java.rmi.RemoteException { java.lang.String ret = impl.echoString_double(in0, in1); return ret; } } ////////////////////////////////////////////////////////////////////////////// locator file: package ws.Echo; public class EchoServiceLocator extends org.apache.axis.client.Service implements ws.Echo.EchoService { // Use to get a proxy class for Echo private java.lang.String Echo_address = "http://localhost:8088/axis/services/Echo"; public java.lang.String getEchoAddress() { return Echo_address; } // The WSDD service name defaults to the port name. private java.lang.String EchoWSDDServiceName = "Echo"; public java.lang.String getEchoWSDDServiceName() { return EchoWSDDServiceName; } public void setEchoWSDDServiceName(java.lang.String name) { EchoWSDDServiceName = name; } public ws.Echo.Echo getEcho() throws javax.xml.rpc.ServiceException { java.net.URL endpoint; try { endpoint = new java.net.URL(Echo_address); } catch (java.net.MalformedURLException e) { throw new javax.xml.rpc.ServiceException(e); } return getEcho(endpoint); } public ws.Echo.Echo getEcho(java.net.URL portAddress) throws javax.xml.rpc.ServiceException { try { ws.Echo.EchoStub _stub = new ws.Echo.EchoStub(portAddress, this); _stub.setPortName(getEchoWSDDServiceName()); return _stub; } catch (org.apache.axis.AxisFault e) { return null; } } public void setEchoEndpointAddress(java.lang.String address) { Echo_address = address; } /** * For the given interface, get the stub implementation. * If this service has no port for the given interface, * then ServiceException is thrown. */ public java.rmi.Remote getPort(Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException { try { if (ws.Echo.Echo.class.isAssignableFrom(serviceEndpointInterface)) { ws.Echo.EchoStub _stub = new ws.Echo.EchoStub(new java.net.URL(Echo_address), this); _stub.setPortName(getEchoWSDDServiceName()); return _stub; } } catch (java.lang.Throwable t) { throw new javax.xml.rpc.ServiceException(t); } throw new javax.xml.rpc.ServiceException("There is no stub implementation for the interface: " + (serviceEndpointInterface == null ? "null" : serviceEndpointInterface.getName())); } /** * For the given interface, get the stub implementation. * If this service has no port for the given interface, * then ServiceException is thrown. */ public java.rmi.Remote getPort(javax.xml.namespace.QName portName, Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException { if (portName == null) { return getPort(serviceEndpointInterface); } java.lang.String inputPortName = portName.getLocalPart(); if ("Echo".equals(inputPortName)) { return getEcho(); } else { java.rmi.Remote _stub = getPort(serviceEndpointInterface); ((org.apache.axis.client.Stub) _stub).setPortName(portName); return _stub; } } public javax.xml.namespace.QName getServiceName() { return new javax.xml.namespace.QName("http://www.echo/wscr", "EchoService"); } private java.util.HashSet ports = null; public java.util.Iterator getPorts() { if (ports == null) { ports = new java.util.HashSet(); ports.add(new javax.xml.namespace.QName("http://www.echo/wscr", "Echo")); } return ports.iterator(); } /** * Set the endpoint address for the specified port name. */ public void setEndpointAddress(java.lang.String portName, java.lang.String address) throws javax.xml.rpc.ServiceException { if ("Echo".equals(portName)) { setEchoEndpointAddress(address); } else { // Unknown Port Name throw new javax.xml.rpc.ServiceException(" Cannot set Endpoint Address for Unknown Port" + portName); } } /** * Set the endpoint address for the specified port name. */ public void setEndpointAddress(javax.xml.namespace.QName portName, java.lang.String address) throws javax.xml.rpc.ServiceException { setEndpointAddress(portName.getLocalPart(), address); } } /////////////////////////////////////////////////////////////////////////// stub file: package ws.Echo; public class EchoStub extends org.apache.axis.client.Stub implements ws.Echo.Echo { private java.util.Vector cachedSerClasses = new java.util.Vector(); private java.util.Vector cachedSerQNames = new java.util.Vector(); private java.util.Vector cachedSerFactories = new java.util.Vector(); private java.util.Vector cachedDeserFactories = new java.util.Vector(); static org.apache.axis.description.OperationDesc [] _operations; static { _operations = new org.apache.axis.description.OperationDesc[2]; _initOperationDesc1(); } private static void _initOperationDesc1(){ org.apache.axis.description.OperationDesc oper; oper = new org.apache.axis.description.OperationDesc(); oper.setName("echoString"); oper.addParameter(new javax.xml.namespace.QName("http://www.echo/wscr", "in0"), new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, org.apache.axis.description.ParameterDesc.IN, false, false); oper.setReturnType(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string")); oper.setReturnClass(java.lang.String.class); oper.setReturnQName(new javax.xml.namespace.QName("http://www.echo/wscr", "echoStringReturn")); oper.setStyle(org.apache.axis.enum.Style.DOCUMENT); oper.setUse(org.apache.axis.enum.Use.LITERAL); _operations[0] = oper; oper = new org.apache.axis.description.OperationDesc(); oper.setName("echoString_double"); oper.addParameter(new javax.xml.namespace.QName("http://www.echo/wscr", "in1"), new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, org.apache.axis.description.ParameterDesc.IN, false, false); oper.addParameter(new javax.xml.namespace.QName("http://www.echo/wscr", "in2"), new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, org.apache.axis.description.ParameterDesc.IN, false, false); oper.setReturnType(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string")); oper.setReturnClass(java.lang.String.class); oper.setReturnQName(new javax.xml.namespace.QName("http://www.echo/wscr", "echoString_doubleReturn")); oper.setStyle(org.apache.axis.enum.Style.DOCUMENT); oper.setUse(org.apache.axis.enum.Use.LITERAL); _operations[1] = oper; } public EchoStub() throws org.apache.axis.AxisFault { this(null); } public EchoStub(java.net.URL endpointURL, javax.xml.rpc.Service service) throws org.apache.axis.AxisFault { this(service); super.cachedEndpoint = endpointURL; } public EchoStub(javax.xml.rpc.Service service) throws org.apache.axis.AxisFault { if (service == null) { super.service = new org.apache.axis.client.Service(); } else { super.service = service; } } private org.apache.axis.client.Call createCall() throws java.rmi.RemoteException { try { org.apache.axis.client.Call _call = (org.apache.axis.client.Call) super.service.createCall(); if (super.maintainSessionSet) { _call.setMaintainSession(super.maintainSession); } if (super.cachedUsername != null) { _call.setUsername(super.cachedUsername); } if (super.cachedPassword != null) { _call.setPassword(super.cachedPassword); } if (super.cachedEndpoint != null) { _call.setTargetEndpointAddress(super.cachedEndpoint); } if (super.cachedTimeout != null) { _call.setTimeout(super.cachedTimeout); } if (super.cachedPortName != null) { _call.setPortName(super.cachedPortName); } java.util.Enumeration keys = super.cachedProperties.keys(); while (keys.hasMoreElements()) { java.lang.String key = (java.lang.String) keys.nextElement(); _call.setProperty(key, super.cachedProperties.get(key)); } return _call; } catch (java.lang.Throwable _t) { throw new org.apache.axis.AxisFault("Failure trying to get the Call object", _t); } } public java.lang.String echoString(java.lang.String in0) throws java.rmi.RemoteException { if (super.cachedEndpoint == null) { throw new org.apache.axis.NoEndPointException(); } org.apache.axis.client.Call _call = createCall(); _call.setOperation(_operations[0]); _call.setUseSOAPAction(true); _call.setSOAPActionURI("echoString"); _call.setEncodingStyle(null); _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE); _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE); _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS); _call.setOperationName(new javax.xml.namespace.QName("", "echoString")); setRequestHeaders(_call); setAttachments(_call); java.lang.Object _resp = _call.invoke(new java.lang.Object[] {in0}); if (_resp instanceof java.rmi.RemoteException) { throw (java.rmi.RemoteException)_resp; } else { extractAttachments(_call); try { return (java.lang.String) _resp; } catch (java.lang.Exception _exception) { return (java.lang.String) org.apache.axis.utils.JavaUtils.convert(_resp, java.lang.String.class); } } } public java.lang.String echoString_double(java.lang.String in0, java.lang.String in1) throws java.rmi.RemoteException { if (super.cachedEndpoint == null) { throw new org.apache.axis.NoEndPointException(); } org.apache.axis.client.Call _call = createCall(); _call.setOperation(_operations[1]); _call.setUseSOAPAction(true); _call.setSOAPActionURI("echoString_double"); _call.setEncodingStyle(null); _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE); _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE); _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS); _call.setOperationName(new javax.xml.namespace.QName("", "echoString_double")); setRequestHeaders(_call); setAttachments(_call); java.lang.Object _resp = _call.invoke(new java.lang.Object[] {in0, in1}); if (_resp instanceof java.rmi.RemoteException) { throw (java.rmi.RemoteException)_resp; } else { extractAttachments(_call); try { return (java.lang.String) _resp; } catch (java.lang.Exception _exception) { return (java.lang.String) org.apache.axis.utils.JavaUtils.convert(_resp, java.lang.String.class); } } } } ////////////////////////////////////////////////////////////////////////////// When I use tcpmoni to see the soap code, it seams to me that the client side code is fine and I did see string "10" and "12" passed in the envelope. But on the server size, I couldn't see the string "12", it was null. And the tomcat server displayed the following errors: java.io.NotSerializableException: ws.Echo.EchoImpl at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java :1332) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13 04) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav a:1247) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278) at org.apache.catalina.session.StandardSession.writeObject(StandardSessi So I suspected that wsdl2java generates skeleton code with some error. -Henry P.S. Could you zip your entire code and send to me so I can make comparison between your and mine?