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