Loading pom.xml +5 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,11 @@ <artifactId>jackson-datatype-jsr310</artifactId> <version>2.12.2</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>${jersey.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> Loading src/main/java/com/inteligr8/rs/Client.java +7 −2 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ public abstract class Client { public final javax.ws.rs.client.Client getClient() { synchronized (this.sync) { if (this.client == null) this.client = this.buildClient(null); this.client = this.buildClient((AuthorizationFilter)null); } return this.client; Loading @@ -48,7 +48,7 @@ public abstract class Client { * @param authFilter A dynamic authorization filter. * @return A pre-configured JAX-RS client (no URL) with the specified authorization. */ public javax.ws.rs.client.Client buildClient(AuthorizationFilter authFilter) { public final javax.ws.rs.client.Client buildClient(AuthorizationFilter authFilter) { JacksonJsonProvider provider = new JacksonJaxbJsonProvider(); if (this.getConfig().isWrapRootValueEnabled()) Loading @@ -64,10 +64,15 @@ public abstract class Client { authFilter = this.getConfig().createAuthorizationFilter(); if (authFilter != null) clientBuilder.register(authFilter); this.buildClient(clientBuilder); return clientBuilder.build(); } public void buildClient(ClientBuilder clientBuilder) { // for extension purposes } /** * @return A pre-configured JAX-RS target (client w/ base URL) with configured authorization. */ Loading src/main/java/com/inteligr8/rs/ClientCxfImpl.java +7 −2 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ import org.apache.cxf.BusFactory; import org.apache.cxf.jaxrs.client.JAXRSClientFactory; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl; import org.apache.cxf.jaxrs.provider.MultipartProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; Loading Loading @@ -68,13 +67,15 @@ public abstract class ClientCxfImpl extends Client implements InitializingBean { List<Object> providersAndFilters = new LinkedList<Object>(); providersAndFilters.add(new JacksonJaxbJsonProvider()); providersAndFilters.add(new CxfLoggingFilter()); providersAndFilters.add(new MultipartProvider()); providersAndFilters.add(new CxfMultipartProvider()); if (authFilter == null) authFilter = this.getConfig().createAuthorizationFilter(); if (authFilter != null) providersAndFilters.add(authFilter); this.addProvidersAndFilters(providersAndFilters); // we can't use JAXRSClientFactory with a JAXRS client (duh!) // so we need to create a CXF client WebClient client = WebClient.create(this.getConfig().getBaseUrl(), providersAndFilters); Loading @@ -90,6 +91,10 @@ public abstract class ClientCxfImpl extends Client implements InitializingBean { return client; } public void addProvidersAndFilters(List<Object> providersAndFilters) { // for extension purposes } /** * This method retrieves a JAX-RS implementation of the specified API with * the specified authorization. Loading src/main/java/com/inteligr8/rs/ClientJerseyImpl.java +6 −10 Original line number Diff line number Diff line package com.inteligr8.rs; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.ext.RuntimeDelegate; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.client.proxy.WebResourceFactory; import org.glassfish.jersey.internal.RuntimeDelegateImpl; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; Loading Loading @@ -46,20 +48,14 @@ public abstract class ClientJerseyImpl extends Client implements InitializingBea this.logger.info("API Base URL: " + this.getConfig().getBaseUrl()); } /** * @param authFilter A post-configuration authorization filter. * @return A JAX-RS client. */ @Override public javax.ws.rs.client.Client getClient(AuthorizationFilter authFilter) { javax.ws.rs.client.Client client = super.getClient(authFilter); public void buildClient(ClientBuilder clientBuilder) { clientBuilder.register(MultiPartFeature.class); if (!this.getConfig().isPutBodyRequired()) { // allow PUT operations without body data client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); clientBuilder.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); } return client; } /** Loading src/main/java/com/inteligr8/rs/CxfMultipartProvider.java 0 → 100644 +29 −0 Original line number Diff line number Diff line package com.inteligr8.rs; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.ext.Provider; import org.apache.cxf.jaxrs.ext.multipart.MultipartBody; import org.apache.cxf.jaxrs.provider.MultipartProvider; @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.MULTIPART_FORM_DATA) @Provider public class CxfMultipartProvider extends MultipartProvider { @Override public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return MultipartBody.class.isAssignableFrom(type) || this.isReadable(type, genericType, annotations, mediaType); } @Override public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return MultipartBody.class.isAssignableFrom(type) || this.isWriteable(type, genericType, annotations, mediaType); } } Loading
pom.xml +5 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,11 @@ <artifactId>jackson-datatype-jsr310</artifactId> <version>2.12.2</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>${jersey.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> Loading
src/main/java/com/inteligr8/rs/Client.java +7 −2 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ public abstract class Client { public final javax.ws.rs.client.Client getClient() { synchronized (this.sync) { if (this.client == null) this.client = this.buildClient(null); this.client = this.buildClient((AuthorizationFilter)null); } return this.client; Loading @@ -48,7 +48,7 @@ public abstract class Client { * @param authFilter A dynamic authorization filter. * @return A pre-configured JAX-RS client (no URL) with the specified authorization. */ public javax.ws.rs.client.Client buildClient(AuthorizationFilter authFilter) { public final javax.ws.rs.client.Client buildClient(AuthorizationFilter authFilter) { JacksonJsonProvider provider = new JacksonJaxbJsonProvider(); if (this.getConfig().isWrapRootValueEnabled()) Loading @@ -64,10 +64,15 @@ public abstract class Client { authFilter = this.getConfig().createAuthorizationFilter(); if (authFilter != null) clientBuilder.register(authFilter); this.buildClient(clientBuilder); return clientBuilder.build(); } public void buildClient(ClientBuilder clientBuilder) { // for extension purposes } /** * @return A pre-configured JAX-RS target (client w/ base URL) with configured authorization. */ Loading
src/main/java/com/inteligr8/rs/ClientCxfImpl.java +7 −2 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ import org.apache.cxf.BusFactory; import org.apache.cxf.jaxrs.client.JAXRSClientFactory; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl; import org.apache.cxf.jaxrs.provider.MultipartProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; Loading Loading @@ -68,13 +67,15 @@ public abstract class ClientCxfImpl extends Client implements InitializingBean { List<Object> providersAndFilters = new LinkedList<Object>(); providersAndFilters.add(new JacksonJaxbJsonProvider()); providersAndFilters.add(new CxfLoggingFilter()); providersAndFilters.add(new MultipartProvider()); providersAndFilters.add(new CxfMultipartProvider()); if (authFilter == null) authFilter = this.getConfig().createAuthorizationFilter(); if (authFilter != null) providersAndFilters.add(authFilter); this.addProvidersAndFilters(providersAndFilters); // we can't use JAXRSClientFactory with a JAXRS client (duh!) // so we need to create a CXF client WebClient client = WebClient.create(this.getConfig().getBaseUrl(), providersAndFilters); Loading @@ -90,6 +91,10 @@ public abstract class ClientCxfImpl extends Client implements InitializingBean { return client; } public void addProvidersAndFilters(List<Object> providersAndFilters) { // for extension purposes } /** * This method retrieves a JAX-RS implementation of the specified API with * the specified authorization. Loading
src/main/java/com/inteligr8/rs/ClientJerseyImpl.java +6 −10 Original line number Diff line number Diff line package com.inteligr8.rs; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.ext.RuntimeDelegate; import org.glassfish.jersey.client.ClientProperties; import org.glassfish.jersey.client.proxy.WebResourceFactory; import org.glassfish.jersey.internal.RuntimeDelegateImpl; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; Loading Loading @@ -46,20 +48,14 @@ public abstract class ClientJerseyImpl extends Client implements InitializingBea this.logger.info("API Base URL: " + this.getConfig().getBaseUrl()); } /** * @param authFilter A post-configuration authorization filter. * @return A JAX-RS client. */ @Override public javax.ws.rs.client.Client getClient(AuthorizationFilter authFilter) { javax.ws.rs.client.Client client = super.getClient(authFilter); public void buildClient(ClientBuilder clientBuilder) { clientBuilder.register(MultiPartFeature.class); if (!this.getConfig().isPutBodyRequired()) { // allow PUT operations without body data client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); clientBuilder.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); } return client; } /** Loading
src/main/java/com/inteligr8/rs/CxfMultipartProvider.java 0 → 100644 +29 −0 Original line number Diff line number Diff line package com.inteligr8.rs; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.ext.Provider; import org.apache.cxf.jaxrs.ext.multipart.MultipartBody; import org.apache.cxf.jaxrs.provider.MultipartProvider; @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.MULTIPART_FORM_DATA) @Provider public class CxfMultipartProvider extends MultipartProvider { @Override public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return MultipartBody.class.isAssignableFrom(type) || this.isReadable(type, genericType, annotations, mediaType); } @Override public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return MultipartBody.class.isAssignableFrom(type) || this.isWriteable(type, genericType, annotations, mediaType); } }