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