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

Reply via email to