Show Table of Contents
44.4. Using Apache CXF extensions
Overview
Apache CXF provides an extension to the standard JAX-WS injection mechanism that allows developers to replace a sequence of injection annotations with a single annotation. The single annotation is placed on a bean containing fields for the data that is extracted using the annotation. For example, if a resource method is expecting a request URI to include three query parameters called
id, type, and size, it could use a single @QueryParam annotation to inject all of the parameters into a bean with corresponding fields.
Note
Consider using the
@BeanParam annotation instead (available since JAX-RS 2.0). The standardized @BeanParam approach is more flexible than the proprietary Apache CXF extension, and is thus the recommended alternative. For details, see Section 44.2.6, “Injecting Parameters into a Java Bean”.
Supported injection annotations
This extension does not support all of the injection parameters. It only supports the following ones:
@PathParam@QueryParam@MatrixParam@FormParam
Syntax
To indicate that an annotation is going to use serial injection into a bean, you need to do two things:
- Specify the annotation's parameter as an empty string. For example
@PathParam("")specifies that a sequence of URI template variables are to be serialized into a bean. - Ensure that the annotated parameter is a bean with fields that match the values being injected.
Example
Example 44.11, “Injecting query parameters into a bean” shows an example of injecting a number of Query parameters into a bean. The resource method expect the request URI to include two query parameters:
type and id. Their values are injected into the corresponding fields of the Monster bean.
Example 44.11. Injecting query parameters into a bean
import javax.ws.rs.QueryParam;
import javax.ws.rs.PathParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
...
@Path("/monstersforhire/")
public class MonsterService
{
...
@POST
public void updateMonster(@QueryParam("") Monster bean)
{
...
}
...
}
public class Monster
{
String type;
String id;
...
}
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.