Oh. Now I got it. I tested as you suggested. It works now. Thanks Sergey
for holding my hand up until now.
I want to expand my AuthHeader class to have another field called
"password". So, My AuthHeader class will look like this.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "authHeader", propOrder = { "userId" })
@XmlRootElement(name = "AuthHeader")
public class AuthHeader {
@XmlElement(name = "UserId", required = true)
protected Long userId;
protected String password;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public AuthHeader(String s){
super();
setUserId(10077L);
}
}
My input headers would be like this(see below). Please see userid and
password in *Header* section below. How do I mention @HeaderParam in
that case? Is it like @HeaderParam("userid", "password") in interface
method? How do I write my AuthHeader constructor with string argument OR
static valueOf()? Please provide some clue as to how to handle multiple
headers pointing to same Java Object on server side?
INFO: Inbound Message
----------------------------
ID: 2
Address:
/paymentapi/stubHubPaymentJaxwsJaxrs_rest/payment/getorderpaymentmethod3
Encoding: ISO-8859-1
Content-Type: application/xml
Headers: {password=[abcde], content-length=[57], userid=[10077],
accept-encoding=[gzip,deflate], host=[10.249.136.95:280
80], user-agent=[Jakarta Commons-HttpClient/3.1],
Content-Type=[application/xml], content-type=[application/xml]}
Payload: <OrderRequest><orderId>23544619</orderId>
</OrderRequest>
Regards
Karuna Pydipati
StubHub/eBay - Platform & Services
Phone: (415)222-8752
Email: [email protected]
-----Original Message-----
From: Sergey Beryozkin [mailto:[email protected]]
Sent: Thursday, November 19, 2009 3:06 AM
To: [email protected]
Cc: [email protected]
Subject: Re: Deploying JAXWS&JAXRS together - error
Ok, so we're getting closer
> userid=[10077]
and
> @HeaderParam("AuthHeader")
do not match
so, fingers crossed, doing simply
@HeaderParam("userid") com.stubhub.webservices.common.AuthHeader
authHeader
will get you an initialized AuthHeader instance, provided it has a
string constructor or valueOf static factory method (couple of other
methods are checked for enums), or you have a registered
ParameterHandler<AuthHeader>.
Note, a null should be expected if no header with a name like
"AuthHeader" is available in the request. You can use a @DefaultValue
annotation if you do not won't to deal with null values
Sergey
>
> Thanks
> Karuna Pydipati
>
> On Nov 19, 2009, at 1:12 AM, "Sergey Beryozkin"
<[email protected]> wrote:
>
>> Given this log :
>>
>> Headers: {content-length=[57], userid=[10077],
>> accept-encoding=[gzip,deflate], host=[10.249.136.95:28080],
>> user-agent=[J akarta Commons-HttpClient/3.1],
>> Content-Type=[application/xml], content-type=[application/xml]}
>> Payload: <OrderRequest><orderId>23544619</orderId>
>> </OrderRequest>
>>
>> can you tell me please, where is AuthHeader ?
>>
>> cheers, Sergey
>>
>>
>> ----- Original Message ----- From: "Pydipati, Karuna"
>> <[email protected]
>> >
>> To: <[email protected]>
>> Sent: Thursday, November 19, 2009 2:35 AM
>> Subject: RE: Deploying JAXWS&JAXRS together - error
>>
>>
>>
>> I tried 3 options 1) Creating provider 2) static valudOf method 3)
>> Constructor of AuthHeader with String argument. At least..previous
>> error(s) gone away, but, my values are not being set. Even I added
>> some logging statements. Those were not printed. I am nullpointer
>> exception whenever I tried to access it inside the body of
>> implementing method. Is there any working example..that I can refer
to in CXF?
>>
>> Interface method
>> ---------------
>> @Path("/getorderpaymentmethod3")
>> @POST
>> public GetOrderPaymentMethodResponse getOrderPaymentMethod3 (
OrderRequest
>> partGetOrderPaymentMethodRequest,
>> @HeaderParam("AuthHeader")
>> com.stubhub.webservices.common.AuthHeader authHeader) throws
>> StubHubFault;
>>
>>
>>
>> AuthHeader method and constructor
>> -----------------------------------
>> public AuthHeader(String s){
>> super();
>>
>> System.out.println("**************************|||||||||||");
>> System.out.println("String s:" + s);
>> setUserId(10077L);
>> }
>>
>> public static AuthHeader valueOf(String s){
>>
>> System.out.println("**************************|||||||||||");
>> System.out.println("String s:" + s);
>> AuthHeader a = new AuthHeader();
>> a.setUserId(10077L);
>> return a;
>> }
>> Getting nullpointer at this line:
>> RequestContext requestContext = new
>> RequestContext();
>>
>> requestContext.setUserId(authHeader.getUserId()); ---> here null
>> pointer exception
>>
>> Error:
>> ----
>> INFO: Inbound Message
>> ----------------------------
>> ID: 1
>> Address:
>> /paymentapi/stubHubPaymentJaxwsJaxrs_rest/payment/
>> getorderpaymentmethod3
>> Encoding: ISO-8859-1
>> Content-Type: application/xml
>> Headers: {content-length=[57], userid=[10077],
>> accept-encoding=[gzip,deflate], host=[10.249.136.95:28080],
>> user-agent=[J akarta Commons-HttpClient/3.1],
>> Content-Type=[application/xml], content-type=[application/xml]}
>> Payload: <OrderRequest><orderId>23544619</orderId>
>> </OrderRequest>
>> --------------------------------------
>> 18:16:41,235 ERROR [StubHubPaymentImpl] Exception happened
>> java.lang.NullPointerException
>> at
>> com.stubhub.api.payment.StubHubPaymentJaxwsJaxrsImpl.getOrderPaymentM
>> eth
>
>
>> od3(StubHubPaymentJaxwsJaxrsImpl.java
>> :209)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at
>> sun.reflect.NativeMethodAccessorImpl.invoke
>> (NativeMethodAccessorImpl.jav
>> a:39)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke
>> (DelegatingMethodAccessor
>> Impl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at
>> org.apache.cxf.service.invoker.AbstractInvoker.performInvocation
>> (Abstrac
>> tInvoker.java:166)
>>
>> Regards
>> Karuna Pydipati
>> StubHub/eBay - Platform & Services
>> Phone: (415)222-8752
>> Email: [email protected]
>>
>>
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:[email protected]] Sent:
>> Wednesday, November 18, 2009 2:48 PM
>> To: Sergey Beryozkin; [email protected]
>> Subject: RE: Deploying JAXWS&JAXRS together - error
>>
>> Sorry, I'm misleading you. It is @HeaderParam.
>> Also you can avoid creating ParameterHandler if AuthHeader class can
>> have a static valueOf(String) or a string based constructor.
>> Please review the CXF JAXRS docs
>> Thanks, Sergey
>>
>> From: Sergey Beryozkin
>> Sent: 18 November 2009 22:35
>> To: '[email protected]'
>> Subject: RE: Deploying JAXWS&JAXRS together - error
>>
>> It is a wrong annotation, should a jaxrs @HttpHeader
>>
>> -----Original Message-----
>> From: Pydipati, Karuna [mailto:[email protected]]
>> Sent: 18 November 2009 22:17
>> To: [email protected]
>> Subject: RE: Deploying JAXWS&JAXRS together - error
>>
>> Makes sense.
>> Is there any documentation or example as to how to create a
>> ParameterHandler<AuthHeader> and register as jaxrs provider? My
>> application is heavily dependent on Spring. I am fine to add spring
>> configuration OR annotation based.
>>
>> I created a the following Provider
>> public class AuthHeaderProvider implements
>> ParameterHandler<AuthHeader> {
>> static protected final Log log =
>> LogFactory.getLog(AuthHeaderProvider.class);
>> public AuthHeader fromString(String s) {
>> AuthHeader c = new AuthHeader();
>> log.info("String s:" + s);
>> c.setUserId(10077L);
>> return c;
>> }
>> }
>>
>> Also added config info like this
>>
>> <bean id="stubHubPaymentJaxwsJaxrsImpl"
>> class="com.stubhub.api.payment.StubHubPaymentJaxwsJaxrsImpl" />
>>
>> <jaxws:endpoint id="StubHubPaymentJaxwsJaxrs"
>> implementorClass=
"com.stubhub.api.payment.StubHubPaymentJaxwsJaxrsImpl"
>> implementor="#stubHubPaymentJaxwsJaxrsImpl" address="/
>> StubHubPaymentJaxwsJaxrs"/> <jaxrs:server
id="StubHubPaymentJaxwsJaxrsRest"
>> address="/stubHubPaymentJaxwsJaxrs_rest">
>> <jaxrs:serviceBeans> <ref bean="stubHubPaymentJaxwsJaxrsImpl" />
>> </jaxrs:serviceBeans>
>> <jaxrs:providers>
>> <ref bean="authProvider" />
>> </jaxrs:providers>
>> </jaxrs:server>
>>
>> <bean id="authProvider"
>> class="com.stubhub.webservices.common.AuthHeaderProvider"/>
>>
>> Now, the interface is not accepting
>> @org.codehaus.jra.HttpHeader("AuthHeader") the way you suggested.
>> That annotation is not accepting any string to that annotation. BTW,
>> I am using cxf2.2.3. SO, I tried with this interface
>>
>> @Path("/getorderpaymentmethod3")
>> @POST
>> public GetOrderPaymentMethodResponse getOrderPaymentMethod3(
>> OrderRequest partGetOrderPaymentMethodRequest, @HttpHeader
>> com.stubhub.webservices.common.AuthHeader authHeader) throws
>> StubHubFault; It still FAILS. How do I code like
>> HttpHeader("AuthHeader") annotaion?
>> It is giving compile error in eclipse.
>>
>> INFO: Inbound Message
>> ----------------------------
>> ID: 4
>> Address:
>> /paymentapi/stubHubPaymentJaxwsJaxrs_rest/payment/
>> getorderpaymentmethod
>> Encoding: ISO-8859-1
>> Content-Type: application/xml
>> Headers: {content-length=[57], userid=[10077],
>> accept-encoding=[gzip,deflate], host=[10.249.136.95:28080],
>> user-agent=[J akarta Commons-HttpClient/3.1],
>> Content-Type=[application/xml], content-type=[application/xml]}
>> Payload: <OrderRequest><orderId>23544619</orderId>
>> </OrderRequest>
>> --------------------------------------
>> 13:52:35,594 ERROR [STDERR] Nov 18, 2009 1:52:35 PM
>> org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBExcepti
>> on
>> WARNING: javax.xml.bind.UnmarshalException
>> - with linked exception:
>> [org.xml.sax.SAXParseException: Premature end of file.]
>> at
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalExcept
>> ion
>
>
>> (AbstractUnmarshallerImpl.java:315)
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.UnmarshallerImpl.createUnmarsha
>> lException(UnmarshallerImpl.java:506)
>>
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0
>> (Unm
>> arshallerImpl.java:215)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal
>> (Unma
>> rshallerImpl.java:184)
>> at
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal
>> (AbstractUnmars
>> hallerImpl.java:137)
>> at
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal
>> (AbstractUnmars
>> hallerImpl.java:184)
>> at
>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputS
>> tre
>
>
>> am(JAXBElementProvider.java:193)
>> at
>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal
>> (JAXBElemen
>> tProvider.java:176)
>> at
>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom
>> (JAXBElementPr
>> ovider.java:150)
>>
>>
>> Regards
>> Karuna Pydipati
>> StubHub/eBay - Platform & Services
>> Phone: (415)222-8752
>> Email: [email protected]
>>
>>
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:[email protected]]
>> Sent: Wednesday, November 18, 2009 12:26 PM
>> To: [email protected]
>> Subject: RE: Deploying JAXWS&JAXRS together - error
>>
>> Hi
>>
>> Thanks for confirming it. In fact, it occurred to me on the way back
>> home that you posted AuthHeader being a JAXB bean.
>> You see, as I noted in the earlier post, when you were asking how to
>> handle AuthHeader in a RESTful call, in SOAP you have an envelope
>> which wraps two XML fragments, like AuthHeader (as a SOAP header) and
>> the actual body.
>>
>> When you do HTTP invocations without SOAP, you have to pass headers
>> as HTTP headers values. The payload you're sending is just an invalid
>> XML because it has no a top level element, you just have two
>> siblings, AuthHeader and OrderRequest.
>>
>> Another thing is that JAXRS does not allow for multiple methods
>> parameters which are assumed to be request bodies, have a look please
>> here :
>> http://cwiki.apache.org/CXF20DOC/jax-rs.html#JAX-RS-DealingwithParame
>> ter
>> s
>>
>> So, as I suggested you earlier on, you also need to annotate
>> AuthHeader with @HeaderPaream("AuthHeader") and register a custom
>> ParameterHandler<AuthHeader> implementation (as a jaxrs provider).
>>
>> And you'll need to pass AuthHeader as an HTTP header, possibly using
>> name/value pairs. Finally, your handler will parse this value and
>> convert it into AuthHeader instance
>>
>> Hope it helps
>> Sergey
>>
>>
>> -----Original Message-----
>> From: Pydipati, Karuna [mailto:[email protected]]
>> Sent: 18 November 2009 20:12
>> To: [email protected]
>> Subject: RE: Deploying JAXWS&JAXRS together - error
>>
>> After lots of trial and error, here is what I found. Still, I could
>> not solve this issue.
>>
>> When I have the interface function like this, it WORKS. Please note
>> that it has only one argument.
>>
>> @Path("/getorderpaymentmethod2")
>> @POST
>> public GetOrderPaymentMethodResponse getOrderPaymentMethod2(
>> OrderRequest partGetOrderPaymentMethodRequest ) throws
>> SomeThingFault; Here is the payload, I am sending.
>> <OrderRequest>
>> <orderId>23544619</orderId>
>> </OrderRequest>
>>
>>
>> When I have the interface function like this, it FAILS. Please note
>> that it has 2 arguments. Probably, I don't know as to how to send the
>> payload when there are 2 arguments (2 Objects) in REST calls.
>>
>> @Path("/getorderpaymentmethod3")
>> @POST
>> public GetOrderPaymentMethodResponse
>> getOrderPaymentMethod3(OrderRequest partGetOrderPaymentMethodRequest,
>> com.xxxxx.webservices.common.AuthHeader authHeader)throws
>> SomeThingFault; Here is the payload, I am sending.
>> <AuthHeader>
>> <userId>10077</userId>
>> </AuthHeader>
>> <OrderRequest>
>> <orderId>23544619</orderId>
>> </OrderRequest>
>>
>> OrderRequest.java
>> -----------------
>> @XmlAccessorType(XmlAccessType.FIELD)
>> @XmlType(name = "orderRequest", propOrder = { "orderId" })
>> @XmlRootElement(name = "OrderRequest") public class OrderRequest {
>>
>> @XmlElement(required = true)
>> protected Long orderId;
>>
>> public Long getOrderId() {
>> return orderId;
>> }
>>
>> public void setOrderId(Long value) {
>> this.orderId = value;
>> }
>> }
>>
>> AuthHeader.java
>> ----------------
>> @XmlAccessorType(XmlAccessType.FIELD)
>> @XmlType(name = "authHeader", propOrder = { "userId" })
>> @XmlRootElement(name = "AuthHeader") public class AuthHeader {
>> @XmlElement(name = "UserId", required = true) protected Long
>> userId;
>>
>> public Long getUserId() {
>> return userId;
>> }
>> public void setUserId(Long userId) {
>> this.userId = userId;
>> }
>> }
>>
>> Here is the interface
>> --------------------
>> @Path("/payment")
>> @Consumes( { "application/xml" })
>> @Produces( { "application/xml" })
>> @WebService(targetNamespace = "http://payment.api.xxxxx.com/", name =
>> "payment/SomeThingPaymentJaxwsJaxrs")
>> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>> @WebFault(targetNamespace = "http://payment.api.xxxxx.com/", name =
>> "SomeThingFault", faultBean = "SomeThingFault") public interface
>> SomeThingPaymentJaxwsJaxrs {
>>
>> @WebMethod
>> @POST
>> @Path("/getorderpaymentmethod")
>> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>> @WebResult(targetNamespace = "http://payment.api.xxxxx.com/",
>> partName = "partGetOrderPaymentMethodResponse", name =
>> "getOrderPaymentMethodResponse")
>> public GetOrderPaymentMethodResponse getOrderPaymentMethod(
>> @WebParam(partName = "partGetOrderPaymentMethodRequest", name =
>> "getOrderPaymentMethodRequest", targetNamespace =
>> "http://payment.api.xxxxx.com/")
>> OrderRequest partGetOrderPaymentMethodRequest,
>> @WebParam(targetNamespace = "http://payment.api.xxxxx.com/", name =
>> "AuthHeader", header = true, partName = "AuthHeader")
>> com.xxxxx.webservices.common.AuthHeader authHeader) throws
>> SomeThingFault;
>> @WebMethod
>> @POST
>> @Path("/setorderpaymentterm")
>> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>> @WebResult(targetNamespace = "http://payment.api.xxxxx.com/",
>> partName = "partSetOrderPaymentTermResponse", name =
>> "setOrderPaymentTermResponse")
>> public DetailsResponse setOrderPaymentTerm(
>> @WebParam(partName =
>> "partSetOrderPaymentTermRequest", name =
>> "setOrderPaymentTermRequest", targetNamespace =
>> "http://payment.api.xxxxx.com/") SetOrderPaymentTermRequest
partSetOrderPaymentTermRequest,
>>
>> @WebParam(targetNamespace = "http://payment.api.xxxxx.com/", name =
>> "AuthHeader", header = true, partName = "AuthHeader")
>> com.xxxxx.webservices.common.AuthHeader authHeader) throws
>> SomeThingFault;
>> @Path("/getorderpaymentmethod2")
>> @POST
>> public GetOrderPaymentMethodResponse getOrderPaymentMethod2(
>> OrderRequest partGetOrderPaymentMethodRequest ) throws
>> SomeThingFault;
>>
>> @Path("/getorderpaymentmethod3")
>> @POST
>> public GetOrderPaymentMethodResponse getOrderPaymentMethod3(
>> OrderRequest partGetOrderPaymentMethodRequest,
>> com.xxxxx.webservices.common.AuthHeader authHeader) throws
>> SomeThingFault;
>>
>>
>> }
>>
>> Here is cxf-bean.xml file definition
>> -------------------------------------
>> <bean id="someThingPaymentJaxwsJaxrsImpl"
>> class="com.xxx.api.payment.SomeThingPaymentJaxwsJaxrsImpl" />
>>
>> <jaxws:endpoint id="SomeThingPaymentJaxwsJaxrs"
>> implementorClass="com.xxx.api.payment.SomeThingPaymentJaxwsJaxrsImpl"
>> implementor="#someThingPaymentJaxwsJaxrsImpl" address="/
>> SomeThingPaymentJaxwsJaxrs"/> <jaxrs:server
id="SomeThingPaymentJaxwsJaxrsRest"
>> address="/someThingPaymentJaxwsJaxrs_rest">
>> <jaxrs:serviceBeans> <ref bean="ssomeThingPaymentJaxwsJaxrsImpl" />
>> </jaxrs:serviceBeans> </jaxrs:server>
>>
>> Regards
>> Karuna Pydipati
>> StubHub/eBay - Platform & Services
>> Phone: (415)222-8752
>> Email: [email protected]
>>
>>
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:[email protected]]
>> Sent: Wednesday, November 18, 2009 9:41 AM
>> To: [email protected]
>> Subject: Re: Deploying JAXWS&JAXRS together - error
>>
>> I'm sorry, but I have no idea what is going on. This time it's
>> actually a different exception, it seems that the stream had already
>> been read by the time Unmarshaller tried to read...
>>
>> Lets step back a bit and try to narrow the problem.
>> How about you temporarily removing JAXWS annotations altogether and
>> try to post OrderRequest ? Still does not work ? Then can you please
>> send me the test case (that is have a resource class with JAXRS
>> annotations only and Spring config with jaxrs:server)
>>
>> thanks, Sergey
>>
>>
>> ----- Original Message -----
>> From: "Pydipati, Karuna" <[email protected]>
>> To: <[email protected]>
>> Sent: Wednesday, November 18, 2009 5:27 PM
>> Subject: RE: Deploying JAXWS&JAXRS together - error
>>
>>
>> I tried all possible combinations. This one is failing with different
>> error. I never felt so difficulty with REST on CXF. This appears to
>> be very simple one. But, it is taking most of my energy.
>> Is it because I have annotated interface with both JAX-WS and JAX-RS?
>>
>>
>> 09:23:31,125 ERROR [STDERR] Nov 18, 2009 9:23:31 AM
>> org.apache.cxf.interceptor.LoggingInInterceptor logging
>> INFO: Inbound Message
>> ----------------------------
>> ID: 2
>> Address:
>> /paymentapi/stubHubPaymentJaxwsJaxrs_rest/payment/
>> getorderpaymentmethod
>> Encoding: ISO-8859-1
>> Content-Type: application/xml
>> Headers: {content-length=[58], accept-encoding=[gzip,deflate],
>> host=[10.249.136.95:28080], user-agent=[Jakarta Commons-H
>> ttpClient/3.1], Content-Type=[application/xml],
>> content-type=[application/xml]}
>> Payload: <OrderRequest>
>> <orderId>23544619</orderId>
>> </OrderRequest>
>> --------------------------------------
>> 09:23:31,172 ERROR [STDERR] Nov 18, 2009 9:23:31 AM
>> org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBExcepti
>> on
>> WARNING: javax.xml.bind.UnmarshalException
>> - with linked exception:
>> [org.xml.sax.SAXParseException: Premature end of file.]
>> at
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalExcept
>> ion
>
>
>> (AbstractUnmarshallerImpl.java:315)
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.UnmarshallerImpl.createUnmarsha
>> lException(UnmarshallerImpl.java:506)
>>
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0
>> (Unm
>> arshallerImpl.java:215)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal
>> (Unma
>> rshallerImpl.java:184)
>> at
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal
>> (AbstractUnmars
>> hallerImpl.java:137)
>> at
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal
>> (AbstractUnmars
>> hallerImpl.java:184)
>> at
>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputS
>> tre
>
>
>> am(JAXBElementProvider.java:193)
>> at
>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal
>> (JAXBElemen
>> tProvider.java:176)
>> at
>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom
>> (JAXBElementPr
>> ovider.java:150)
>> at
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody
>> (JAXRSUtils.jav
>> a:861)
>> at
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter
>> (JAXRSUtils.java:4
>> 94)
>>
>>
>>
>> Regards
>> Karuna Pydipati
>> StubHub/eBay - Platform & Services
>> Phone: (415)222-8752
>> Email: [email protected]
>>
>>
>>
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:[email protected]]
>> Sent: Wednesday, November 18, 2009 9:18 AM
>> To: [email protected]
>> Subject: Re: Deploying JAXWS&JAXRS together - error
>>
>> You have @XmlRootElement(name = "OrderRequest")
>>
>> I didn't pay any attention to it,
>>
>> <OrderRequest>
>> <orderId>23544619</orderId>
>> </OrderRequest>
>>
>> should do. It's really a JAXB issue
>>
>> cheers, Sergey
>>
>>
>>
>> ----- Original Message -----
>> From: "Pydipati, Karuna" <[email protected]>
>> To: <[email protected]>
>> Sent: Wednesday, November 18, 2009 5:07 PM
>> Subject: RE: Deploying JAXWS&JAXRS together - error
>>
>>
>> I tried that too. I am getting this exception.
>>
>> 09:05:44,793 ERROR [STDERR] Nov 18, 2009 9:05:44 AM
>> org.apache.cxf.interceptor.LoggingInInterceptor logging
>> INFO: Inbound Message
>> ----------------------------
>> ID: 2
>> Address:
>> /paymentapi/stubHubPaymentJaxwsJaxrs_rest/payment/
>> getorderpaymentmethod
>> Encoding: ISO-8859-1
>> Content-Type: application/xml
>> Headers: {content-length=[58], accept-encoding=[gzip,deflate],
>> host=[10.249.136.95:28080], user-agent=[Jakarta Commons-H
>> ttpClient/3.1], Content-Type=[application/xml],
>> content-type=[application/xml], Accept=[application/xml]}
>> Payload: <orderRequest>
>> <orderId>23544619</orderId>
>> </orderRequest>
>> --------------------------------------
>> 09:05:44,856 ERROR [STDERR] Nov 18, 2009 9:05:44 AM
>> org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBExcepti
>> on
>> WARNING: javax.xml.bind.UnmarshalException: unexpected element
>> (uri:"", local:"orderRequest"). Expected elements are <{}
>> OrderRequest>
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.UnmarshallingContext.handleEven
>> t(UnmarshallingContext.java:603)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError
(Loader.java:
>> 244)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError
(Loader.java:
>> 239)
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.Loader.reportUnexpectedChildEle
>> ment(Loader.java:116)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext
>> $DefaultRoo tLoader.childElement(UnmarshallingCon
>> text.java:1009)
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.UnmarshallingContext._startElem
>> ent(UnmarshallingContext.java:446)
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.UnmarshallingContext.startEleme
>> nt(UnmarshallingContext.java:427)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement
>> (SAXCo
>> nnector.java:137)
>> at
>> org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown
Source)
>> at
>> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement
>> (Unknown
>> Source)
>> at
>> org.apache.xerces.impl.XMLNSDocumentScannerImpl
>> $NSContentDispatcher.scan RootElementHook(Unknown Source)
>> at
>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl
>> $FragmentContentDis patcher.dispatch(Unknown Source)
>> at
>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
>> (Unkno wn Source)
>> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
>> Source)
>>
>>
>> Regards
>> Karuna Pydipati
>> StubHub/eBay - Platform & Services
>> Phone: (415)222-8752
>> Email: [email protected]
>>
>>
>>
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:[email protected]]
>> Sent: Wednesday, November 18, 2009 4:48 AM
>> To: [email protected]
>> Subject: Re: Deploying JAXWS&JAXRS together - error
>>
>> Hi
>>
>> You have the following payload
>>
>> <getOrderPaymentMethodRequest>
>> <orderId>23544619</orderId> </getOrderPaymentMethodRequest>
>>
>> but it only works for SOAP as the JAXWS runtime ensures the
>> Orderrequest bean is populated out of thid request XML...
>>
>> for plain HTTP invocations it has to be something like
>>
>> <orderRequest>
>> <orderId>23544619</orderId>
>> </orderRequest>
>>
>> cheers, Sergey
>>
>>
>> ----- Original Message -----
>> From: "Pydipati, Karuna" <[email protected]>
>> To: <[email protected]>
>> Sent: Wednesday, November 18, 2009 3:26 AM
>> Subject: RE: Deploying JAXWS&JAXRS together - error
>>
>>
>> I have this JAXWS-JAXRS method. SOAP call is working fine. When I
>> try to call do REST call, it is failing. Probably, I am not sending
>> the POST payload properly. Do you guys have any clue? I copied the
>> OrderRequest.java at the end.
>>
>> @WebMethod
>> @POST
>> @Path("/getorderpaymentmethod")
>> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>> @WebResult(targetNamespace = "http://payment.api.xxxxx.com/",
>> partName = "partGetOrderPaymentMethodResponse", name =
>> "getOrderPaymentMethodResponse")
>>
>> public GetOrderPaymentMethodResponse getOrderPaymentMethod(
>> @WebParam(partName = "partGetOrderPaymentMethodRequest",
>> name = "getOrderPaymentMethodRequest", targetNamespace =
>> "http://payment.api.xxxxx.com/") OrderRequest
>> partGetOrderPaymentMethodRequest,
>>
>> @WebParam(targetNamespace = "http://payment.api.xxxxx.com/", name =
>> "AuthHeader", header = true, partName = "AuthHeader")
>> com.xxxxx.webservices.common.AuthHeader authHeader) throws
>> xxxxxFault;
>>
>> --------------------------------------
>> 19:12:15,583 ERROR [STDERR] Nov 17, 2009 7:12:15 PM
>> org.apache.cxf.interceptor.LoggingInInterceptor logging
>> INFO: Inbound Message
>> ----------------------------
>> ID: 25
>> Address:
>> /paymentapi/stubHubPaymentJaxwsJaxrs_rest/payment/
>> getorderpaymentmethod
>> Encoding: ISO-8859-1
>> Content-Type: application/xml
>> Headers: {content-length=[109], connection=[keep-alive],
>> cache-control=[no-cache], host=[10.249.136.95:28080], user-agen
>> t=[Java/1.5.0_14], pragma=[no-cache], Content-Type=[application/xml],
>> content-type=[application/xml], Accept=[text/html, image/gif,
>> image/jpeg, *; q=.2, */*; q=.2], content-language=[en-US]}
>> Payload: <getOrderPaymentMethodRequest>
>> <orderId>23544619</orderId> </getOrderPaymentMethodRequest>
>> --------------------------------------
>> 19:12:15,583 ERROR [STDERR] Nov 17, 2009 7:12:15 PM
>> org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBExcepti
>> on
>> WARNING: javax.xml.bind.UnmarshalException: unexpected element
>> (uri:"", local:"getOrderPaymentMethodRequest"). Expected elements are
>> <{}OrderRequest>
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.UnmarshallingContext.handleEven
>> t(UnmarshallingContext.java:603)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError
(Loader.java:
>> 244)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError
(Loader.java:
>> 239)
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.Loader.reportUnexpectedChildEle
>> ment(Loader.java:116)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext
>> $DefaultRoo tLoader.childElement(UnmarshallingCon
>> text.java:1009)
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.UnmarshallingContext._startElem
>> ent(UnmarshallingContext.java:446)
>> at
>> com.sun.xml.bind.v2.
>> runtime.unmarshaller.UnmarshallingContext.startEleme
>> nt(UnmarshallingContext.java:427)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement
>> (SAXCo
>> nnector.java:137)
>> at
>> org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown
Source)
>> at
>> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement
>> (Unknown
>> Source)
>> at
>> org.apache.xerces.impl.XMLNSDocumentScannerImpl
>> $NSContentDispatcher.scan RootElementHook(Unknown Source)
>> at
>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl
>> $FragmentContentDis patcher.dispatch(Unknown Source)
>> at
>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
>> (Unkno wn Source)
>> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
>> Source)
>> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
>> Source)
>> at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
>> Source)
>> at
>> org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown
Source)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0
>> (Unm
>> arshallerImpl.java:211)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal
>> (Unma
>> rshallerImpl.java:184)
>> at
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal
>> (AbstractUnmars
>> hallerImpl.java:137)
>> at
>> javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal
>> (AbstractUnmars
>> hallerImpl.java:184)
>> at
>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputS
>> tre
>
>
>> am(JAXBElementProvider.java:193)
>> at
>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal
>> (JAXBElemen
>> tProvider.java:176)
>> at
>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom
>> (JAXBElementPr
>> ovider.java:150)
>> at
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody
>> (JAXRSUtils.jav
>> a:861)
>> at
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter
>> (JAXRSUtils.java:4
>> 94)
>> at
>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters
(JAXRSUtils.java:
>> 459)
>> at
>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest
>> (JAXRS
>> InInterceptor.java:204)
>> at
>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage
>> (JAXRSI
>> nInterceptor.java:65)
>> at
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept
>> (PhaseInterceptorC
>> hain.java:236)
>> at
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage
>> (ChainInitiati
>> onObserver.java:104)
>> at
>> org.apache.cxf.transport.servlet.ServletDestination.invoke
>> (ServletDestin
>> ation.java:99)
>> at
>> org.apache.cxf.transport.servlet.ServletController.invokeDestination
>> (Ser
>> vletController.java:452)
>> at
>> org.apache.cxf.transport.servlet.ServletController.invoke
>> (ServletControl
>> ler.java:159)
>> at
>> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke
>> (AbstractCXFSe
>> rvlet.java:220)
>> at
>> org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost
>> (AbstractCXFSe
>> rvlet.java:153)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>> at
>> org.apache.cxf.transport.servlet.AbstractCXFServlet.service
>> (AbstractCXFS
>> ervlet.java:211)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
>> (Applica
>> tionFilterChain.java:290)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter
>> (ApplicationFilt
>> erChain.java:206)
>> at
>> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter
>> (ReplyHeaderFilte
>> r.java:96)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
>> (Applica
>> tionFilterChain.java:235)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter
>> (ApplicationFilt
>> erChain.java:206)
>> at
>> org.apache.catalina.core.StandardWrapperValve.invoke
>> (StandardWrapperValv
>> e.java:230)
>> at
>> org.apache.catalina.core.StandardContextValve.invoke
>> (StandardContextValv
>> e.java:175)
>> at
>> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke
>> (SecurityAs
>> sociationValve.java:179)
>> at
>> org.jboss.web.tomcat.security.JaccContextValve.invoke
>> (JaccContextValve.j
>> ava:84)
>> at
>> org.apache.catalina.core.StandardHostValve.invoke
>> (StandardHostValve.java
>> :127)
>> at
>> org.apache.catalina.valves.ErrorReportValve.invoke
>> (ErrorReportValve.java
>> :102)
>> at
>> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke
>> (CachedConn
>> ectionValve.java:157)
>> at
>> org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.
>> java:109)
>> at
>> org.apache.catalina.connector.CoyoteAdapter.service
>> (CoyoteAdapter.java:2
>> 62)
>> at
>> org.apache.coyote.http11.Http11Processor.process
>> (Http11Processor.java:84
>> 4)
>> at
>> org.apache.coyote.http11.Http11Protocol
>> $Http11ConnectionHandler.process(
>> Http11Protocol.java:583)
>> at
>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
446)
>> at java.lang.Thread.run(Thread.java:595)
>> 19:12:15,583 ERROR [STDERR] Nov 17, 2009 7:12:15 PM
>> org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse
>> WARNING: WebApplicationException has been caught : unexpected element
>> (uri:"", local:"getOrderPaymentMethodRequest"). Ex pected elements
>> are <{}OrderRequest>
>> 19:12:15,583 ERROR [STDERR] Nov 17, 2009 7:12:15 PM
>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onC
>> lose
>> INFO: Outbound Message
>> ---------------------------
>> ID: 25
>> Encoding:
>> Content-Type: text/plain
>> Headers: {Content-Type=[text/plain], Date=[Wed, 18 Nov 2009 03:12:15
>> GMT]}
>> Payload: JAXBException occurred : unexpected element (uri:"",
>> local:"getOrderPaymentMethodRequest"). Expected elements a re
>> <{}OrderRequest>.
>> --------------------------------------
>>
>> OrderRequest.java
>> ------------------
>>
>> @XmlAccessorType(XmlAccessType.FIELD)
>> @XmlType(name = "orderRequest", propOrder = { "orderId" })
>> @XmlRootElement(name = "OrderRequest") public class OrderRequest {
>>
>> @XmlElement(required = true)
>> protected Long orderId;
>>
>> public Long getOrderId() {
>> return orderId;
>> }
>>
>> public void setOrderId(Long value) {
>> this.orderId = value;
>> }
>>
>> }
>>
>> AuthHeader.java
>> ---------------
>>
>> @XmlAccessorType(XmlAccessType.FIELD)
>> @XmlType(name = "authHeader", propOrder = { "userId" })
>> @XmlRootElement(name = "AuthHeader") public class AuthHeader {
>>
>> @XmlElement(name = "UserId", required = true) protected Long
>> userId;
>>
>> public Long getUserId() {
>> return userId;
>> }
>>
>> public void setUserId(Long userId) {
>> this.userId = userId;
>> }
>>
>> }
>>
>> Regards
>> Karuna Pydipati
>> StubHub/eBay - Platform & Services
>> Phone: (415)222-8752
>> Email: [email protected]
>>
>>
>>