Hi, In a first time, I explains the context with the class and the service to call : public class PrimaryServices { public ServiceOUT service() { PrimaryServicesOUT serviceOUT = new PrimaryServicesOUT(); Trace trace = new Trace(); serviceOUT.setTrace(trace); serviceOUT.setServices(this); return serviceOUT; } }
public class ServiceOUT implements java.io.Serializable { ... } public class PrimaryServicesOUT extends ServiceOUT { ... } My deployment descriptor contains all classes needed for SOAP to call the service : <isd:service xmlns:isd=http://xml.apache.org/xml-soap/deployment id="urn:ServiceInvokerTest"> <isd:provider type="java" scope="Application" methods="invoke"> <isd:java class="com.auchan.fwk.technique.service.ServiceInvoker" static="false"/> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListene r> <isd:mappings> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-serviceIN" qname="x:serviceIN" javaType="com.auchan.fwk.technique.service.ServiceIN" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-clazz" qname="x:clazz" javaType="com.auchan.fwk.technique.service.Clazz" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-property" qname="x:property" javaType="com.auchan.fwk.technique.service.Property" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-service" qname="x:service" javaType="com.auchan.fwk.technique.service.Service" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-param" qname="x:param" javaType="com.auchan.fwk.technique.service.Param" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-serviceOUT" qname="x:serviceOUT" javaType="com.auchan.fwk.technique.service.ServiceOUT" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-primaryServicesOUT" qname="x:primaryServicesOUT" javaType="tests.service.PrimaryServicesOUT" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-primaryServices" qname="x:primaryServices" javaType="tests.service.PrimaryServices" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-trace" qname="x:trace" javaType="com.auchan.fwk.technique.service.Trace" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> <isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="urn:xml-soap-service-message" qname="x:message" javaType="com.auchan.fwk.technique.service.Message" java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/> </isd:mappings> </isd:service> After start the server and deploy the deployment file in the application, I want to call the service with a class in client side : public class TestSerializeServiceInvoker { public static void main(String[] args) throws Exception { URL url = new URL (args [0]); SOAPMappingRegistry smr = new SOAPMappingRegistry(); BeanSerializer beanSer = new BeanSerializer(); // Map the types. smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service-serviceIN", "serviceIN"), ServiceIN.class, beanSer, beanSer); smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service-clazz", "clazz"), Clazz.class, beanSer, beanSer); smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service-property", "property"), Property.class, beanSer, beanSer); smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service-service", "service"), Service.class, beanSer, beanSer); smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service-param", "param"), Param.class, beanSer, beanSer); smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service-serviceOUT", "serviceOUT"), ServiceOUT.class, beanSer, beanSer); smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service- primaryServicesOUT", "primaryServicesOUT"), PrimaryServicesOUT.class, beanSer, beanSer); smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service-primaryServices", "primaryServices"), PrimaryServices.class, beanSer, beanSer); smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service-trace", "trace"), Trace.class, beanSer, beanSer); smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName("urn:xml-soap-service-message", "message"), Message.class, beanSer, beanSer); Call call = new Call(); call.setSOAPMappingRegistry(smr); call.setTargetObjectURI("urn:ServiceInvokerTest"); call.setMethodName("invoke"); Vector params = new Vector(); params.addElement (new Parameter ("objectIN", ServiceIN.class, serviceIN, Constants.NS_URI_SOAP_ENC)); call.setParams(params); // Invoke the service. Response resp; try { resp = call.invoke(url, ""); } catch (SOAPException e) { System.err.println ("Caught SOAPException (" + e.getFaultCode() + "): " + e.getMessage()); throw new RuntimeException (e); } // Check the response. if (!resp.generatedFault()) { Parameter ret = resp.getReturnValue(); serviceOUT = (ServiceOUT)ret.getValue(); } else { Fault fault = resp.getFault(); System.err.println("Generated fault: " + fault); } System.out.println ("is a PrimaryServicesOUT instance : " + (serviceOUT instanceof PrimaryServicesOUT )); //==> returns false } } The service returns a PrimaryServicesOUT instance, but the response from SOAP is a ServiceOUT instance. I think this is not correct, but I need your advice for that. Is it a Bug ? Best regards, :o) ASED - Bertrand Lancelot [EMAIL PROTECTED] N° interne : 5326 N° externe : 03 20 18 53 26