diff --git a/pom.xml b/pom.xml
index f7785b9..2633a82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.inteligr8.alfresco
aps-public-rest-api
- 1.0-v1-SNAPSHOT
+ 1.0-SNAPSHOT-v1
Alfresco Process Services ReST API Client for Java
@@ -18,8 +18,8 @@
5.7.2
5.2.14.RELEASE
- 2.3.10.RELEASE
2.34
+ 3.3.2
@@ -33,11 +33,33 @@
jackson-databind
2.12.2
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ 2.12.2
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.29
+
jakarta.ws.rs
jakarta.ws.rs-api
2.1.6
+
+ org.glassfish.jersey.ext
+ jersey-proxy-client
+ ${jersey.version}
+ provided
+
+
+ org.apache.cxf
+ cxf-rt-rs-client
+ ${cxf.version}
+ provided
+
org.glassfish.jersey.core
jersey-client
@@ -68,6 +90,12 @@
${spring.version}
test
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.9
+ test
+
diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsClient.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsClient.java
index d5ce59b..9b10b5b 100644
--- a/src/main/java/com/inteligr8/alfresco/activiti/ApsClient.java
+++ b/src/main/java/com/inteligr8/alfresco/activiti/ApsClient.java
@@ -1,35 +1,71 @@
package com.inteligr8.alfresco.activiti;
+import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.ClientRequestFilter;
+import javax.ws.rs.client.WebTarget;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import com.inteligr8.alfresco.activiti.api.EnterpriseAPI;
+import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
+import com.inteligr8.alfresco.activiti.api.AdminApi;
+import com.inteligr8.alfresco.activiti.api.AppVersionApi;
+import com.inteligr8.alfresco.activiti.api.ProcessInstancesApi;
+import com.inteligr8.alfresco.activiti.api.ProfileApi;
+import com.inteligr8.alfresco.activiti.api.TasksApi;
/**
- * Afresco Process Services Spring Client
+ * Alfresco Process Services Spring Client
*/
-@Component
+@Component("apsClient")
public class ApsClient {
- private static final ApsClient INSTANCE = new ApsClient();
-
- public static ApsClient getInstance() {
- return ApsClient.INSTANCE;
- }
-
-
-
@Autowired
private ApsClientConfiguration config;
- public EnterpriseAPI getEnterpriseAPI() {
- javax.ws.rs.client.Client client = ClientBuilder
- .newClient();
+ protected ApsClientConfiguration getConfig() {
+ return this.config;
+ }
+
+ public Client getClient() {
+ ClientRequestFilter authFilter = this.config.getAuthorizationFilter();
- this.config.authorize(client);
- return new EnterpriseAPI(this.config.getBaseUrl() + "/api", client);
+ ClientBuilder clientBuilder = ClientBuilder.newBuilder()
+ .register(new JacksonJaxbJsonProvider());
+ if (authFilter != null)
+ clientBuilder.register(authFilter);
+
+ return clientBuilder.build();
+ }
+
+ public WebTarget getTarget() {
+ return this.getClient()
+ .target(this.config.getBaseUrl());
+ }
+
+ protected T getApi(Class apiClass) {
+ throw new UnsupportedOperationException();
+ }
+
+ public AdminApi getAdminApi() {
+ return this.getApi(AdminApi.class);
+ }
+
+ public AppVersionApi getAppVersionApi() {
+ return this.getApi(AppVersionApi.class);
+ }
+
+ public ProcessInstancesApi getProcessInstancesApi() {
+ return this.getApi(ProcessInstancesApi.class);
+ }
+
+ public ProfileApi getProfileApi() {
+ return this.getApi(ProfileApi.class);
+ }
+
+ public TasksApi getTasksApi() {
+ return this.getApi(TasksApi.class);
}
}
diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java
index 3ef1e4c..6b39ac1 100644
--- a/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java
+++ b/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java
@@ -1,6 +1,6 @@
package com.inteligr8.alfresco.activiti;
-import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientRequestFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
@@ -10,27 +10,29 @@ import org.springframework.context.annotation.Configuration;
@ComponentScan
public class ApsClientConfiguration {
- @Value("${process.service.baseUrl}")
+ @Value("${process.service.baseUrl:http://localhost:8080/activiti-app}")
private String baseUrl;
- @Value("${process.service.security.basicAuth.username}")
+ @Value("${process.service.security.basicAuth.username:admin@app.activiti.com}")
private String basicAuthUsername;
- @Value("${process.service.security.basicAuth.password}")
+ @Value("${process.service.security.basicAuth.password:admin}")
private String basicAuthPassword;
- @Value("${process.service.security.accessToken}")
+ @Value("${process.service.security.accessToken:#{null}}")
private String accessToken;
public String getBaseUrl() {
return this.baseUrl;
}
- public void authorize(Client client) {
- if (this.basicAuthUsername != null) {
- client.register(new BasicAuthRequestFilter(this.basicAuthUsername, this.basicAuthPassword));
- } else if (this.accessToken != null) {
- client.register(new AccessTokenRequestFilter(this.accessToken));
+ public ClientRequestFilter getAuthorizationFilter() {
+ if (this.accessToken != null) {
+ return new AccessTokenRequestFilter(this.accessToken);
+ } else if (this.basicAuthUsername != null) {
+ return new BasicAuthRequestFilter(this.basicAuthUsername, this.basicAuthPassword);
+ } else {
+ return null;
}
}
diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java
new file mode 100644
index 0000000..0d7636c
--- /dev/null
+++ b/src/main/java/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java
@@ -0,0 +1,58 @@
+package com.inteligr8.alfresco.activiti;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.ws.rs.client.ClientRequestFilter;
+import javax.ws.rs.ext.RuntimeDelegate;
+
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
+
+/**
+ * Alfresco Process Services Spring Client for CXF
+ */
+@Component("apsClient.cxf")
+@Lazy
+public class ApsClientCxfImpl extends ApsClient implements InitializingBean {
+
+ private final Logger logger = LoggerFactory.getLogger(ApsClientCxfImpl.class);
+
+ @Override
+ public void afterPropertiesSet() {
+ if (RuntimeDelegate.getInstance() == null) {
+ this.logger.info("Setting JAX-RS runtime delegate to the CXF library");
+ RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
+ } else if (RuntimeDelegate.getInstance() instanceof RuntimeDelegateImpl) {
+ this.logger.info("JAX-RS runtime delegate already the CXF library");
+ } else {
+ this.logger.warn("Setting JAX-RS runtime delegate to the CXF library; was: " + RuntimeDelegate.getInstance().getClass().getName());
+ RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
+ }
+ }
+
+ public WebClient getCxfClient() {
+ List