diff --git a/pom.xml b/pom.xml
index 6075387..5e3d82c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,6 +20,7 @@
5.7.2
5.2.14.RELEASE
2.34
+ 3.3.2
@@ -49,11 +50,28 @@
jackson-databind
2.12.2
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ 2.12.2
+
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
@@ -72,12 +90,6 @@
${jersey.version}
test
-
- org.glassfish.jersey.ext
- jersey-proxy-client
- ${jersey.version}
- test
-
org.junit.jupiter
junit-jupiter-api
@@ -90,6 +102,12 @@
${spring.version}
test
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.9
+ test
+
diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsClient.java b/src/main/java/com/inteligr8/alfresco/acs/AcsClient.java
index dbd10c1..728911c 100644
--- a/src/main/java/com/inteligr8/alfresco/acs/AcsClient.java
+++ b/src/main/java/com/inteligr8/alfresco/acs/AcsClient.java
@@ -2,34 +2,170 @@ package com.inteligr8.alfresco.acs;
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.fasterxml.jackson.core.util.JacksonFeature;
+import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
+import com.inteligr8.alfresco.acs.api.ActionsApi;
+import com.inteligr8.alfresco.acs.api.ActivitiesApi;
+import com.inteligr8.alfresco.acs.api.AspectsApi;
+import com.inteligr8.alfresco.acs.api.AuditApi;
+import com.inteligr8.alfresco.acs.api.AuthenticationApi;
+import com.inteligr8.alfresco.acs.api.CommentsApi;
+import com.inteligr8.alfresco.acs.api.DiscoveryApi;
+import com.inteligr8.alfresco.acs.api.DownloadsApi;
+import com.inteligr8.alfresco.acs.api.FavoritesApi;
+import com.inteligr8.alfresco.acs.api.GroupsApi;
+import com.inteligr8.alfresco.acs.api.NetworksApi;
+import com.inteligr8.alfresco.acs.api.NodesApi;
+import com.inteligr8.alfresco.acs.api.PeopleApi;
+import com.inteligr8.alfresco.acs.api.PreferencesApi;
+import com.inteligr8.alfresco.acs.api.ProbesApi;
+import com.inteligr8.alfresco.acs.api.QueriesApi;
+import com.inteligr8.alfresco.acs.api.RatingsApi;
+import com.inteligr8.alfresco.acs.api.RenditionsApi;
+import com.inteligr8.alfresco.acs.api.SearchApi;
+import com.inteligr8.alfresco.acs.api.SharedLinksApi;
+import com.inteligr8.alfresco.acs.api.SitesApi;
+import com.inteligr8.alfresco.acs.api.TagsApi;
+import com.inteligr8.alfresco.acs.api.TrashcanApi;
+import com.inteligr8.alfresco.acs.api.TypesApi;
+import com.inteligr8.alfresco.acs.api.VersionsApi;
/**
* Afresco Content Services Spring Client
*/
-@Component
+@Component("acsClient")
public class AcsClient {
@Autowired
private AcsClientConfiguration config;
+ protected AcsClientConfiguration getConfig() {
+ return this.config;
+ }
+
public Client getClient() {
- Client client = ClientBuilder.newBuilder()
- .register(JacksonFeature.class)
- .build();
+ ClientRequestFilter authFilter = this.config.getAuthorizationFilter();
- this.config.authorize(client);
- return 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 ActionsApi getActionsApi() {
+ return this.getApi(ActionsApi.class);
+ }
+
+ public ActivitiesApi getActivitiesApi() {
+ return this.getApi(ActivitiesApi.class);
+ }
+
+ public AspectsApi getAspectsApi() {
+ return this.getApi(AspectsApi.class);
+ }
+
+ public AuditApi getAuditApi() {
+ return this.getApi(AuditApi.class);
+ }
+
+ public AuthenticationApi getAuthenticationApi() {
+ return this.getApi(AuthenticationApi.class);
+ }
+
+ public CommentsApi getCommentsApi() {
+ return this.getApi(CommentsApi.class);
+ }
+
+ public DiscoveryApi getDiscoveryApi() {
+ return this.getApi(DiscoveryApi.class);
+ }
+
+ public DownloadsApi getDownloadsApi() {
+ return this.getApi(DownloadsApi.class);
+ }
+
+ public FavoritesApi getFavoritesApi() {
+ return this.getApi(FavoritesApi.class);
+ }
+
+ public GroupsApi getGroupsApi() {
+ return this.getApi(GroupsApi.class);
+ }
+
+ public NetworksApi getNetworksApi() {
+ return this.getApi(NetworksApi.class);
+ }
+
+ public NodesApi getNodesApi() {
+ return this.getApi(NodesApi.class);
+ }
+
+ public PeopleApi getPeopleApi() {
+ return this.getApi(PeopleApi.class);
+ }
+
+ public PreferencesApi getPreferencesApi() {
+ return this.getApi(PreferencesApi.class);
+ }
+
+ public ProbesApi getProbesApi() {
+ return this.getApi(ProbesApi.class);
+ }
+
+ public QueriesApi getQueriesApi() {
+ return this.getApi(QueriesApi.class);
+ }
+
+ public RatingsApi getRatingsApi() {
+ return this.getApi(RatingsApi.class);
+ }
+
+ public RenditionsApi getRenditionsApi() {
+ return this.getApi(RenditionsApi.class);
+ }
+
+ public SearchApi getSearchApi() {
+ return this.getApi(SearchApi.class);
+ }
+
+ public SharedLinksApi getSharedLinksApi() {
+ return this.getApi(SharedLinksApi.class);
+ }
+
+ public SitesApi getSitesApi() {
+ return this.getApi(SitesApi.class);
+ }
+
+ public TagsApi getTagsApi() {
+ return this.getApi(TagsApi.class);
+ }
+
+ public TrashcanApi getTrashcanApi() {
+ return this.getApi(TrashcanApi.class);
+ }
+
+ public TypesApi getTypesApi() {
+ return this.getApi(TypesApi.class);
+ }
+
+ public VersionsApi getVersionsApi() {
+ return this.getApi(VersionsApi.class);
+ }
}
diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsClientConfiguration.java b/src/main/java/com/inteligr8/alfresco/acs/AcsClientConfiguration.java
index 857ca8e..ff3a402 100644
--- a/src/main/java/com/inteligr8/alfresco/acs/AcsClientConfiguration.java
+++ b/src/main/java/com/inteligr8/alfresco/acs/AcsClientConfiguration.java
@@ -1,6 +1,6 @@
package com.inteligr8.alfresco.acs;
-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;
@@ -19,18 +19,20 @@ public class AcsClientConfiguration {
@Value("${content.service.security.basicAuth.password:admin}")
private String basicAuthPassword;
- @Value("${content.service.security.accessToken}")
+ @Value("${content.service.security.accessToken:#{null}}")
private String accessToken;
public String getBaseUrl() {
return this.baseUrl;
}
- public void authorize(Client client) {
+ public ClientRequestFilter getAuthorizationFilter() {
if (this.accessToken != null) {
- client.register(new AccessTokenRequestFilter(this.accessToken));
+ return new AccessTokenRequestFilter(this.accessToken);
} else if (this.basicAuthUsername != null) {
- client.register(new BasicAuthRequestFilter(this.basicAuthUsername, this.basicAuthPassword));
+ return new BasicAuthRequestFilter(this.basicAuthUsername, this.basicAuthPassword);
+ } else {
+ return null;
}
}
diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsClientCxfImpl.java b/src/main/java/com/inteligr8/alfresco/acs/AcsClientCxfImpl.java
new file mode 100644
index 0000000..2dc699a
--- /dev/null
+++ b/src/main/java/com/inteligr8/alfresco/acs/AcsClientCxfImpl.java
@@ -0,0 +1,58 @@
+package com.inteligr8.alfresco.acs;
+
+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;
+
+/**
+ * Afresco Content Services Spring Client for CXF
+ */
+@Component("acsClient.cxf")
+@Lazy
+public class AcsClientCxfImpl extends AcsClient implements InitializingBean {
+
+ private final Logger logger = LoggerFactory.getLogger(AcsClientCxfImpl.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