Comments below... Am Montag, den 18.02.2008, 11:57 +0100 schrieb pierre post: > Hi all, > > I have a problem when calling an Apache CXF Web service (CXF version > is > 2.0.4) running under Apache Tomcat 6 from a Delphi client program. > The > third parameter "JobParamBean" that I receive in my Web service on > Tomcat is always null but there is no exception or any other hint in > the > Tomcat logs. The parameter is a simple JavaBean class (uses getters > and > setters for all properties and implements serializable). Moreover, > the > problem does not appear when calling the same Web service from a Java > client. This is my Web service: > > @WebService(name="JobService", > targetNamespace="http://annuaire.ciss.lu") > @SOAPBinding(style=Style.RPC) > public interface JobService { > @WebMethod(operationName="ExecuteJob") > @WebResult(name="JobParamsOut") > public String[] executeJob(@WebParam(name="JobName") String > jobName, > @WebParam(name="JobParamsIn") String[] input, > @WebParam(name="JobParamBean") JobServiceParam param) throws > ServiceException; > } > > When calling this web service from the Delphi application (using the > latest available HTTPRIO component and WSDL importer), the > corresponding > generated SOAP request produces "null" as JobParamBean parameter: > > <?xml version="1.0"?> > <SOAP-ENV:Envelope > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> > <SOAP-ENV:Body > > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:NS2="http://annuaire.ciss.lu"> > <NS1:ExecuteJob xmlns:NS1="http://annuaire.ciss.lu"> > <JobName xsi:type="xsd:string">TestFromDelphi</JobName> > <JobParamsIn xsi:type="SOAP-ENC:Array" > SOAP-ENC:arrayType="xsd:string[2]"> > <item>valueDelphi1</item> > <item>valueDelphi2</item> > </JobParamsIn> > <JobParamBean href="#1" /> > </NS1:ExecuteJob> > <NS2:JobServiceParamType id="1" > xsi:type="NS2:JobServiceParamType"> > <key xsi:type="xsd:string">paramkey</key> > <value xsi:type="xsd:string">paramval</value> > </NS2:JobServiceParamType> > </SOAP-ENV:Body> > </SOAP-ENV:Envelope> > > I tried to call the same web service from Java (also using Apache CXF > 2.0.4) and the generated SOAP request correctly creates a > JobParamBean > instance: > > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > <soap:Body> > <ns1:ExecuteJob xmlns:ns1="http://annuaire.ciss.lu"> > <JobName>TestFromJava</JobName> > <JobParamsIn> > <item>valueJava1</item> > <item>valueJava2</item> > </JobParamsIn> > <JobParamBean> > <key>keyJava</key> > <value > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:ns3="http://www.w3.org/2001/XMLSchema" > xsi:type="ns3:int"> > 1 > </value> > </JobParamBean> > </ns1:ExecuteJob> > </soap:Body> > </soap:Envelope> > > I noticed that the Delphi SOAP request uses a reference for the third > parameter (href="#1") but the Java SOAP request does not. Is it possible > that CXF doesn't support this kind of references?
Yes, quite possible. I've never seen that href structure in a SOAP call and doubt that it is JAX-WS compatible. > Is there a workaround > in CXF to support the request or perhaps in Delphi to suppress the use > of the reference? I would ask on the Delphi lists for this. Delphi appears to be doing something strange here. I don't think Delphi's SOAP client call above would work with the Glassfish Metro web service stack either. Glen
