[
https://issues.apache.org/jira/browse/CXF-1882?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergey Beryozkin reassigned CXF-1882:
-------------------------------------
Assignee: Sergey Beryozkin
> JAX-RS can't unmarshall request body if the corresponding parameter is
> annotated with non-JAX-RS annotation
> -----------------------------------------------------------------------------------------------------------
>
> Key: CXF-1882
> URL: https://issues.apache.org/jira/browse/CXF-1882
> Project: CXF
> Issue Type: Bug
> Components: JAX-WS Runtime, JAXB Databinding, REST
> Affects Versions: 2.1.2
> Environment: windows XP
> apache-tomcat-6.0.13
> jdk1.6.0_02
> Reporter: Gabo Manuel
> Assignee: Sergey Beryozkin
> Fix For: 2.1.4, 2.2
>
>
> I have a java-first service. The goal is to have a single service
> implementation that can be accessed via SOAP or as ReST service. I am using
> the JAX-WS annotations to have a more descriptive WSDL. I am using the JAX-RS
> annotations as defined in:
> http://cwiki.apache.org/CXF20DOC/jax-rs-jsr-311.html . Below is a trimmed
> down version of the code:
> //AccountService.java
> import javax.jws.WebMethod;
> import javax.jws.WebParam;
> import javax.jws.WebService;
> import javax.ws.rs.ConsumeMime;
> import javax.ws.rs.PUT;
> import javax.ws.rs.Path;
> @WebService(serviceName="AccountService")
> @ConsumeMime("text/xml")
> public class AccountService {
> @PUT
> @Path("/Account")
> @WebMethod
> public long insert(
> @WebParam(name="account")
> Account account
> ) {
> logger.info("insert Received: " + account);
> return 0;
> }
> }
> //Account.java
> import javax.ws.rs.Path;
> import javax.xml.bind.annotation.XmlAccessType;
> import javax.xml.bind.annotation.XmlAccessorType;
> import javax.xml.bind.annotation.XmlRootElement;
> import javax.xml.bind.annotation.XmlType;
> @XmlRootElement(name="Account")
> @XmlType(name="Account")
> @XmlAccessorType(XmlAccessType.PROPERTY)
> public class Account {
> private String accountID = "";
> public String getAccountID() {
> return accountID;
> }
> public void setAccountID(String accountID) {
> this.accountID = accountID;
> }
> }
>
> //beans.xml
> <beans xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:jaxws="http://cxf.apache.org/jaxws"
> xmlns:soap="http://cxf.apache.org/bindings/soap"
> xmlns:sec="http://cxf.apache.org/configuration/security"
> xmlns:jaxrs="http://cxf.apache.org/jaxrs"
> xsi:schemaLocation="
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> http://cxf.apache.org/bindings/soap
> http://cxf.apache.org/schemas/configuration/soap.xsd
> http://cxf.apache.org/core
> http://cxf.apache.org/schemas/core.xsd
> http://cxf.apache.org/jaxrs
> http://cxf.apache.org/schemas/jaxrs.xsd
> http://cxf.apache.org/jaxws
> http://cxf.apache.org/schemas/jaxws.xsd
> http://cxf.apache.org/configuration/security
> http://cxf.apache.org/schemas/configuration/security.xsd
> http://cxf.apache.org/transports/http/configuration
> http://cxf.apache.org/schemas/configuration/http-conf.xsd
> http://cxf.apache.org/transports/http-jetty/configuration
> http://cxf.apache.org/schemas/configuration/http-jetty.xsd
> ">
> <import resource="classpath:META-INF/cxf/cxf.xml" />
> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
> <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"
> />
> <import resource="classpath:META-INF/cxf/cxf-extension-http-binding.xml"/>
> <import resource="classpath:META-INF/cxf/cxf-extension-xml.xml"/>
>
> <jaxrs:server id="accountRestService" address="/rest/Accounts">
> <jaxrs:serviceBeans>
> <ref bean="accountServiceClass" />
> </jaxrs:serviceBeans>
> </jaxrs:server>
> <bean id="accountServiceClass" class="AccountService" />
> <jaxws:endpoint
> id="accountSoapService"
> address="/soap/Accounts"
> implementor="#accountServiceClass"
> >
> </jaxws:endpoint>
> </beans>
> I have already discussed this with Sergey of CXF support team
> (http://www.nabble.com/-JAX-WS--JAX-RS--tt20007600.html). The issue seem to
> be not present if the parameter is not annotated by JAX-WS. Below is a
> snippet of his findings:
> <quote>
> I think I might know what might be happening - JAXRS runtime does not
> recognize the Account as being a standalone method parameter as it's
> annotated with a JAXWS annotation. On other words, in JAX-RS, providers(by
> default) are used only when unmarshalling parameters not annotated with
> JAX-RS annotations, for ex
> void foo(@PathParam("id") String id, Account acc);
> here the Account will be unmarshalled as expected but because you have
> void foo(@WebParam(name="account") Account account);
> the runtime mistakenly ignores it....
> </quote>
> Please advise if you need more information.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.