cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gabo Manuel (JIRA)" <j...@apache.org>
Subject [jira] Created: (CXF-1882) JAX-RS can't unmarshall request body if the corresponding parameter is annotated with non-JAX-RS annotation
Date Wed, 22 Oct 2008 11:02:44 GMT
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.


Mime
View raw message