You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by Stuart Roe <st...@ovic.co.uk> on 2009/05/08 16:27:10 UTC

Help with cxf missing parameters

Hope someone can help.
 
I have configured (WSDL first) cxfbc and cxfse to operate with the following
wsdl. The stub files created by wsdl2java are being called but the supplied
parameters are null (when the client provided non-null parameters). The
parameters (product and qty) can be seen in the packet dump below.  I have
also included a copy of the wsdl file used to create the stub files. 
 
As the appropriate SE function in the stub is being called I'm assuming that
the xbean configuration for both BC and SE are correct. 
 
Environment: WinXP, SMX 3.3, SMX-CXFBC/SE 2008.01.
 
Please let me know if I'm wrong here or if further information is required.
 
Stuart.
 
Packet dump:
 
POST /soap/sscc HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS .NET CF Web Services
Client Protocol 1.0.4292.0)
Cache-Control: No-Transform
SOAPAction: " <http://some.dom.com/soap/soapservice/createLabel>
http://some.dom.com/soap/soapservice/createLabel"
Content-Type: text/xml; charset=utf-8
Content-Length: 350
Connection: Keep-Alive
Expect: 100-continue
Host: 192.168.1.2
 
<soap:Envelope xmlns:soap=" <http://schemas.xmlsoap.org/soap/envelope/>
http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="
<http://www.w3.org/2001/XMLSchema-instance>
http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
<http://www.w3.org/2001/XMLSchema>
http://www.w3.org/2001/XMLSchema"><soap:Body><createLabel xmlns="
<http://some.dom.com/soap/soapservice>
http://some.dom.com/soap/soapservice"><product><ref>Hello
</ref></product><qty><qty1>world</qty1></qty></createLabel></soap:Body></soa
p:Envelope>
 
 
Here is the WSDL file used to create the server source files:
 
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:p=" <http://schemas.xmlsoap.org/wsdl/soap/>
http://schemas.xmlsoap.org/wsdl/soap/" 
  xmlns:soap=" <http://some.dom.com/soap/soapservice>
http://some.dom.com/soap/soapservice" 
  xmlns:wsdl=" <http://schemas.xmlsoap.org/wsdl/>
http://schemas.xmlsoap.org/wsdl/" 
  xmlns:xsd=" <http://www.w3.org/2001/XMLSchema>
http://www.w3.org/2001/XMLSchema" 
  name="soap" 
  targetNamespace=" <http://some.dom.com/soap/soapservice>
http://some.dom.com/soap/soapservice">
  
  <wsdl:types>
    <xsd:schema targetNamespace=" <http://some.dom.com/soap/soapservice>
http://some.dom.com/soap/soapservice">
      <xsd:complexType name="product">
          <xsd:sequence>
              <xsd:element name="ref" type="xsd:string" />
          </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="qty">
        <xsd:sequence>
          <xsd:element name="qty" type="xsd:string" />
        </xsd:sequence>
      </xsd:complexType>
  
      <xsd:element name="createLabel">
        <xsd:complexType>
          <xsd:sequence>            
            <xsd:element name="product" type="soap:product" />
            <xsd:element name="qty" type="soap:qty" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      
      <xsd:element name="createLabelResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="status" type="xsd:integer" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>
  
  <wsdl:message name="createLabelRequest">
    <wsdl:part element="soap:createLabel" name="parameters"/>
  </wsdl:message>
  
  <wsdl:message name="createLabelResponse">
    <wsdl:part element="soap:createLabelResponse" name="parameters"/>
  </wsdl:message>
  
  <wsdl:portType name="SOAPPort">
    <wsdl:operation name="createLabel">
      <wsdl:input message="soap:createLabelRequest"/>
      <wsdl:output message="soap:createLabelResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  
  <wsdl:binding name="soapSOAPBinding" type="soap:SOAPPort">
    <p:binding style="document" transport="
<http://schemas.xmlsoap.org/soap/http>
http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="createLabel">
      <p:operation soapAction="
<http://some.dom.com/soap/soapservice/createLabel>
http://some.dom.com/soap/soapservice/createLabel"/>
      <wsdl:input>
        <p:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <p:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  
  <wsdl:service name="soapService">
    <wsdl:port binding="soap:soapSOAPBinding" name="soapSOAP">
      <p:address location=" <http://localhost:81/soap/sscc>
http://localhost:81/soap/sscc"/>
    </wsdl:port>
  </wsdl:service>
  
</wsdl:definitions>


Re: Help with cxf missing parameters - answered

Posted by Gert Vanthienen <ge...@gmail.com>.
Stuart,

Thanks for sharing the solution with us and sorry to have kept you waiting!

Regards,

Gert Vanthienen
------------------------
Open Source SOA: http://fusesource.com
Blog: http://gertvanthienen.blogspot.com/



2009/5/9 Stuart Roe <st...@ovic.co.uk>:
> And the answer was the form of attributes and elements. Changing the wsdl
> file to read as below fixed the issue.
>
> The cause of the problem was that the client library wasn't able to control
> (set unqualified or qualified) the form of the elements and attributes. The
> libraries default was different to the default for SMX3.3. Added an explicit
> declaration to match the client's implementation corrected the problem.
>
> <xsd:schema targetNamespace="http://some.dom.com/soap/soapservice"
>      attributeFormDefault="qualified"
>      elementFormDefault="qualified">
> ...
> </xsd:schema>
>
> -----Original Message-----
> From: Stuart Roe [mailto:stuart.roe@ovic.co.uk]
> Sent: 08 May 2009 15:27
> To: users@servicemix.apache.org
> Subject: Help with cxf missing parameters
>
> Hope someone can help.
>
> I have configured (WSDL first) cxfbc and cxfse to operate with the following
> wsdl. The stub files created by wsdl2java are being called but the supplied
> parameters are null (when the client provided non-null parameters). The
> parameters (product and qty) can be seen in the packet dump below.  I have
> also included a copy of the wsdl file used to create the stub files.
>
> As the appropriate SE function in the stub is being called I'm assuming that
> the xbean configuration for both BC and SE are correct.
>
> Environment: WinXP, SMX 3.3, SMX-CXFBC/SE 2008.01.
>
> Please let me know if I'm wrong here or if further information is required.
>
> Stuart.
>
> Packet dump:
>
> POST /soap/sscc HTTP/1.1
> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS .NET CF Web Services
> Client Protocol 1.0.4292.0)
> Cache-Control: No-Transform
> SOAPAction: " <http://some.dom.com/soap/soapservice/createLabel>
> http://some.dom.com/soap/soapservice/createLabel"
> Content-Type: text/xml; charset=utf-8
> Content-Length: 350
> Connection: Keep-Alive
> Expect: 100-continue
> Host: 192.168.1.2
>
> <soap:Envelope xmlns:soap=" <http://schemas.xmlsoap.org/soap/envelope/>
> http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="
> <http://www.w3.org/2001/XMLSchema-instance>
> http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
> <http://www.w3.org/2001/XMLSchema>
> http://www.w3.org/2001/XMLSchema"><soap:Body><createLabel xmlns="
> <http://some.dom.com/soap/soapservice>
> http://some.dom.com/soap/soapservice"><product><ref>Hello
> </ref></product><qty><qty1>world</qty1></qty></createLabel></soap:Body></soa
> p:Envelope>
>
>
> Here is the WSDL file used to create the server source files:
>
> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <wsdl:definitions
> xmlns:p=" <http://schemas.xmlsoap.org/wsdl/soap/>
> http://schemas.xmlsoap.org/wsdl/soap/"
>  xmlns:soap=" <http://some.dom.com/soap/soapservice>
> http://some.dom.com/soap/soapservice"
>  xmlns:wsdl=" <http://schemas.xmlsoap.org/wsdl/>
> http://schemas.xmlsoap.org/wsdl/"
>  xmlns:xsd=" <http://www.w3.org/2001/XMLSchema>
> http://www.w3.org/2001/XMLSchema"
>  name="soap"
>  targetNamespace=" <http://some.dom.com/soap/soapservice>
> http://some.dom.com/soap/soapservice">
>
>  <wsdl:types>
>    <xsd:schema targetNamespace=" <http://some.dom.com/soap/soapservice>
> http://some.dom.com/soap/soapservice">
>      <xsd:complexType name="product">
>          <xsd:sequence>
>              <xsd:element name="ref" type="xsd:string" />
>          </xsd:sequence>
>      </xsd:complexType>
>      <xsd:complexType name="qty">
>        <xsd:sequence>
>          <xsd:element name="qty" type="xsd:string" />
>        </xsd:sequence>
>      </xsd:complexType>
>
>      <xsd:element name="createLabel">
>        <xsd:complexType>
>          <xsd:sequence>
>            <xsd:element name="product" type="soap:product" />
>            <xsd:element name="qty" type="soap:qty" />
>          </xsd:sequence>
>        </xsd:complexType>
>      </xsd:element>
>
>      <xsd:element name="createLabelResponse">
>        <xsd:complexType>
>          <xsd:sequence>
>            <xsd:element name="status" type="xsd:integer" />
>          </xsd:sequence>
>        </xsd:complexType>
>      </xsd:element>
>    </xsd:schema>
>  </wsdl:types>
>
>  <wsdl:message name="createLabelRequest">
>    <wsdl:part element="soap:createLabel" name="parameters"/>
>  </wsdl:message>
>
>  <wsdl:message name="createLabelResponse">
>    <wsdl:part element="soap:createLabelResponse" name="parameters"/>
>  </wsdl:message>
>
>  <wsdl:portType name="SOAPPort">
>    <wsdl:operation name="createLabel">
>      <wsdl:input message="soap:createLabelRequest"/>
>      <wsdl:output message="soap:createLabelResponse"/>
>    </wsdl:operation>
>  </wsdl:portType>
>
>  <wsdl:binding name="soapSOAPBinding" type="soap:SOAPPort">
>    <p:binding style="document" transport="
> <http://schemas.xmlsoap.org/soap/http>
> http://schemas.xmlsoap.org/soap/http"/>
>    <wsdl:operation name="createLabel">
>      <p:operation soapAction="
> <http://some.dom.com/soap/soapservice/createLabel>
> http://some.dom.com/soap/soapservice/createLabel"/>
>      <wsdl:input>
>        <p:body use="literal"/>
>      </wsdl:input>
>      <wsdl:output>
>        <p:body use="literal"/>
>      </wsdl:output>
>    </wsdl:operation>
>  </wsdl:binding>
>
>  <wsdl:service name="soapService">
>    <wsdl:port binding="soap:soapSOAPBinding" name="soapSOAP">
>      <p:address location=" <http://localhost:81/soap/sscc>
> http://localhost:81/soap/sscc"/>
>    </wsdl:port>
>  </wsdl:service>
>
> </wsdl:definitions>
>
>
>

RE: Help with cxf missing parameters - answered

Posted by Stuart Roe <st...@ovic.co.uk>.
And the answer was the form of attributes and elements. Changing the wsdl
file to read as below fixed the issue. 

The cause of the problem was that the client library wasn't able to control
(set unqualified or qualified) the form of the elements and attributes. The
libraries default was different to the default for SMX3.3. Added an explicit
declaration to match the client's implementation corrected the problem.

<xsd:schema targetNamespace="http://some.dom.com/soap/soapservice"
      attributeFormDefault="qualified"
      elementFormDefault="qualified"> 
...
</xsd:schema>

-----Original Message-----
From: Stuart Roe [mailto:stuart.roe@ovic.co.uk] 
Sent: 08 May 2009 15:27
To: users@servicemix.apache.org
Subject: Help with cxf missing parameters

Hope someone can help.
 
I have configured (WSDL first) cxfbc and cxfse to operate with the following
wsdl. The stub files created by wsdl2java are being called but the supplied
parameters are null (when the client provided non-null parameters). The
parameters (product and qty) can be seen in the packet dump below.  I have
also included a copy of the wsdl file used to create the stub files. 
 
As the appropriate SE function in the stub is being called I'm assuming that
the xbean configuration for both BC and SE are correct. 
 
Environment: WinXP, SMX 3.3, SMX-CXFBC/SE 2008.01.
 
Please let me know if I'm wrong here or if further information is required.
 
Stuart.
 
Packet dump:
 
POST /soap/sscc HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS .NET CF Web Services
Client Protocol 1.0.4292.0)
Cache-Control: No-Transform
SOAPAction: " <http://some.dom.com/soap/soapservice/createLabel>
http://some.dom.com/soap/soapservice/createLabel"
Content-Type: text/xml; charset=utf-8
Content-Length: 350
Connection: Keep-Alive
Expect: 100-continue
Host: 192.168.1.2
 
<soap:Envelope xmlns:soap=" <http://schemas.xmlsoap.org/soap/envelope/>
http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="
<http://www.w3.org/2001/XMLSchema-instance>
http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
<http://www.w3.org/2001/XMLSchema>
http://www.w3.org/2001/XMLSchema"><soap:Body><createLabel xmlns="
<http://some.dom.com/soap/soapservice>
http://some.dom.com/soap/soapservice"><product><ref>Hello
</ref></product><qty><qty1>world</qty1></qty></createLabel></soap:Body></soa
p:Envelope>
 
 
Here is the WSDL file used to create the server source files:
 
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <wsdl:definitions
xmlns:p=" <http://schemas.xmlsoap.org/wsdl/soap/>
http://schemas.xmlsoap.org/wsdl/soap/" 
  xmlns:soap=" <http://some.dom.com/soap/soapservice>
http://some.dom.com/soap/soapservice" 
  xmlns:wsdl=" <http://schemas.xmlsoap.org/wsdl/>
http://schemas.xmlsoap.org/wsdl/" 
  xmlns:xsd=" <http://www.w3.org/2001/XMLSchema>
http://www.w3.org/2001/XMLSchema" 
  name="soap" 
  targetNamespace=" <http://some.dom.com/soap/soapservice>
http://some.dom.com/soap/soapservice">
  
  <wsdl:types>
    <xsd:schema targetNamespace=" <http://some.dom.com/soap/soapservice>
http://some.dom.com/soap/soapservice">
      <xsd:complexType name="product">
          <xsd:sequence>
              <xsd:element name="ref" type="xsd:string" />
          </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="qty">
        <xsd:sequence>
          <xsd:element name="qty" type="xsd:string" />
        </xsd:sequence>
      </xsd:complexType>
  
      <xsd:element name="createLabel">
        <xsd:complexType>
          <xsd:sequence>            
            <xsd:element name="product" type="soap:product" />
            <xsd:element name="qty" type="soap:qty" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      
      <xsd:element name="createLabelResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="status" type="xsd:integer" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>
  
  <wsdl:message name="createLabelRequest">
    <wsdl:part element="soap:createLabel" name="parameters"/>
  </wsdl:message>
  
  <wsdl:message name="createLabelResponse">
    <wsdl:part element="soap:createLabelResponse" name="parameters"/>
  </wsdl:message>
  
  <wsdl:portType name="SOAPPort">
    <wsdl:operation name="createLabel">
      <wsdl:input message="soap:createLabelRequest"/>
      <wsdl:output message="soap:createLabelResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  
  <wsdl:binding name="soapSOAPBinding" type="soap:SOAPPort">
    <p:binding style="document" transport="
<http://schemas.xmlsoap.org/soap/http>
http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="createLabel">
      <p:operation soapAction="
<http://some.dom.com/soap/soapservice/createLabel>
http://some.dom.com/soap/soapservice/createLabel"/>
      <wsdl:input>
        <p:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <p:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  
  <wsdl:service name="soapService">
    <wsdl:port binding="soap:soapSOAPBinding" name="soapSOAP">
      <p:address location=" <http://localhost:81/soap/sscc>
http://localhost:81/soap/sscc"/>
    </wsdl:port>
  </wsdl:service>
  
</wsdl:definitions>