From 77cfe29908a49d7e8088fc34c80254cc1b2bcb19 Mon Sep 17 00:00:00 2001 From: daniel-sc Date: Sun, 30 Jun 2013 13:05:04 +0200 Subject: [PATCH] fixing "Uploading file: classloading issue" --- src/main/java/com/podio/ResourceFactory.java | 288 ++++++++++--------- 1 file changed, 145 insertions(+), 143 deletions(-) diff --git a/src/main/java/com/podio/ResourceFactory.java b/src/main/java/com/podio/ResourceFactory.java index 62506e1..4f8a4a0 100644 --- a/src/main/java/com/podio/ResourceFactory.java +++ b/src/main/java/com/podio/ResourceFactory.java @@ -1,143 +1,145 @@ -package com.podio; - -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Locale; -import java.util.TimeZone; - -import org.codehaus.jackson.jaxrs.JacksonJsonProvider; -import org.codehaus.jackson.map.DeserializationConfig.Feature; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.SerializationConfig; -import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; -import org.codehaus.jackson.map.deser.CustomDeserializerFactory; -import org.codehaus.jackson.map.deser.StdDeserializerProvider; -import org.codehaus.jackson.map.ser.CustomSerializerFactory; -import org.eclipse.jetty.http.HttpHeaders; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; - -import com.podio.oauth.OAuthClientCredentials; -import com.podio.oauth.OAuthUserCredentials; -import com.podio.serialize.DateTimeDeserializer; -import com.podio.serialize.DateTimeSerializer; -import com.podio.serialize.LocalDateDeserializer; -import com.podio.serialize.LocalDateSerializer; -import com.podio.serialize.LocaleDeserializer; -import com.podio.serialize.LocaleSerializer; -import com.podio.serialize.TimeZoneDeserializer; -import com.podio.serialize.TimeZoneSerializer; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.api.client.config.ClientConfig; -import com.sun.jersey.api.client.config.DefaultClientConfig; -import com.sun.jersey.api.client.filter.GZIPContentEncodingFilter; - -/** - * This is the main low level entry point to access the Podio API. Construct - * this and pass it to the APIFactory. - */ -public final class ResourceFactory { - - private final WebResource apiResource; - private final WebResource fileResource; - - private final LoginFilter loginFilter; - - public ResourceFactory(OAuthClientCredentials clientCredentials, - OAuthUserCredentials userCredentials) { - this("api.podio.com", "file.podio.com", 443, true, false, - clientCredentials, userCredentials); - } - - public ResourceFactory(String apiHostname, String fileHostname, int port, - boolean ssl, boolean dryRun, - OAuthClientCredentials clientCredentials, - OAuthUserCredentials userCredentials) { - ClientConfig config = new DefaultClientConfig(); - config.getSingletons().add(getJsonProvider()); - Client client = Client.create(config); - client.addFilter(new GZIPContentEncodingFilter(false)); - client.addFilter(new ExceptionFilter()); - if (dryRun) { - client.addFilter(new DryRunFilter()); - } - // client.addFilter(new LoggingFilter()); - - this.apiResource = client.resource(getURI(apiHostname, port, ssl)); - apiResource.header(HttpHeaders.USER_AGENT, "Podio Java API Client"); - this.fileResource = client.resource(getURI(fileHostname, port, ssl)); - fileResource.header(HttpHeaders.USER_AGENT, "Podio Java API Client"); - - AuthProvider authProvider = new AuthProvider(this, clientCredentials, - userCredentials); - this.loginFilter = new LoginFilter(authProvider); - } - - private URI getURI(String hostname, int port, boolean ssl) { - try { - return new URI(ssl ? "https" : "http", null, hostname, port, null, - null, null); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } - } - - private JacksonJsonProvider getJsonProvider() { - ObjectMapper mapper = new ObjectMapper(); - mapper.disable(Feature.FAIL_ON_UNKNOWN_PROPERTIES); - mapper.disable(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS); - mapper.setSerializationInclusion(Inclusion.NON_NULL); - - CustomSerializerFactory serializerFactory = new CustomSerializerFactory(); - serializerFactory.addSpecificMapping(DateTime.class, - new DateTimeSerializer()); - serializerFactory.addSpecificMapping(LocalDate.class, - new LocalDateSerializer()); - serializerFactory.addGenericMapping(TimeZone.class, - new TimeZoneSerializer()); - serializerFactory.addSpecificMapping(Locale.class, - new LocaleSerializer()); - mapper.setSerializerFactory(serializerFactory); - - CustomDeserializerFactory deserializerFactory = new CustomDeserializerFactory(); - deserializerFactory.addSpecificMapping(DateTime.class, - new DateTimeDeserializer()); - deserializerFactory.addSpecificMapping(LocalDate.class, - new LocalDateDeserializer()); - deserializerFactory.addSpecificMapping(TimeZone.class, - new TimeZoneDeserializer()); - deserializerFactory.addSpecificMapping(Locale.class, - new LocaleDeserializer()); - mapper.setDeserializerProvider(new StdDeserializerProvider( - deserializerFactory)); - - return new CustomJacksonJsonProvider(mapper); - } - - public WebResource getFileResource(String path) { - return getFileResource(path, true); - } - - public WebResource getFileResource(String path, boolean secure) { - WebResource subResource = fileResource.path(path); - if (secure) { - subResource.addFilter(this.loginFilter); - } - - return subResource; - } - - public WebResource getApiResource(String path) { - return getApiResource(path, true); - } - - public WebResource getApiResource(String path, boolean secure) { - WebResource subResource = apiResource.path(path); - if (secure) { - subResource.addFilter(this.loginFilter); - } - - return subResource; - } -} +package com.podio; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Locale; +import java.util.TimeZone; + +import org.codehaus.jackson.jaxrs.JacksonJsonProvider; +import org.codehaus.jackson.map.DeserializationConfig.Feature; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.SerializationConfig; +import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; +import org.codehaus.jackson.map.deser.CustomDeserializerFactory; +import org.codehaus.jackson.map.deser.StdDeserializerProvider; +import org.codehaus.jackson.map.ser.CustomSerializerFactory; +import org.eclipse.jetty.http.HttpHeaders; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; + +import com.podio.oauth.OAuthClientCredentials; +import com.podio.oauth.OAuthUserCredentials; +import com.podio.serialize.DateTimeDeserializer; +import com.podio.serialize.DateTimeSerializer; +import com.podio.serialize.LocalDateDeserializer; +import com.podio.serialize.LocalDateSerializer; +import com.podio.serialize.LocaleDeserializer; +import com.podio.serialize.LocaleSerializer; +import com.podio.serialize.TimeZoneDeserializer; +import com.podio.serialize.TimeZoneSerializer; +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.WebResource; +import com.sun.jersey.api.client.config.ClientConfig; +import com.sun.jersey.api.client.config.DefaultClientConfig; +import com.sun.jersey.api.client.filter.GZIPContentEncodingFilter; +import com.sun.jersey.multipart.impl.MultiPartWriter; + +/** + * This is the main low level entry point to access the Podio API. Construct + * this and pass it to the APIFactory. + */ +public final class ResourceFactory { + + private final WebResource apiResource; + private final WebResource fileResource; + + private final LoginFilter loginFilter; + + public ResourceFactory(OAuthClientCredentials clientCredentials, + OAuthUserCredentials userCredentials) { + this("api.podio.com", "file.podio.com", 443, true, false, + clientCredentials, userCredentials); + } + + public ResourceFactory(String apiHostname, String fileHostname, int port, + boolean ssl, boolean dryRun, + OAuthClientCredentials clientCredentials, + OAuthUserCredentials userCredentials) { + ClientConfig config = new DefaultClientConfig(); + config.getSingletons().add(getJsonProvider()); + config.getClasses().add(MultiPartWriter.class); + Client client = Client.create(config); + client.addFilter(new GZIPContentEncodingFilter(false)); + client.addFilter(new ExceptionFilter()); + if (dryRun) { + client.addFilter(new DryRunFilter()); + } + // client.addFilter(new LoggingFilter()); + + this.apiResource = client.resource(getURI(apiHostname, port, ssl)); + apiResource.header(HttpHeaders.USER_AGENT, "Podio Java API Client"); + this.fileResource = client.resource(getURI(fileHostname, port, ssl)); + fileResource.header(HttpHeaders.USER_AGENT, "Podio Java API Client"); + + AuthProvider authProvider = new AuthProvider(this, clientCredentials, + userCredentials); + this.loginFilter = new LoginFilter(authProvider); + } + + private URI getURI(String hostname, int port, boolean ssl) { + try { + return new URI(ssl ? "https" : "http", null, hostname, port, null, + null, null); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } + + private JacksonJsonProvider getJsonProvider() { + ObjectMapper mapper = new ObjectMapper(); + mapper.disable(Feature.FAIL_ON_UNKNOWN_PROPERTIES); + mapper.disable(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS); + mapper.setSerializationInclusion(Inclusion.NON_NULL); + + CustomSerializerFactory serializerFactory = new CustomSerializerFactory(); + serializerFactory.addSpecificMapping(DateTime.class, + new DateTimeSerializer()); + serializerFactory.addSpecificMapping(LocalDate.class, + new LocalDateSerializer()); + serializerFactory.addGenericMapping(TimeZone.class, + new TimeZoneSerializer()); + serializerFactory.addSpecificMapping(Locale.class, + new LocaleSerializer()); + mapper.setSerializerFactory(serializerFactory); + + CustomDeserializerFactory deserializerFactory = new CustomDeserializerFactory(); + deserializerFactory.addSpecificMapping(DateTime.class, + new DateTimeDeserializer()); + deserializerFactory.addSpecificMapping(LocalDate.class, + new LocalDateDeserializer()); + deserializerFactory.addSpecificMapping(TimeZone.class, + new TimeZoneDeserializer()); + deserializerFactory.addSpecificMapping(Locale.class, + new LocaleDeserializer()); + mapper.setDeserializerProvider(new StdDeserializerProvider( + deserializerFactory)); + + return new CustomJacksonJsonProvider(mapper); + } + + public WebResource getFileResource(String path) { + return getFileResource(path, true); + } + + public WebResource getFileResource(String path, boolean secure) { + WebResource subResource = fileResource.path(path); + if (secure) { + subResource.addFilter(this.loginFilter); + } + + return subResource; + } + + public WebResource getApiResource(String path) { + return getApiResource(path, true); + } + + public WebResource getApiResource(String path, boolean secure) { + WebResource subResource = apiResource.path(path); + if (secure) { + subResource.addFilter(this.loginFilter); + } + + return subResource; + } +}