Commit 4fb9724d authored by Brian Long's avatar Brian Long
Browse files

massive refactoring for jaxrs

parent 410013c7
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.inteligr8.alfresco</groupId>
	<artifactId>aps-public-rest-api</artifactId>
	<version>1.0-v1-SNAPSHOT</version>
	<version>1.0-SNAPSHOT-v1</version>
	<name>Alfresco Process Services ReST API Client for Java</name>

	<properties>
@@ -18,8 +18,8 @@

		<junit.version>5.7.2</junit.version>
		<spring.version>5.2.14.RELEASE</spring.version>
		<spring-boot.version>2.3.10.RELEASE</spring-boot.version>
		<jersey.version>2.34</jersey.version>
		<cxf.version>3.3.2</cxf.version>
	</properties>

	<dependencies>
@@ -33,11 +33,33 @@
			<artifactId>jackson-databind</artifactId>
			<version>2.12.2</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.jaxrs</groupId>
			<artifactId>jackson-jaxrs-json-provider</artifactId>
			<version>2.12.2</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.29</version>
		</dependency>
		<dependency>
			<groupId>jakarta.ws.rs</groupId>
			<artifactId>jakarta.ws.rs-api</artifactId>
			<version>2.1.6</version>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.ext</groupId>
			<artifactId>jersey-proxy-client</artifactId>
			<version>${jersey.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-rs-client</artifactId>
			<version>${cxf.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-client</artifactId>
@@ -68,6 +90,12 @@
			<version>${spring.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.9</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	
	<build>
+50 −14
Original line number Diff line number Diff line
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();
	@Autowired
	private ApsClientConfiguration config;
	
	public static ApsClient getInstance() {
		return ApsClient.INSTANCE;
	protected ApsClientConfiguration getConfig() {
		return this.config;
	}
	
	public Client getClient() {
		ClientRequestFilter authFilter = this.config.getAuthorizationFilter();
		
		ClientBuilder clientBuilder = ClientBuilder.newBuilder()
				.register(new JacksonJaxbJsonProvider());
		if (authFilter != null)
			clientBuilder.register(authFilter);
		
	@Autowired
	private ApsClientConfiguration config;
		return clientBuilder.build();
	}

	public WebTarget getTarget() {
		return this.getClient()
				.target(this.config.getBaseUrl());
	}
	
	protected <T> T getApi(Class<T> 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 EnterpriseAPI getEnterpriseAPI() {
		javax.ws.rs.client.Client client = ClientBuilder
				.newClient();
	public ProfileApi getProfileApi() {
		return this.getApi(ProfileApi.class);
	}
	
		this.config.authorize(client);
		return new EnterpriseAPI(this.config.getBaseUrl() + "/api", client);
	public TasksApi getTasksApi() {
		return this.getApi(TasksApi.class);
	}

}
+12 −10
Original line number Diff line number Diff line
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;
		}
	}

+58 −0
Original line number Diff line number Diff line
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<Object> providersAndFilters = new LinkedList<Object>();
		providersAndFilters.add(new JacksonJaxbJsonProvider());
		
		ClientRequestFilter authFilter = this.getConfig().getAuthorizationFilter();
		if (authFilter != null)
			providersAndFilters.add(authFilter);
		
		return WebClient.create(this.getConfig().getBaseUrl(), providersAndFilters);
	}
	
	@Override
	protected <T> T getApi(Class<T> apiClass) {
		return JAXRSClientFactory.fromClient(this.getCxfClient(), apiClass);
	}

}
+40 −0
Original line number Diff line number Diff line
package com.inteligr8.alfresco.activiti;

import javax.ws.rs.ext.RuntimeDelegate;

import org.glassfish.jersey.client.proxy.WebResourceFactory;
import org.glassfish.jersey.internal.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;

/**
 * Alfresco Process Services Spring Client for Jersey
 */
@Component("apsClient.jersey")
@Lazy
public class ApsClientJerseyImpl extends ApsClient implements InitializingBean {
	
	private final Logger logger = LoggerFactory.getLogger(ApsClientJerseyImpl.class);
	
	@Override
	public void afterPropertiesSet() {
		if (RuntimeDelegate.getInstance() == null) {
			this.logger.info("Setting JAX-RS runtime delegate to the Jersey library");
			RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
		} else if (RuntimeDelegate.getInstance() instanceof RuntimeDelegateImpl) {
			this.logger.info("JAX-RS runtime delegate already the Jersey library");
		} else {
			this.logger.warn("Setting JAX-RS runtime delegate to the Jersey library; was: " + RuntimeDelegate.getInstance().getClass().getName());
			RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
		}
	}
	
	@Override
	protected <T> T getApi(Class<T> apiClass) {
		return WebResourceFactory.newResource(apiClass, this.getTarget());
	}

}
Loading