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);
+ }
+ }
+
+ }
+
+ }
+}