You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by pierre post <pi...@secu.lu> on 2008/02/18 09:30:29 UTC

Href attribute support in soap envelope body

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 is

<?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 is

<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? Is there a workaround 
in CXF to support the request or perhaps in Delphi to suppress the use 
of the reference?

Thank you in advance for any comments on this issue.

Best regards,
Pierre Post