Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions jaxrs/beanparam/README.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
= JAX-RS BeanParam

This example demonstrate the use of a +@BeanParam+ annotation to group some of the request parameters in a user bean, in order to avoid having too many paramaters in the method signature.

The user type annotated with +@BeanParam+ may contain fields or setter methods annotated with +@MatrixParam+, +@QueryParam+, +@PathParam+, +@CookieParam+ or +@HeaderParam+.
15 changes: 15 additions & 0 deletions jaxrs/beanparam/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.javaee7.jaxrs</groupId>
<artifactId>jaxrs-samples</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<groupId>org.javaee7.jaxrs</groupId>
<artifactId>beanparam</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.javaee7.jaxrs.beanparam;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

/**
* @author Arun Gupta
*/
@ApplicationPath("webresources")
public class MyApplication extends Application {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.javaee7.jaxrs.beanparam;

import javax.ws.rs.PathParam;

/**
* @author xcoulon
*
*/
public class MyPathParams {

@PathParam("id1")
private String id1;

private String id2;

public String getId1() {
return id1;
}

public void setId1(String id1) {
this.id1 = id1;
}

public String getId2() {
return id2;
}

@PathParam("id2")
public void setId2(String id2) {
this.id2 = id2;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.javaee7.jaxrs.beanparam;

import javax.ws.rs.QueryParam;

/**
* @author xcoulon
*
*/
public class MyQueryParams {

@QueryParam("param1")
private String param1;

@QueryParam("param2")
private String param2;

@QueryParam("param3")
private String param3;

public String getParam1() {
return param1;
}

public String getParam2() {
return param2;
}

public String getParam3() {
return param3;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.javaee7.jaxrs.beanparam;

import javax.ws.rs.BeanParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
* @author Xavier Coulon
*/
@Path("/endpoint")
public class MyResource {

@GET()
@Path("/{id1}/{id2}")
@Produces(MediaType.TEXT_PLAIN)
public String get(@BeanParam MyPathParams pathParams, @BeanParam MyQueryParams queryParams) {
return "/" + pathParams.getId1() + "/" + pathParams.getId2() + "?param1=" + queryParams.getParam1() + "&param2="
+ queryParams.getParam2() + "&param3=" + queryParams.getParam3();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.javaee7.jaxrs.beanparam;

import static org.junit.Assert.assertEquals;

import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
* @author Arun Gupta
* @author Xavier Coulon
*/
@RunWith(Arquillian.class)
public class MyResourceTest {

@Deployment(testable = false)
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class)
.addClasses(MyApplication.class, MyResource.class, MyPathParams.class, MyQueryParams.class);
}
private static WebTarget target;

@ArquillianResource
private URL base;

@Before
public void setUpClass() throws MalformedURLException {
Client client = ClientBuilder.newClient();
target = client.target(URI.create(new URL(base, "webresources/endpoint").toExternalForm()));
}

@Test
public void testRequestWithAllParams() {
WebTarget t = target.path("/123").path("/abc").queryParam("param1", "foo").queryParam("param2", "bar").queryParam("param3", "baz");
String r = t.request(). get(String.class);
assertEquals("/123/abc?param1=foo&param2=bar&param3=baz", r);
}

}
1 change: 1 addition & 0 deletions jaxrs/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
<module>async-client</module>
<module>async-server</module>
<module>beanvalidation</module>
<module>beanparam</module>
<module>client-negotiation</module>
<module>dynamicfilter</module>
<module>filter</module>
Expand Down