You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by "Yang, Lee" <le...@retirementpartner.com> on 2014/07/18 19:16:27 UTC

JAXB exception when using @Context to inject UriInfo

When I deploy a CXF JAX-RS application that uses the @Context annotation to inject a UriInfo object into a parameter of a method, the following error occurs:

Caused By: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
javax.ws.rs.core.UriInfo is an interface, and JAXB can't handle interfaces.
        this problem is related to the following location:
                at javax.ws.rs.core.UriInfo

I have tried following two versions for jaxb jars (i.e.,  'api', 'core', 'impl', 'runtime', and 'xjc') with the ear deployment:


1.       The version 2.2.7 distributed with CXF version 3.0.0 release

2.       The latest version 2.2.10-b140310.1920 for core, impl, runtime, xjc, and version 2.2.10 for api

The ear deployment is deployed to WebLogic server version 10.3.6.0, with the filtering classloading below:

  <prefer-application-packages>
    <package-name>org.apache.*</package-name>
    <package-name>com.ctc.wstx.*</package-name>
    <package-name>com.sun.xml.bind.*</package-name>
    <package-name>javax.xml.bind.*</package-name>
  </prefer-application-packages>

There is no examples of using @Context in the CXF JAX-RS samples (i.e., in  ${CXF-Release}/samples/jax_rs directory). Although the CXF document has the example below (http://cxf.apache.org/docs/jax-rs-basics.html):

@Path("/customers")
public class CustomerService {

    @GET
    public Customers getCustomers(@Context UriInfo ui) {
        ......
        // builder starts with current URI and has the path of the getCustomer method appended to it
        UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getCustomer");
        for (Customer customer: customers) {
            // builder has {id} variable that must be filled in for each customer
            URI uri = ub.build(customer.getId());
            c.setUrl(uri);
        }
        return customers;
    }

    @GET
    @Path("/{id}")
    public Customer getCustomer(@PathParam("id") String id) {
        ......
    }

}

Are there any special configurations to make the inject work?

Thanks,
Lee Yang


________________________________

The information contained in this message and any accompanying attachments may contain privileged, private and/or confidential information protected by state and federal law. Penalties may be assessed for unauthorized use and/or disclosure. This message and any attachments are intended for the designated recipient only. If you have received this information in error, please notify the sender immediately and return or destroy the information.

This e-mail transmission and any attachments are believed to have been sent free of any virus or other defect that might affect any computer system into which it is received and opened. It is, however, the recipient's responsibility to ensure that the e-mail transmission and any attachments are virus free, and the sender accepts no responsibility for any damage that may in any way arise from their use.

Re: JAXB exception when using @Context to inject UriInfo

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

Do you have JAXB bean acting as a JAX-RS resource ?
May be you can configure this bean to check JAXB annotations in fields 
only so that JAX-RS context annotations do not interfere ? Or may have 
only a setter (without a getter) for JAXB to not qualify it as a  property ?

Cheers, Sergey

On 18/07/14 20:16, Yang, Lee wrote:
> When I deploy a CXF JAX-RS application that uses the @Context annotation to inject a UriInfo object into a parameter of a method, the following error occurs:
>
> Caused By: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
> javax.ws.rs.core.UriInfo is an interface, and JAXB can't handle interfaces.
>          this problem is related to the following location:
>                  at javax.ws.rs.core.UriInfo
>
> I have tried following two versions for jaxb jars (i.e.,  'api', 'core', 'impl', 'runtime', and 'xjc') with the ear deployment:
>
>
> 1.       The version 2.2.7 distributed with CXF version 3.0.0 release
>
> 2.       The latest version 2.2.10-b140310.1920 for core, impl, runtime, xjc, and version 2.2.10 for api
>
> The ear deployment is deployed to WebLogic server version 10.3.6.0, with the filtering classloading below:
>
>    <prefer-application-packages>
>      <package-name>org.apache.*</package-name>
>      <package-name>com.ctc.wstx.*</package-name>
>      <package-name>com.sun.xml.bind.*</package-name>
>      <package-name>javax.xml.bind.*</package-name>
>    </prefer-application-packages>
>
> There is no examples of using @Context in the CXF JAX-RS samples (i.e., in  ${CXF-Release}/samples/jax_rs directory). Although the CXF document has the example below (http://cxf.apache.org/docs/jax-rs-basics.html):
>
> @Path("/customers")
> public class CustomerService {
>
>      @GET
>      public Customers getCustomers(@Context UriInfo ui) {
>          ......
>          // builder starts with current URI and has the path of the getCustomer method appended to it
>          UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getCustomer");
>          for (Customer customer: customers) {
>              // builder has {id} variable that must be filled in for each customer
>              URI uri = ub.build(customer.getId());
>              c.setUrl(uri);
>          }
>          return customers;
>      }
>
>      @GET
>      @Path("/{id}")
>      public Customer getCustomer(@PathParam("id") String id) {
>          ......
>      }
>
> }
>
> Are there any special configurations to make the inject work?
>
> Thanks,
> Lee Yang
>
>
> ________________________________
>
> The information contained in this message and any accompanying attachments may contain privileged, private and/or confidential information protected by state and federal law. Penalties may be assessed for unauthorized use and/or disclosure. This message and any attachments are intended for the designated recipient only. If you have received this information in error, please notify the sender immediately and return or destroy the information.
>
> This e-mail transmission and any attachments are believed to have been sent free of any virus or other defect that might affect any computer system into which it is received and opened. It is, however, the recipient's responsibility to ensure that the e-mail transmission and any attachments are virus free, and the sender accepts no responsibility for any damage that may in any way arise from their use.
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com