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 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.