include agfa in author + fix test in case port is shorter + inject services into eample conformance provider + set moxy in scope test

This commit is contained in:
petervanhoute 2015-11-24 17:35:37 +01:00
parent 5a7d2b40e8
commit 26a801edcb
13 changed files with 57 additions and 22 deletions

View File

@ -93,6 +93,7 @@
<groupId>org.glassfish.jersey.media</groupId> <groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId> <artifactId>jersey-media-moxy</artifactId>
<version>${jersey_version}</version> <version>${jersey_version}</version>
<scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -42,7 +42,8 @@ import ca.uhn.fhir.util.ReflectionUtil;
/** /**
* This is the conformance provider for the jax rs servers. It requires all providers to be registered * This is the conformance provider for the jax rs servers. It requires all providers to be registered
* during startup because the conformance profile is generated during the postconstruct phase. * during startup because the conformance profile is generated during the postconstruct phase.
* @author Peter Van Houte *
* @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public abstract class AbstractJaxRsConformanceProvider extends AbstractJaxRsProvider implements IResourceProvider { public abstract class AbstractJaxRsConformanceProvider extends AbstractJaxRsProvider implements IResourceProvider {

View File

@ -25,7 +25,8 @@ import ca.uhn.fhir.rest.server.IServerAddressStrategy;
/** /**
* This is the abstract superclass for all jaxrs providers. It contains some defaults implementing * This is the abstract superclass for all jaxrs providers. It contains some defaults implementing
* the IRestfulServerDefaults interface and exposes the uri and headers. * the IRestfulServerDefaults interface and exposes the uri and headers.
* @author Peter Van Houte *
* @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
public abstract class AbstractJaxRsProvider implements IRestfulServerDefaults { public abstract class AbstractJaxRsProvider implements IRestfulServerDefaults {

View File

@ -36,7 +36,7 @@ import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
/** /**
* This server is the abstract superclass for all resource providers. It exposes * This server is the abstract superclass for all resource providers. It exposes
* a large amount of the fhir api functionality using JAXRS * a large amount of the fhir api functionality using JAXRS
* @author Peter Van Houte * @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN })
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON, Constants.CT_FHIR_JSON, @Consumes({ MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON, Constants.CT_FHIR_JSON,
@ -93,7 +93,7 @@ public abstract class AbstractJaxRsResourceProvider<R extends IResource> extends
* @see <a href="https://www.hl7.org/fhir/http.html#create">https://www.hl7. org/fhir/http.html#create</a> * @see <a href="https://www.hl7.org/fhir/http.html#create">https://www.hl7. org/fhir/http.html#create</a>
*/ */
@POST @POST
public Response create(final String resource) throws Exception { public Response create(final String resource) throws IOException {
return execute(getRequest(RequestTypeEnum.POST, RestOperationTypeEnum.CREATE).resource(resource)); return execute(getRequest(RequestTypeEnum.POST, RestOperationTypeEnum.CREATE).resource(resource));
} }
@ -105,7 +105,7 @@ public abstract class AbstractJaxRsResourceProvider<R extends IResource> extends
*/ */
@POST @POST
@Path("/_search") @Path("/_search")
public Response searchWithPost() throws Exception { public Response searchWithPost() throws IOException {
return execute(getRequest(RequestTypeEnum.POST, RestOperationTypeEnum.SEARCH_TYPE)); return execute(getRequest(RequestTypeEnum.POST, RestOperationTypeEnum.SEARCH_TYPE));
} }
@ -116,7 +116,7 @@ public abstract class AbstractJaxRsResourceProvider<R extends IResource> extends
* @see <a href="https://www.hl7.org/fhir/http.html#search">https://www.hl7.org/fhir/http.html#search</a> * @see <a href="https://www.hl7.org/fhir/http.html#search">https://www.hl7.org/fhir/http.html#search</a>
*/ */
@GET @GET
public Response search() throws Exception { public Response search() throws IOException {
return execute(getRequest(RequestTypeEnum.GET, RestOperationTypeEnum.SEARCH_TYPE)); return execute(getRequest(RequestTypeEnum.GET, RestOperationTypeEnum.SEARCH_TYPE));
} }
@ -130,7 +130,7 @@ public abstract class AbstractJaxRsResourceProvider<R extends IResource> extends
*/ */
@PUT @PUT
@Path("/{id}") @Path("/{id}")
public Response update(@PathParam("id") final String id, final String resource) throws Exception { public Response update(@PathParam("id") final String id, final String resource) throws IOException {
return execute(getRequest(RequestTypeEnum.PUT, RestOperationTypeEnum.UPDATE).id(id).resource(resource)); return execute(getRequest(RequestTypeEnum.PUT, RestOperationTypeEnum.UPDATE).id(id).resource(resource));
} }
@ -143,7 +143,7 @@ public abstract class AbstractJaxRsResourceProvider<R extends IResource> extends
*/ */
@DELETE @DELETE
@Path("/{id}") @Path("/{id}")
public Response delete(@PathParam("id") final String id) throws Exception { public Response delete(@PathParam("id") final String id) throws IOException {
return execute(getRequest(RequestTypeEnum.DELETE, RestOperationTypeEnum.DELETE).id(id)); return execute(getRequest(RequestTypeEnum.DELETE, RestOperationTypeEnum.DELETE).id(id));
} }
@ -156,7 +156,7 @@ public abstract class AbstractJaxRsResourceProvider<R extends IResource> extends
*/ */
@GET @GET
@Path("/{id}") @Path("/{id}")
public Response find(@PathParam("id") final String id) throws Exception { public Response find(@PathParam("id") final String id) throws IOException {
return execute(getRequest(RequestTypeEnum.GET, RestOperationTypeEnum.READ).id(id)); return execute(getRequest(RequestTypeEnum.GET, RestOperationTypeEnum.READ).id(id));
} }
@ -172,7 +172,7 @@ public abstract class AbstractJaxRsResourceProvider<R extends IResource> extends
* @see <a href="https://www.hl7.org/fhir/operations.html">https://www.hl7.org/fhir/operations.html</a> * @see <a href="https://www.hl7.org/fhir/operations.html">https://www.hl7.org/fhir/operations.html</a>
*/ */
protected Response customOperation(final String resource, RequestTypeEnum requestType, String id, protected Response customOperation(final String resource, RequestTypeEnum requestType, String id,
String operationName, RestOperationTypeEnum operationType) throws Exception { String operationName, RestOperationTypeEnum operationType) throws IOException {
Builder request = getRequest(requestType, operationType).resource(resource).id(id); Builder request = getRequest(requestType, operationType).resource(resource).id(id);
return execute(request, operationName); return execute(request, operationName);
} }

View File

@ -15,7 +15,8 @@ import ca.uhn.fhir.rest.server.interceptor.ExceptionHandlingInterceptor;
/** /**
* An interceptor that catches the jax-rs exceptions * An interceptor that catches the jax-rs exceptions
* @author Peter Van Houte *
* @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
public class JaxRsExceptionInterceptor { public class JaxRsExceptionInterceptor {
@ -64,6 +65,7 @@ public class JaxRsExceptionInterceptor {
* @param theRequest the request * @param theRequest the request
* @param theException the thrown exception * @param theException the thrown exception
* @return the response describing the error * @return the response describing the error
* @throws IOException
*/ */
public Response convertExceptionIntoResponse(JaxRsRequest theRequest, JaxRsResponseException theException) public Response convertExceptionIntoResponse(JaxRsRequest theRequest, JaxRsResponseException theException)
throws IOException { throws IOException {

View File

@ -6,7 +6,8 @@ import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
/** /**
* A JEE wrapper exception that will not force a rollback. * A JEE wrapper exception that will not force a rollback.
* @author Peter Van Houte *
* @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
@ApplicationException(rollback=false) @ApplicationException(rollback=false)
public class JaxRsResponseException extends BaseServerResponseException { public class JaxRsResponseException extends BaseServerResponseException {

View File

@ -16,7 +16,8 @@ import ca.uhn.fhir.util.ReflectionUtil;
/** /**
* Class that contains the method bindings defined by a ResourceProvider * Class that contains the method bindings defined by a ResourceProvider
* @author Peter Van Houte *
* @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
public class JaxRsMethodBindings { public class JaxRsMethodBindings {

View File

@ -24,7 +24,7 @@ import ca.uhn.fhir.util.UrlUtil;
/** /**
* The JaxRsRequest is a jax-rs specific implementation of the RequestDetails. * The JaxRsRequest is a jax-rs specific implementation of the RequestDetails.
* *
* @author Peter Van Houte * @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
public class JaxRsRequest extends RequestDetails { public class JaxRsRequest extends RequestDetails {
@ -40,6 +40,12 @@ public class JaxRsRequest extends RequestDetails {
private String theVersion; private String theVersion;
private String theCompartment; private String theCompartment;
/**
* Utility Constructor
* @param theServer the server
* @param theRequestType the request type
* @param theRestOperation the rest operation
*/
public Builder(AbstractJaxRsProvider theServer, RequestTypeEnum theRequestType, public Builder(AbstractJaxRsProvider theServer, RequestTypeEnum theRequestType,
RestOperationTypeEnum theRestOperation) { RestOperationTypeEnum theRestOperation) {
this.theServer = theServer; this.theServer = theServer;
@ -123,6 +129,13 @@ public class JaxRsRequest extends RequestDetails {
private HttpHeaders headers; private HttpHeaders headers;
private AbstractJaxRsProvider myServer; private AbstractJaxRsProvider myServer;
/**
* Utility Constructor
* @param server the server
* @param resourceString the resource body
* @param requestType the request type
* @param restOperation the operation type
*/
public JaxRsRequest(AbstractJaxRsProvider server, String resourceString, RequestTypeEnum requestType, public JaxRsRequest(AbstractJaxRsProvider server, String resourceString, RequestTypeEnum requestType,
RestOperationTypeEnum restOperation) { RestOperationTypeEnum restOperation) {
this.headers = server.getHeaders(); this.headers = server.getHeaders();
@ -139,6 +152,10 @@ public class JaxRsRequest extends RequestDetails {
return myServer; return myServer;
} }
/**
* Set the server
* @param theServer the server to set
*/
public void setServer(AbstractJaxRsProvider theServer) { public void setServer(AbstractJaxRsProvider theServer) {
this.myServer = theServer; this.myServer = theServer;
} }

View File

@ -25,7 +25,7 @@ import ca.uhn.fhir.rest.server.RestfulServerUtils;
/** /**
* The JaxRsResponse is a jax-rs specific implementation of the RestfulResponse. * The JaxRsResponse is a jax-rs specific implementation of the RestfulResponse.
* *
* @author Peter Van Houte * @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
public class JaxRsResponse extends RestfulResponse<JaxRsRequest> { public class JaxRsResponse extends RestfulResponse<JaxRsRequest> {

View File

@ -75,6 +75,7 @@ public class AbstractJaxRsResourceProviderTest {
private static final FhirContext ourCtx = FhirContext.forDstu2(); private static final FhirContext ourCtx = FhirContext.forDstu2();
private static final String PATIENT_NAME = "Van Houte"; private static final String PATIENT_NAME = "Van Houte";
private static int ourPort; private static int ourPort;
private static String serverBase;
private static Server jettyServer; private static Server jettyServer;
@BeforeClass @BeforeClass
@ -93,10 +94,10 @@ public class AbstractJaxRsResourceProviderTest {
TestJaxRsConformanceRestProvider.class.getCanonicalName()), ";")); TestJaxRsConformanceRestProvider.class.getCanonicalName()), ";"));
jettyServer.start(); jettyServer.start();
final FhirContext ctx = FhirContext.forDstu2();
ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER); ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
ourCtx.getRestfulClientFactory().setSocketTimeout(1200 * 1000); ourCtx.getRestfulClientFactory().setSocketTimeout(1200 * 1000);
client = ourCtx.newRestfulGenericClient("http://localhost:" + ourPort + "/"); serverBase = "http://localhost:" + ourPort + "/";
client = ourCtx.newRestfulGenericClient(serverBase);
client.setEncoding(EncodingEnum.JSON); client.setEncoding(EncodingEnum.JSON);
client.registerInterceptor(new LoggingInterceptor(true)); client.registerInterceptor(new LoggingInterceptor(true));
} }
@ -392,7 +393,7 @@ public class AbstractJaxRsResourceProviderTest {
} }
private void compareResultUrl(String url, IResource resource) { private void compareResultUrl(String url, IResource resource) {
assertEquals(url, resource.getId().getValueAsString().substring("http://localhost:55844".length())); assertEquals(url, resource.getId().getValueAsString().substring(serverBase.length() - 1));
} }
private <T> T withId(final T id) { private <T> T withId(final T id) {

View File

@ -6,9 +6,10 @@ import javax.ws.rs.core.Application;
/** /**
* Fhir Patient Demo Application * Fhir Patient Demo Application
* *
* @author Peter Van Houte * @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
@ApplicationPath(value=FhirPatientDemoApplication.PATH) @ApplicationPath(value=FhirPatientDemoApplication.PATH)
public class FhirPatientDemoApplication extends Application { public class FhirPatientDemoApplication extends Application {
/** The demo application path */
public final static String PATH = "/jaxrs-demo"; public final static String PATH = "/jaxrs-demo";
} }

View File

@ -3,6 +3,7 @@ package ca.uhn.fhir.jaxrs.server.example;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
@ -14,7 +15,7 @@ import ca.uhn.fhir.rest.server.IResourceProvider;
/** /**
* Conformance Rest Service * Conformance Rest Service
* *
* @author Peter Van Houte * @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
@Path("") @Path("")
@Stateless @Stateless
@ -23,7 +24,13 @@ public class JaxRsConformanceProvider extends AbstractJaxRsConformanceProvider {
private static final String SERVER_VERSION = "1.0.0"; private static final String SERVER_VERSION = "1.0.0";
private static final String SERVER_DESCRIPTION = "Jax-Rs Test Example Description"; private static final String SERVER_DESCRIPTION = "Jax-Rs Test Example Description";
private static final String SERVER_NAME = "Jax-Rs Test Example"; private static final String SERVER_NAME = "Jax-Rs Test Example";
@Inject
private JaxRsPatientRestProvider patientProvider;
/**
* Standard Constructor
*/
public JaxRsConformanceProvider() { public JaxRsConformanceProvider() {
super(SERVER_VERSION, SERVER_DESCRIPTION, SERVER_NAME); super(SERVER_VERSION, SERVER_DESCRIPTION, SERVER_NAME);
} }
@ -31,8 +38,8 @@ public class JaxRsConformanceProvider extends AbstractJaxRsConformanceProvider {
@Override @Override
protected ConcurrentHashMap<Class<? extends IResourceProvider>, IResourceProvider> getProviders() { protected ConcurrentHashMap<Class<? extends IResourceProvider>, IResourceProvider> getProviders() {
ConcurrentHashMap<Class<? extends IResourceProvider>, IResourceProvider> map = new ConcurrentHashMap<Class<? extends IResourceProvider>, IResourceProvider>(); ConcurrentHashMap<Class<? extends IResourceProvider>, IResourceProvider> map = new ConcurrentHashMap<Class<? extends IResourceProvider>, IResourceProvider>();
map.put(JaxRsConformanceProvider.class, new JaxRsConformanceProvider()); map.put(JaxRsConformanceProvider.class, this);
map.put(JaxRsPatientRestProvider.class, new JaxRsPatientRestProvider()); map.put(JaxRsPatientRestProvider.class, patientProvider);
return map; return map;
} }
} }

View File

@ -50,6 +50,8 @@ import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
/** /**
* A demo JaxRs Patient Rest Provider * A demo JaxRs Patient Rest Provider
*
* @author Peter Van Houte | peter.vanhoute@agfa.com | Agfa Healthcare
*/ */
@Local @Local
@Path(JaxRsPatientRestProvider.PATH) @Path(JaxRsPatientRestProvider.PATH)