You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Miten Mehta <Mi...@morganstanley.com> on 2011/11/03 13:36:25 UTC

WebParam not being set from PayLoad

Hi,

I am having difficulty in passing paramter to web serivce.  Please see my
details of web service below.  I see web service method getting invoked but
payload is not correctly being set for method parameter.  I am using cxf
2.2.3.

wsd:
--------------------------------------
  <?xml version="1.0" ?>
 <wsdl:definitions name="GreeterService" targetNamespace="
http://xml.ms.com/ns/myhello/greeter" xmlns:ns1="
http://schemas.xmlsoap.org/soap/http" xmlns:soap="
http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="
http://xml.ms.com/ns/myhello/greeter" xmlns:wsdl="
http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="
http://www.w3.org/2001/XMLSchema">
 <wsdl:types>
 <xsd:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" targetNamespace="
http://xml.ms.com/ns/myhello/greeter" xmlns:tns="
http://xml.ms.com/ns/myhello/greeter" xmlns:xsd="
http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Greeter" nillable="true" type="xsd:string" />
  <xsd:element name="GreeterResponse" nillable="true" type="xsd:string" />
  </xsd:schema>
  </wsdl:types>
 <wsdl:message name="Greeter">
  <wsdl:part element="tns:Greeter" name="request" />
  </wsdl:message>
 <wsdl:message name="GreeterResponse">
  <wsdl:part element="tns:GreeterResponse" name="GreeterResponse" />
  </wsdl:message>
 <wsdl:portType name="Greeter">
 <wsdl:operation name="Greeter">
  <wsdl:input message="tns:Greeter" name="Greeter" />
  <wsdl:output message="tns:GreeterResponse" name="GreeterResponse" />
  </wsdl:operation>
  </wsdl:portType>
 <wsdl:binding name="GreeterServiceSoapHttpBinding" type="tns:Greeter">
  <soap:binding style="document" transport="
http://schemas.xmlsoap.org/soap/http" />
 <wsdl:operation name="Greeter">
  <soap:operation soapAction="" style="document" />
 <wsdl:input name="Greeter">
  <soap:body use="literal" />
  </wsdl:input>
 <wsdl:output name="GreeterResponse">
  <soap:body use="literal" />
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
 <wsdl:service name="GreeterService">
 <wsdl:port binding="tns:GreeterServiceSoapHttpBinding" name="GreeterPort">
  <soap:address location="
http://localhost:8080/MyHello6/services/greeterService" />
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>


Greeter.java
-----------------
package myhello;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

import org.apache.cxf.interceptor.InInterceptors;

@WebService(targetNamespace = Greeter.NS_URI)
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@InInterceptors(interceptors =
"org.apache.cxf.interceptor.LoggingInInterceptor")
public class Greeter {

    public static final String NS_URI = "
http://xml.ms.com/ns/myhello/greeter";

    @WebMethod(operationName = "Greeter")
    public String greeter(@WebParam(targetNamespace = NS_URI,
partName="request")String request) {
        return "Hello, " + request;
    }
}

running client using curl
-----------------------------------
curl -d "`cat a.xml`"
http://172.18.33.222:8080/MyHello6/services/greeterService
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GreeterResponse
xmlns="http://xml.ms.com/ns/myhello/greeter">Hello,
    </GreeterResponse></soap:Body></soap:Envelope>


Here is snippet from java logs of web service.
Payload:
---------------------------
ID: 1
Address: /MyHello6/services/greeterService
Encoding: ISO-8859-1
Content-Type: application/x-www-form-urlencoded
Headers: {x-bluecoat-via=[9734D0704E62AED2],
content-type=[application/x-www-form-urlencoded], connection=[Keep-Alive],
via=[1.1 pabcgw04], host=[172.18.33.222:8080],
x-forwarded-for=[172.21.211.138], content-length=[261],
user-agent=[curl/7.10.6 (i386-redhat-linux-gnu) libcurl/7.10.6
OpenSSL/0.9.7a ipv6 zlib/1.1.4],
Content-Type=[application/x-www-form-urlencoded], Accept=[image/gif,
image/x-xbitmap, image/jpeg, image/pjpeg, */*], pragma=[no-cache]}
Payload: <?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body xmlns="http://xml.ms.com/ns/myhello/greeter">
    <Greeter>
      <request>Mitenm</request>
    </Greeter>
  </soap:Body>
</soap:Envelope>
--------------------------------------


Regards,

Miten Mehta

Re: WebParam not being set from PayLoad

Posted by Miten Mehta <Mi...@morganstanley.com>.
Hi Daniel,

Thanks for help.  It works now.

Regards,

Miten Mehta
Morgan Stanley | Technology
Block B2, Nirlon Knowledge Park
S T Yadav Rd, Goregaon East
Mumbai 400063
Phone: +91 22 6138-5645
Miten.Mehta@morganstanley.com



On Fri, Nov 4, 2011 at 12:01 AM, Daniel Kulp <dk...@apache.org> wrote:

> On Thursday, November 03, 2011 6:06:25 PM Miten Mehta wrote:
> > Hi,
> >
> > I am having difficulty in passing paramter to web serivce.  Please see my
> > details of web service below.  I see web service method getting invoked
> but
> > payload is not correctly being set for method parameter.  I am using cxf
> > 2.2.3.
>
> I would strongly suggest updating to a newer version of CXF.  There has
> been a
> lot of fixes in these areas since then and the issue may already be solved.
>
> That said, the request doesn't match the WSDL.  You have:
> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>
> and:
> <xsd:element name="Greeter" nillable="true" type="xsd:string" />
>
> Thus, the request would just look like:
>
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>   <soap:Body xmlns="http://xml.ms.com/ns/myhello/greeter">
>      <Greeter>Mitenm</Greeter>
>   </soap:Body>
> </soap:Envelope>
>
>
> Dan
>
>
>
> >
> > wsd:
> > --------------------------------------
> >   <?xml version="1.0" ?>
> >  <wsdl:definitions name="GreeterService" targetNamespace="
> > http://xml.ms.com/ns/myhello/greeter" xmlns:ns1="
> > http://schemas.xmlsoap.org/soap/http" xmlns:soap="
> > http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="
> > http://xml.ms.com/ns/myhello/greeter" xmlns:wsdl="
> > http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="
> > http://www.w3.org/2001/XMLSchema">
> >  <wsdl:types>
> >  <xsd:schema attributeFormDefault="unqualified"
> > elementFormDefault="qualified" targetNamespace="
> > http://xml.ms.com/ns/myhello/greeter" xmlns:tns="
> > http://xml.ms.com/ns/myhello/greeter" xmlns:xsd="
> > http://www.w3.org/2001/XMLSchema">
> >   <xsd:element name="Greeter" nillable="true" type="xsd:string" />
> >   <xsd:element name="GreeterResponse" nillable="true" type="xsd:string"
> />
> >   </xsd:schema>
> >   </wsdl:types>
> >  <wsdl:message name="Greeter">
> >   <wsdl:part element="tns:Greeter" name="request" />
> >   </wsdl:message>
> >  <wsdl:message name="GreeterResponse">
> >   <wsdl:part element="tns:GreeterResponse" name="GreeterResponse" />
> >   </wsdl:message>
> >  <wsdl:portType name="Greeter">
> >  <wsdl:operation name="Greeter">
> >   <wsdl:input message="tns:Greeter" name="Greeter" />
> >   <wsdl:output message="tns:GreeterResponse" name="GreeterResponse" />
> >   </wsdl:operation>
> >   </wsdl:portType>
> >  <wsdl:binding name="GreeterServiceSoapHttpBinding" type="tns:Greeter">
> >   <soap:binding style="document" transport="
> > http://schemas.xmlsoap.org/soap/http" />
> >  <wsdl:operation name="Greeter">
> >   <soap:operation soapAction="" style="document" />
> >  <wsdl:input name="Greeter">
> >   <soap:body use="literal" />
> >   </wsdl:input>
> >  <wsdl:output name="GreeterResponse">
> >   <soap:body use="literal" />
> >   </wsdl:output>
> >   </wsdl:operation>
> >   </wsdl:binding>
> >  <wsdl:service name="GreeterService">
> >  <wsdl:port binding="tns:GreeterServiceSoapHttpBinding"
> name="GreeterPort">
> >   <soap:address location="
> > http://localhost:8080/MyHello6/services/greeterService" />
> >   </wsdl:port>
> >   </wsdl:service>
> >   </wsdl:definitions>
> >
> >
> > Greeter.java
> > -----------------
> > package myhello;
> >
> > import javax.jws.WebMethod;
> > import javax.jws.WebParam;
> > import javax.jws.WebService;
> > import javax.jws.soap.SOAPBinding;
> >
> > import org.apache.cxf.interceptor.InInterceptors;
> >
> > @WebService(targetNamespace = Greeter.NS_URI)
> > @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
> > @InInterceptors(interceptors =
> > "org.apache.cxf.interceptor.LoggingInInterceptor")
> > public class Greeter {
> >
> >     public static final String NS_URI = "
> > http://xml.ms.com/ns/myhello/greeter";
> >
> >     @WebMethod(operationName = "Greeter")
> >     public String greeter(@WebParam(targetNamespace = NS_URI,
> > partName="request")String request) {
> >         return "Hello, " + request;
> >     }
> > }
> >
> > running client using curl
> > -----------------------------------
> > curl -d "`cat a.xml`"
> > http://172.18.33.222:8080/MyHello6/services/greeterService
> > <soap:Envelope
> > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/
> "><soap:Body><GreeterR
> > esponse xmlns="http://xml.ms.com/ns/myhello/greeter">Hello,
> >     </GreeterResponse></soap:Body></soap:Envelope>
> >
> >
> > Here is snippet from java logs of web service.
> > Payload:
> > ---------------------------
> > ID: 1
> > Address: /MyHello6/services/greeterService
> > Encoding: ISO-8859-1
> > Content-Type: application/x-www-form-urlencoded
> > Headers: {x-bluecoat-via=[9734D0704E62AED2],
> > content-type=[application/x-www-form-urlencoded],
> connection=[Keep-Alive],
> > via=[1.1 pabcgw04], host=[172.18.33.222:8080],
> > x-forwarded-for=[172.21.211.138], content-length=[261],
> > user-agent=[curl/7.10.6 (i386-redhat-linux-gnu) libcurl/7.10.6
> > OpenSSL/0.9.7a ipv6 zlib/1.1.4],
> > Content-Type=[application/x-www-form-urlencoded], Accept=[image/gif,
> > image/x-xbitmap, image/jpeg, image/pjpeg, */*], pragma=[no-cache]}
> > Payload: <?xml version="1.0" encoding="UTF-8"?>
> > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
> >   <soap:Body xmlns="http://xml.ms.com/ns/myhello/greeter">
> >     <Greeter>
> >       <request>Mitenm</request>
> >     </Greeter>
> >   </soap:Body>
> > </soap:Envelope>
> > --------------------------------------
> >
> >
> > Regards,
> >
> > Miten Mehta
> --
> Daniel Kulp
> dkulp@apache.org
> http://dankulp.com/blog
> Talend - http://www.talend.com
>

Re: WebParam not being set from PayLoad

Posted by Daniel Kulp <dk...@apache.org>.
On Thursday, November 03, 2011 6:06:25 PM Miten Mehta wrote:
> Hi,
> 
> I am having difficulty in passing paramter to web serivce.  Please see my
> details of web service below.  I see web service method getting invoked but
> payload is not correctly being set for method parameter.  I am using cxf
> 2.2.3.

I would strongly suggest updating to a newer version of CXF.  There has been a 
lot of fixes in these areas since then and the issue may already be solved.

That said, the request doesn't match the WSDL.  You have:
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)

and:
<xsd:element name="Greeter" nillable="true" type="xsd:string" />

Thus, the request would just look like:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body xmlns="http://xml.ms.com/ns/myhello/greeter">
     <Greeter>Mitenm</Greeter>
   </soap:Body>
</soap:Envelope>


Dan



> 
> wsd:
> --------------------------------------
>   <?xml version="1.0" ?>
>  <wsdl:definitions name="GreeterService" targetNamespace="
> http://xml.ms.com/ns/myhello/greeter" xmlns:ns1="
> http://schemas.xmlsoap.org/soap/http" xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="
> http://xml.ms.com/ns/myhello/greeter" xmlns:wsdl="
> http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="
> http://www.w3.org/2001/XMLSchema">
>  <wsdl:types>
>  <xsd:schema attributeFormDefault="unqualified"
> elementFormDefault="qualified" targetNamespace="
> http://xml.ms.com/ns/myhello/greeter" xmlns:tns="
> http://xml.ms.com/ns/myhello/greeter" xmlns:xsd="
> http://www.w3.org/2001/XMLSchema">
>   <xsd:element name="Greeter" nillable="true" type="xsd:string" />
>   <xsd:element name="GreeterResponse" nillable="true" type="xsd:string" />
>   </xsd:schema>
>   </wsdl:types>
>  <wsdl:message name="Greeter">
>   <wsdl:part element="tns:Greeter" name="request" />
>   </wsdl:message>
>  <wsdl:message name="GreeterResponse">
>   <wsdl:part element="tns:GreeterResponse" name="GreeterResponse" />
>   </wsdl:message>
>  <wsdl:portType name="Greeter">
>  <wsdl:operation name="Greeter">
>   <wsdl:input message="tns:Greeter" name="Greeter" />
>   <wsdl:output message="tns:GreeterResponse" name="GreeterResponse" />
>   </wsdl:operation>
>   </wsdl:portType>
>  <wsdl:binding name="GreeterServiceSoapHttpBinding" type="tns:Greeter">
>   <soap:binding style="document" transport="
> http://schemas.xmlsoap.org/soap/http" />
>  <wsdl:operation name="Greeter">
>   <soap:operation soapAction="" style="document" />
>  <wsdl:input name="Greeter">
>   <soap:body use="literal" />
>   </wsdl:input>
>  <wsdl:output name="GreeterResponse">
>   <soap:body use="literal" />
>   </wsdl:output>
>   </wsdl:operation>
>   </wsdl:binding>
>  <wsdl:service name="GreeterService">
>  <wsdl:port binding="tns:GreeterServiceSoapHttpBinding" name="GreeterPort">
>   <soap:address location="
> http://localhost:8080/MyHello6/services/greeterService" />
>   </wsdl:port>
>   </wsdl:service>
>   </wsdl:definitions>
> 
> 
> Greeter.java
> -----------------
> package myhello;
> 
> import javax.jws.WebMethod;
> import javax.jws.WebParam;
> import javax.jws.WebService;
> import javax.jws.soap.SOAPBinding;
> 
> import org.apache.cxf.interceptor.InInterceptors;
> 
> @WebService(targetNamespace = Greeter.NS_URI)
> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
> @InInterceptors(interceptors =
> "org.apache.cxf.interceptor.LoggingInInterceptor")
> public class Greeter {
> 
>     public static final String NS_URI = "
> http://xml.ms.com/ns/myhello/greeter";
> 
>     @WebMethod(operationName = "Greeter")
>     public String greeter(@WebParam(targetNamespace = NS_URI,
> partName="request")String request) {
>         return "Hello, " + request;
>     }
> }
> 
> running client using curl
> -----------------------------------
> curl -d "`cat a.xml`"
> http://172.18.33.222:8080/MyHello6/services/greeterService
> <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GreeterR
> esponse xmlns="http://xml.ms.com/ns/myhello/greeter">Hello,
>     </GreeterResponse></soap:Body></soap:Envelope>
> 
> 
> Here is snippet from java logs of web service.
> Payload:
> ---------------------------
> ID: 1
> Address: /MyHello6/services/greeterService
> Encoding: ISO-8859-1
> Content-Type: application/x-www-form-urlencoded
> Headers: {x-bluecoat-via=[9734D0704E62AED2],
> content-type=[application/x-www-form-urlencoded], connection=[Keep-Alive],
> via=[1.1 pabcgw04], host=[172.18.33.222:8080],
> x-forwarded-for=[172.21.211.138], content-length=[261],
> user-agent=[curl/7.10.6 (i386-redhat-linux-gnu) libcurl/7.10.6
> OpenSSL/0.9.7a ipv6 zlib/1.1.4],
> Content-Type=[application/x-www-form-urlencoded], Accept=[image/gif,
> image/x-xbitmap, image/jpeg, image/pjpeg, */*], pragma=[no-cache]}
> Payload: <?xml version="1.0" encoding="UTF-8"?>
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>   <soap:Body xmlns="http://xml.ms.com/ns/myhello/greeter">
>     <Greeter>
>       <request>Mitenm</request>
>     </Greeter>
>   </soap:Body>
> </soap:Envelope>
> --------------------------------------
> 
> 
> Regards,
> 
> Miten Mehta
-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com