diff --git a/src/main/java/ar/com/fernandospr/wns/WnsService.java b/src/main/java/ar/com/fernandospr/wns/WnsService.java index 67cede1..c193d41 100644 --- a/src/main/java/ar/com/fernandospr/wns/WnsService.java +++ b/src/main/java/ar/com/fernandospr/wns/WnsService.java @@ -2,7 +2,10 @@ import java.util.List; +import javax.ws.rs.client.Client; + import ar.com.fernandospr.wns.client.WnsClient; +import ar.com.fernandospr.wns.client.WnsJerseyClientFactory; import ar.com.fernandospr.wns.client.WnsRawResourceBuilder; import ar.com.fernandospr.wns.client.WnsResourceBuilder; import ar.com.fernandospr.wns.client.WnsXmlResourceBuilder; @@ -28,7 +31,7 @@ public class WnsService { public WnsService(String sid, String clientSecret) { this(sid, clientSecret, false); } - + /** * @param sid * @param clientSecret @@ -37,30 +40,37 @@ public WnsService(String sid, String clientSecret) { public WnsService(String sid, String clientSecret, WnsProxyProperties proxyProperties) { this(sid, clientSecret, proxyProperties, false); } - + /** * @param sid * @param clientSecret * @param proxyProperties * @param logging true if System.out logging is needed */ - public WnsService(String sid, String clientSecret, WnsProxyProperties proxyProperties, boolean logging) { - this.client = new WnsClient(sid, clientSecret,proxyProperties, logging); - this.xmlResourceBuilder = new WnsXmlResourceBuilder(); - this.rawResourceBuilder = new WnsRawResourceBuilder(); + public WnsService(String sid, String clientSecret, WnsProxyProperties proxyProperties, boolean logging) { + this(sid, clientSecret, WnsJerseyClientFactory.createClient(logging, proxyProperties)); } - + /** * @param sid * @param clientSecret * @param logging true if System.out logging is needed */ public WnsService(String sid, String clientSecret, boolean logging) { - this.client = new WnsClient(sid, clientSecret, logging); + this(sid, clientSecret, WnsJerseyClientFactory.createClient(logging)); + } + + /** + * @param sid + * @param clientSecret + * @param client the JAX RS client to use for WNS communication + */ + public WnsService(String sid, String clientSecret, Client client) { + this.client = new WnsClient(sid, clientSecret, client); this.xmlResourceBuilder = new WnsXmlResourceBuilder(); this.rawResourceBuilder = new WnsRawResourceBuilder(); } - + /** * Pushes a tile to channelUri * @param channelUri diff --git a/src/main/java/ar/com/fernandospr/wns/client/WnsClient.java b/src/main/java/ar/com/fernandospr/wns/client/WnsClient.java index d4fd106..fc9e409 100644 --- a/src/main/java/ar/com/fernandospr/wns/client/WnsClient.java +++ b/src/main/java/ar/com/fernandospr/wns/client/WnsClient.java @@ -2,25 +2,16 @@ import java.util.ArrayList; import java.util.List; -import java.util.logging.Logger; import javax.ws.rs.client.*; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.Response; - import ar.com.fernandospr.wns.WnsProxyProperties; import ar.com.fernandospr.wns.exceptions.WnsException; import ar.com.fernandospr.wns.model.*; import ar.com.fernandospr.wns.model.types.WnsNotificationType; -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; -import com.fasterxml.jackson.jaxrs.xml.JacksonJaxbXMLProvider; -import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; -import org.glassfish.jersey.client.ClientConfig; -import org.glassfish.jersey.client.ClientProperties; -import org.glassfish.jersey.filter.LoggingFilter; -import org.glassfish.jersey.internal.util.collection.MultivaluedStringMap; - public class WnsClient { private static final String SCOPE = "notify.windows.com"; @@ -32,71 +23,24 @@ public class WnsClient { private WnsOAuthToken token; private Client client; - public WnsClient(String sid, String clientSecret, boolean logging) { - this.sid = sid; - this.clientSecret = clientSecret; - this.client = createClient(logging); + this(sid, clientSecret, WnsJerseyClientFactory.createClient(logging)); } - + public WnsClient(String sid, String clientSecret, WnsProxyProperties proxyProps, boolean logging) { + this(sid, clientSecret, WnsJerseyClientFactory.createClient(logging, proxyProps)); + } + + public WnsClient(String sid, String clientSecret, Client client) { this.sid = sid; this.clientSecret = clientSecret; - this.client = createClient(logging, proxyProps); + this.client = client; } protected String getAuthenticationUri() { return AUTHENTICATION_URI; } - private static Client createClient(boolean logging) { - ClientConfig clientConfig = new ClientConfig(JacksonJaxbXMLProvider.class, JacksonJsonProvider.class); - Client client = ClientBuilder.newClient(clientConfig); - - if (logging) { - LoggingFilter loggingFilter = new LoggingFilter( - Logger.getLogger(WnsClient.class.getName()), true); - - client = client.register(loggingFilter); - } - return client; - } - - private static Client createClient(boolean logging, WnsProxyProperties proxyProps) { - ClientConfig clientConfig = new ClientConfig(JacksonJaxbXMLProvider.class, JacksonJsonProvider.class) - .connectorProvider(new ApacheConnectorProvider()); - setProxyCredentials(clientConfig, proxyProps); - - Client client = ClientBuilder.newClient(clientConfig); - if (logging) { - LoggingFilter loggingFilter = new LoggingFilter( - Logger.getLogger(WnsClient.class.getName()), true); - - client = client.register(loggingFilter); - } - return client; - } - - private static void setProxyCredentials(ClientConfig clientConfig, WnsProxyProperties proxyProps) { - if (proxyProps != null) { - String proxyProtocol = proxyProps.getProtocol(); - String proxyHost = proxyProps.getHost(); - int proxyPort = proxyProps.getPort(); - String proxyUser = proxyProps.getUser(); - String proxyPass = proxyProps.getPass(); - - if ((proxyHost != null) && (!proxyHost.trim().isEmpty())) { - clientConfig.property(ClientProperties.PROXY_URI, proxyProtocol + "://" + proxyHost + ":" + proxyPort); - if (!proxyUser.trim().isEmpty()) { - clientConfig.property(ClientProperties.PROXY_PASSWORD, proxyPass); - clientConfig.property(ClientProperties.PROXY_USERNAME, proxyUser); - } - } - - } - - } - /** * Based on http://msdn.microsoft.com/en-us/library/windows/apps/hh465407.aspx * @@ -105,7 +49,7 @@ private static void setProxyCredentials(ClientConfig clientConfig, WnsProxyPrope public void refreshAccessToken() throws WnsException { WebTarget target = client.target(getAuthenticationUri()); - MultivaluedStringMap formData = new MultivaluedStringMap(); + MultivaluedHashMap formData = new MultivaluedHashMap(); formData.add("grant_type", GRANT_TYPE_CLIENT_CREDENTIALS); formData.add("client_id", this.sid); formData.add("client_secret", this.clientSecret); diff --git a/src/main/java/ar/com/fernandospr/wns/client/WnsJerseyClientFactory.java b/src/main/java/ar/com/fernandospr/wns/client/WnsJerseyClientFactory.java new file mode 100644 index 0000000..7fdbb2c --- /dev/null +++ b/src/main/java/ar/com/fernandospr/wns/client/WnsJerseyClientFactory.java @@ -0,0 +1,66 @@ +package ar.com.fernandospr.wns.client; + +import java.util.logging.Logger; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; + +import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.client.ClientProperties; +import org.glassfish.jersey.filter.LoggingFilter; + +import ar.com.fernandospr.wns.WnsProxyProperties; + +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; +import com.fasterxml.jackson.jaxrs.xml.JacksonJaxbXMLProvider; + +public class WnsJerseyClientFactory { + public static Client createClient(boolean logging) { + ClientConfig clientConfig = new ClientConfig(JacksonJaxbXMLProvider.class, JacksonJsonProvider.class); + Client client = ClientBuilder.newClient(clientConfig); + + if (logging) { + LoggingFilter loggingFilter = new LoggingFilter( + Logger.getLogger(WnsClient.class.getName()), true); + + client = client.register(loggingFilter); + } + return client; + } + + public static Client createClient(boolean logging, WnsProxyProperties proxyProps) { + ClientConfig clientConfig = new ClientConfig(JacksonJaxbXMLProvider.class, JacksonJsonProvider.class) + .connectorProvider(new ApacheConnectorProvider()); + setProxyCredentials(clientConfig, proxyProps); + + Client client = ClientBuilder.newClient(clientConfig); + if (logging) { + LoggingFilter loggingFilter = new LoggingFilter( + Logger.getLogger(WnsClient.class.getName()), true); + + client = client.register(loggingFilter); + } + return client; + } + + private static void setProxyCredentials(ClientConfig clientConfig, WnsProxyProperties proxyProps) { + if (proxyProps != null) { + String proxyProtocol = proxyProps.getProtocol(); + String proxyHost = proxyProps.getHost(); + int proxyPort = proxyProps.getPort(); + String proxyUser = proxyProps.getUser(); + String proxyPass = proxyProps.getPass(); + + if ((proxyHost != null) && (!proxyHost.trim().isEmpty())) { + clientConfig.property(ClientProperties.PROXY_URI, proxyProtocol + "://" + proxyHost + ":" + proxyPort); + if (!proxyUser.trim().isEmpty()) { + clientConfig.property(ClientProperties.PROXY_PASSWORD, proxyPass); + clientConfig.property(ClientProperties.PROXY_USERNAME, proxyUser); + } + } + + } + + } +}