This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_1_X by this push:
new a3d4016 Bump upgrades: CXF, Camel, OpenJPA, Elasticsearch, Tycho,
cargo-maven2-plugin (#270)
a3d4016 is described below
commit a3d401632abcf53e40b7c02ad7cd60683db07999
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Fri May 28 16:33:19 2021 +0200
Bump upgrades: CXF, Camel, OpenJPA, Elasticsearch, Tycho,
cargo-maven2-plugin (#270)
---
client/cli/LICENSE | 10 +-
client/cli/NOTICE | 11 +-
.../org/apache/syncope/core/logic/GroupLogic.java | 14 +-
.../jpa/content/XMLContentExporter.java | 4 +-
deb/console/LICENSE | 10 +-
deb/console/NOTICE | 11 +-
deb/core/LICENSE | 10 +-
deb/core/NOTICE | 11 +-
deb/enduser/LICENSE | 10 +-
deb/enduser/NOTICE | 11 +-
.../client/ElasticsearchClientFactoryBean.java | 75 +++++++-
.../client/ElasticsearchIndexManager.java | 93 ++++++++-
.../elasticsearch/client/ElasticsearchUtils.java | 41 ++--
.../main/resources/elasticsearchClientContext.xml | 8 +-
ext/elasticsearch/persistence-jpa/pom.xml | 2 +-
.../jpa/dao/ElasticsearchAnySearchDAO.java | 29 ++-
.../src/main/resources/persistence.properties | 1 -
.../jpa/dao/ElasticsearchAnySearchDAOTest.java | 38 ++--
.../java/job/ElasticsearchReindex.java | 145 ++++++--------
fit/build-tools/LICENSE | 12 +-
fit/build-tools/NOTICE | 11 +-
fit/build-tools/pom.xml | 2 +-
fit/core-reference/pom.xml | 2 +-
ide/eclipse/LICENSE | 11 +-
ide/eclipse/NOTICE | 5 +-
.../META-INF/MANIFEST.MF | 2 +-
.../build.properties | 2 +-
ide/netbeans/LICENSE | 214 ++++++++++++++++++++-
ide/netbeans/NOTICE | 5 +-
pom.xml | 20 +-
.../systemadministration/javaeecontainer.adoc | 2 +-
standalone/LICENSE | 12 +-
standalone/NOTICE | 11 +-
33 files changed, 605 insertions(+), 240 deletions(-)
diff --git a/client/cli/LICENSE b/client/cli/LICENSE
index f91d287..eb607cf 100644
--- a/client/cli/LICENSE
+++ b/client/cli/LICENSE
@@ -427,6 +427,11 @@ any resulting litigation.
==
+For Eclipse Project for JAX-RS
(https://projects.eclipse.org/projects/ee4j.jaxrs):
+This is licensed under the EPL 1.0, see above.
+
+==
+
For Jakarta XML Binding (https://eclipse-ee4j.github.io/jaxb-ri/):
This is licensed under the EPL 1.0, see above.
@@ -823,11 +828,6 @@ This is licensed under the AL 2.0, see above.
==
-For javax.ws.rs-api (https://jax-rs-spec.java.net/):
-This is licensed under the CDDL 1.0, see above.
-
-==
-
For StAX2 API (http://wiki.fasterxml.com/WoodstoxStax2):
This is licensed under the BSD license:
diff --git a/client/cli/NOTICE b/client/cli/NOTICE
index 31a3d80..adb285a 100644
--- a/client/cli/NOTICE
+++ b/client/cli/NOTICE
@@ -23,6 +23,12 @@ Copyright (c) 2019, 2020 Eclipse Foundation. All rights
reserved.
==
+This product includes software developed by the Eclipse Project for JAX-RS.
+Eclipse Project for JAX-RS is a trademark of the Eclipse Foundation.
+All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.
+
+==
+
This product includes software developed by the Eclipse Foundation.
Copyright (c) 2019, 2020 Eclipse Foundation. All rights reserved.
@@ -38,11 +44,6 @@ Copyright (c) Red Hat, Inc., Emmanuel Bernard
==
-This product includes software developed by the JAX-RS project.
-Copyright (c) 2014, Oracle Corporation and/or its affiliates. All rights
reserved.
-
-==
-
This product includes software developed by the Stax 2 Extension API Project.
==
diff --git
a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index 9ee8ed8..4aa83ef 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -379,13 +379,13 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO,
GroupPatch> {
Implementation jobDelegate =
implementationDAO.find(ImplementationType.TASKJOB_DELEGATE).stream().
filter(impl ->
GroupMemberProvisionTaskJobDelegate.class.getName().equals(impl.getBody())).
findFirst().orElseGet(() -> {
- Implementation caz =
entityFactory.newEntity(Implementation.class);
-
caz.setKey(GroupMemberProvisionTaskJobDelegate.class.getSimpleName());
- caz.setEngine(ImplementationEngine.JAVA);
- caz.setType(ImplementationType.TASKJOB_DELEGATE);
-
caz.setBody(GroupMemberProvisionTaskJobDelegate.class.getName());
- caz = implementationDAO.save(caz);
- return caz;
+ Implementation groupMemberProvision =
entityFactory.newEntity(Implementation.class);
+
groupMemberProvision.setKey(GroupMemberProvisionTaskJobDelegate.class.getSimpleName());
+ groupMemberProvision.setEngine(ImplementationEngine.JAVA);
+
groupMemberProvision.setType(ImplementationType.TASKJOB_DELEGATE);
+
groupMemberProvision.setBody(GroupMemberProvisionTaskJobDelegate.class.getName());
+ groupMemberProvision =
implementationDAO.save(groupMemberProvision);
+ return groupMemberProvision;
});
SchedTask task = entityFactory.newEntity(SchedTask.class);
diff --git
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
index c047755..4bec47e 100644
---
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
+++
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
@@ -65,8 +65,8 @@ import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
-import org.apache.commons.collections4.BidiMap;
-import org.apache.commons.collections4.bidimap.DualHashBidiMap;
+import org.apache.openjpa.lib.util.collections.BidiMap;
+import org.apache.openjpa.lib.util.collections.DualHashBidiMap;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
diff --git a/deb/console/LICENSE b/deb/console/LICENSE
index d61d994..3991144 100644
--- a/deb/console/LICENSE
+++ b/deb/console/LICENSE
@@ -536,6 +536,11 @@ any resulting litigation.
==
+For Eclipse Project for JAX-RS
(https://projects.eclipse.org/projects/ee4j.jaxrs):
+This is licensed under the EPL 1.0, see above.
+
+==
+
For Jakarta XML Binding (https://eclipse-ee4j.github.io/jaxb-ri/):
This is licensed under the EPL 1.0, see above.
@@ -932,11 +937,6 @@ This is licensed under the AL 2.0, see above.
==
-For javax.ws.rs-api (https://jax-rs-spec.java.net/):
-This is licensed under the CDDL 1.0, see above.
-
-==
-
For Joda Time (http://www.joda.org/joda-time/):
This is licensed under the AL 2.0, see above.
diff --git a/deb/console/NOTICE b/deb/console/NOTICE
index c225d43..9c4cb6c 100644
--- a/deb/console/NOTICE
+++ b/deb/console/NOTICE
@@ -106,6 +106,12 @@ Copyright (c) 2019, 2020 Eclipse Foundation. All rights
reserved.
==
+This product includes software developed by the Eclipse Project for JAX-RS.
+Eclipse Project for JAX-RS is a trademark of the Eclipse Foundation.
+All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.
+
+==
+
This product includes software developed by the Eclipse Foundation.
Copyright (c) 2019, 2020 Eclipse Foundation. All rights reserved.
@@ -121,11 +127,6 @@ Copyright (c) Red Hat, Inc., Emmanuel Bernard
==
-This product includes software developed by the JAX-RS project.
-Copyright (c) 2014, Oracle Corporation and/or its affiliates. All rights
reserved.
-
-==
-
This product includes software developed by the Joda Time project.
Copyright (c) 2002-2016 Joda.org. All Rights Reserved.
diff --git a/deb/core/LICENSE b/deb/core/LICENSE
index eaa46a3..5ec1212 100644
--- a/deb/core/LICENSE
+++ b/deb/core/LICENSE
@@ -907,6 +907,11 @@ any resulting litigation.
==
+For Eclipse Project for JAX-RS
(https://projects.eclipse.org/projects/ee4j.jaxrs):
+This is licensed under the EPL 1.0, see above.
+
+==
+
For Jakarta XML Binding (https://eclipse-ee4j.github.io/jaxb-ri/):
This is licensed under the EPL 1.0, see above.
@@ -922,11 +927,6 @@ This is licensed under the AL 2.0, see above.
==
-For javax.ws.rs-api (https://jax-rs-spec.java.net/):
-This is licensed under the CDDL 1.0, see above.
-
-==
-
For Joda Time (http://www.joda.org/joda-time/):
This is licensed under the AL 2.0, see above.
diff --git a/deb/core/NOTICE b/deb/core/NOTICE
index 84f79a0..e93e5e1 100644
--- a/deb/core/NOTICE
+++ b/deb/core/NOTICE
@@ -74,6 +74,12 @@ Copyright (c) 2019, 2020 Eclipse Foundation. All rights
reserved.
==
+This product includes software developed by the Eclipse Project for JAX-RS.
+Eclipse Project for JAX-RS is a trademark of the Eclipse Foundation.
+All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.
+
+==
+
This product includes software developed by the Eclipse Foundation.
Copyright (c) 2019, 2020 Eclipse Foundation. All rights reserved.
@@ -89,11 +95,6 @@ Copyright (c) Red Hat, Inc., Emmanuel Bernard
==
-This product includes software developed by the JAX-RS project.
-Copyright (c) 2014, Oracle Corporation and/or its affiliates. All rights
reserved.
-
-==
-
This product includes software developed by the Joda Time project.
Copyright (c) 2002-2016 Joda.org. All Rights Reserved.
diff --git a/deb/enduser/LICENSE b/deb/enduser/LICENSE
index ebaacd5..04f5be8 100644
--- a/deb/enduser/LICENSE
+++ b/deb/enduser/LICENSE
@@ -476,6 +476,11 @@ any resulting litigation.
==
+For Eclipse Project for JAX-RS
(https://projects.eclipse.org/projects/ee4j.jaxrs):
+This is licensed under the EPL 1.0, see above.
+
+==
+
For Jakarta XML Binding (https://eclipse-ee4j.github.io/jaxb-ri/):
This is licensed under the EPL 1.0, see above.
@@ -872,11 +877,6 @@ This is licensed under the AL 2.0, see above.
==
-For javax.ws.rs-api (https://jax-rs-spec.java.net/):
-This is licensed under the CDDL 1.0, see above.
-
-==
-
For jQuery (http://jquery.com/):
This is licensed under the MIT license, see above.
diff --git a/deb/enduser/NOTICE b/deb/enduser/NOTICE
index a7291ad..44ba8f8 100644
--- a/deb/enduser/NOTICE
+++ b/deb/enduser/NOTICE
@@ -47,6 +47,12 @@ Copyright (c) 2019, 2020 Eclipse Foundation. All rights
reserved.
==
+This product includes software developed by the Eclipse Project for JAX-RS.
+Eclipse Project for JAX-RS is a trademark of the Eclipse Foundation.
+All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.
+
+==
+
This product includes software developed by the Eclipse Foundation.
Copyright (c) 2019, 2020 Eclipse Foundation. All rights reserved.
@@ -62,11 +68,6 @@ Copyright (c) Red Hat, Inc., Emmanuel Bernard
==
-This product includes software developed by the JAX-RS project.
-Copyright (c) 2014, Oracle Corporation and/or its affiliates. All rights
reserved.
-
-==
-
This product includes the jQuery Core JavaScript Library.
Copyright 2007, 2016 jQuery Foundation and other contributors.
diff --git
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchClientFactoryBean.java
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchClientFactoryBean.java
index b357439..39246a9 100644
---
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchClientFactoryBean.java
+++
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchClientFactoryBean.java
@@ -18,9 +18,19 @@
*/
package org.apache.syncope.ext.elasticsearch.client;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
import java.util.List;
+import org.apache.http.Header;
+import org.apache.http.HttpHeaders;
import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.message.BasicHeader;
import org.elasticsearch.client.RestClient;
+import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
@@ -32,17 +42,74 @@ public class ElasticsearchClientFactoryBean implements
FactoryBean<RestHighLevel
private final List<HttpHost> hosts;
+ private String username;
+
+ private String password;
+
+ private String serviceToken;
+
+ private String apiKeyId;
+
+ private String apiKeySecret;
+
private RestHighLevelClient client;
public ElasticsearchClientFactoryBean(final List<HttpHost> hosts) {
this.hosts = hosts;
}
+ public void setUsername(final String username) {
+ this.username = username;
+ }
+
+ public void setPassword(final String password) {
+ this.password = password;
+ }
+
+ public String getServiceToken() {
+ return serviceToken;
+ }
+
+ public void setServiceToken(final String serviceToken) {
+ this.serviceToken = serviceToken;
+ }
+
+ public String getApiKeyId() {
+ return apiKeyId;
+ }
+
+ public void setApiKeyId(final String apiKeyId) {
+ this.apiKeyId = apiKeyId;
+ }
+
+ public String getApiKeySecret() {
+ return apiKeySecret;
+ }
+
+ public void setApiKeySecret(final String apiKeySecret) {
+ this.apiKeySecret = apiKeySecret;
+ }
+
@Override
public RestHighLevelClient getObject() throws Exception {
synchronized (this) {
if (client == null) {
- client = new
RestHighLevelClient(RestClient.builder(hosts.toArray(new HttpHost[0])));
+ RestClientBuilder restClient =
RestClient.builder(hosts.toArray(new HttpHost[0]));
+ if (username != null && password != null) {
+ CredentialsProvider credentialsProvider = new
BasicCredentialsProvider();
+ credentialsProvider.setCredentials(
+ AuthScope.ANY, new
UsernamePasswordCredentials(username, password));
+ restClient.setHttpClientConfigCallback(b ->
b.setDefaultCredentialsProvider(credentialsProvider));
+ } else if (serviceToken != null) {
+ restClient.setDefaultHeaders(
+ new Header[] { new
BasicHeader(HttpHeaders.AUTHORIZATION, "Bearer " + serviceToken) });
+ } else if (apiKeyId != null && apiKeySecret != null) {
+ String apiKeyAuth = Base64.getEncoder().encodeToString(
+ (apiKeyId + ":" +
apiKeySecret).getBytes(StandardCharsets.UTF_8));
+ restClient.setDefaultHeaders(
+ new Header[] { new
BasicHeader(HttpHeaders.AUTHORIZATION, "ApiKey " + apiKeyAuth) });
+ }
+ client = new RestHighLevelClient(restClient);
}
}
return client;
@@ -54,15 +121,9 @@ public class ElasticsearchClientFactoryBean implements
FactoryBean<RestHighLevel
}
@Override
- public boolean isSingleton() {
- return true;
- }
-
- @Override
public void destroy() throws Exception {
if (client != null) {
client.close();
}
}
-
}
diff --git
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java
index 914e951..69ebe5a 100644
---
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java
+++
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java
@@ -19,19 +19,29 @@
package org.apache.syncope.ext.elasticsearch.client;
import java.io.IOException;
+import java.util.concurrent.ExecutionException;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.provisioning.api.event.AnyCreatedUpdatedEvent;
import org.apache.syncope.core.provisioning.api.event.AnyDeletedEvent;
+import org.apache.syncope.core.spring.security.AuthContextUtils;
+import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
+import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.client.indices.CreateIndexRequest;
+import org.elasticsearch.client.indices.CreateIndexResponse;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.elasticsearch.common.xcontent.XContentFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -50,19 +60,85 @@ public class ElasticsearchIndexManager {
@Autowired
private ElasticsearchUtils elasticsearchUtils;
+ public boolean existsIndex(final String domain, final AnyTypeKind kind)
throws IOException {
+ return client.indices().exists(
+ new
GetIndexRequest(ElasticsearchUtils.getContextDomainName(domain, kind)),
RequestOptions.DEFAULT);
+ }
+
+ public XContentBuilder defaultSettings() throws IOException {
+ return XContentFactory.jsonBuilder().
+ startObject().
+ startObject("analysis").
+ startObject("normalizer").
+ startObject("string_lowercase").
+ field("type", "custom").
+ field("char_filter", new Object[0]).
+ field("filter").
+ startArray().
+ value("lowercase").
+ endArray().
+ endObject().
+ endObject().
+ endObject().
+ startObject("index").
+ field("number_of_shards",
elasticsearchUtils.getNumberOfShards()).
+ field("number_of_replicas",
elasticsearchUtils.getNumberOfReplicas()).
+ endObject().
+ endObject();
+ }
+
+ public XContentBuilder defaultMapping() throws IOException {
+ return XContentFactory.jsonBuilder().
+ startObject().
+ startArray("dynamic_templates").
+ startObject().
+ startObject("strings").
+ field("match_mapping_type", "string").
+ startObject("mapping").
+ field("type", "keyword").
+ field("normalizer", "string_lowercase").
+ endObject().
+ endObject().
+ endObject().
+ endArray().
+ endObject();
+ }
+
+ public void createIndex(
+ final String domain,
+ final AnyTypeKind kind,
+ final XContentBuilder settings,
+ final XContentBuilder mapping)
+ throws InterruptedException, ExecutionException, IOException {
+
+ CreateIndexResponse response = client.indices().create(
+ new
CreateIndexRequest(ElasticsearchUtils.getContextDomainName(domain, kind)).
+ settings(settings).
+ mapping(mapping), RequestOptions.DEFAULT);
+ LOG.debug("Successfully created {} for {}: {}",
+ ElasticsearchUtils.getContextDomainName(domain, kind),
kind.name(), response);
+ }
+
+ public void removeIndex(final String domain, final AnyTypeKind kind)
throws IOException {
+ AcknowledgedResponse acknowledgedResponse = client.indices().delete(
+ new
DeleteIndexRequest(ElasticsearchUtils.getContextDomainName(domain, kind)),
RequestOptions.DEFAULT);
+ LOG.debug("Successfully removed {}: {}",
+ ElasticsearchUtils.getContextDomainName(domain, kind),
acknowledgedResponse);
+ }
+
@TransactionalEventListener
public void after(final AnyCreatedUpdatedEvent<Any<?>> event) throws
IOException {
GetRequest getRequest = new GetRequest(
-
elasticsearchUtils.getContextDomainName(event.getAny().getType().getKind()),
- event.getAny().getType().getKind().name(),
+ ElasticsearchUtils.getContextDomainName(
+ AuthContextUtils.getDomain(),
event.getAny().getType().getKind()),
event.getAny().getKey());
GetResponse getResponse = client.get(getRequest,
RequestOptions.DEFAULT);
if (getResponse.isExists()) {
LOG.debug("About to update index for {}", event.getAny());
UpdateRequest request = new UpdateRequest(
-
elasticsearchUtils.getContextDomainName(event.getAny().getType().getKind()),
- event.getAny().getType().getKind().name(),
+ ElasticsearchUtils.getContextDomainName(
+ AuthContextUtils.getDomain(),
event.getAny().getType().getKind()),
event.getAny().getKey()).
retryOnConflict(elasticsearchUtils.getRetryOnConflict()).
doc(elasticsearchUtils.builder(event.getAny()));
@@ -72,9 +148,9 @@ public class ElasticsearchIndexManager {
LOG.debug("About to create index for {}", event.getAny());
IndexRequest request = new IndexRequest(
-
elasticsearchUtils.getContextDomainName(event.getAny().getType().getKind()),
- event.getAny().getType().getKind().name(),
- event.getAny().getKey()).
+ ElasticsearchUtils.getContextDomainName(
+ AuthContextUtils.getDomain(),
event.getAny().getType().getKind())).
+ id(event.getAny().getKey()).
source(elasticsearchUtils.builder(event.getAny()));
IndexResponse response = client.index(request,
RequestOptions.DEFAULT);
LOG.debug("Index successfully created for {}: {}", event.getAny(),
response);
@@ -86,8 +162,7 @@ public class ElasticsearchIndexManager {
LOG.debug("About to delete index for {}[{}]", event.getAnyTypeKind(),
event.getAnyKey());
DeleteRequest request = new DeleteRequest(
-
elasticsearchUtils.getContextDomainName(event.getAnyTypeKind()),
- event.getAnyTypeKind().name(),
+
ElasticsearchUtils.getContextDomainName(AuthContextUtils.getDomain(),
event.getAnyTypeKind()),
event.getAnyKey());
DeleteResponse response = client.delete(request,
RequestOptions.DEFAULT);
LOG.debug("Index successfully deleted for {}[{}]: {}",
diff --git
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
index 7d2683b..c38671f 100644
---
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
+++
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
@@ -35,7 +35,6 @@ import
org.apache.syncope.core.persistence.api.entity.Privilege;
import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.user.User;
-import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -46,22 +45,26 @@ import
org.springframework.transaction.annotation.Transactional;
*/
public class ElasticsearchUtils {
+ public static String getContextDomainName(final String domain, final
AnyTypeKind kind) {
+ return domain.toLowerCase() + '_' + kind.name().toLowerCase();
+ }
+
@Autowired
- private UserDAO userDAO;
+ protected UserDAO userDAO;
@Autowired
- private GroupDAO groupDAO;
+ protected GroupDAO groupDAO;
@Autowired
- private AnyObjectDAO anyObjectDAO;
+ protected AnyObjectDAO anyObjectDAO;
- private int indexMaxResultWindow = 10000;
+ protected int indexMaxResultWindow = 10000;
- private int retryOnConflict = 5;
+ protected int retryOnConflict = 5;
- private int numberOfShards = 1;
+ protected int numberOfShards = 1;
- private int numberOfReplicas = 1;
+ protected int numberOfReplicas = 1;
public void setIndexMaxResultWindow(final int indexMaxResultWindow) {
this.indexMaxResultWindow = indexMaxResultWindow;
@@ -112,7 +115,7 @@ public class ElasticsearchUtils {
field("creationDate", any.getCreationDate()).
field("creator", any.getCreator()).
field("lastChangeDate", any.getLastChangeDate()).
- field("lastModified", any.getLastModifier()).
+ field("lastModifier", any.getLastModifier()).
field("status", any.getStatus()).
field("resources",
any instanceof User
@@ -142,6 +145,8 @@ public class ElasticsearchUtils {
});
builder = builder.field("relationships", relationships);
builder = builder.field("relationshipTypes", relationshipTypes);
+
+ builder = customizeBuilder(builder, anyObject);
} else if (any instanceof Group) {
Group group = ((Group) any);
builder = builder.field("name", group.getName());
@@ -159,6 +164,8 @@ public class ElasticsearchUtils {
map(membership ->
membership.getLeftEnd().getKey()).collect(Collectors.toList()));
members.add(groupDAO.findADynMembers(group));
builder = builder.field("members", members);
+
+ builder = customizeBuilder(builder, group);
} else if (any instanceof User) {
User user = ((User) any);
builder = builder.
@@ -191,6 +198,8 @@ public class ElasticsearchUtils {
});
builder = builder.field("relationships", relationships);
builder = builder.field("relationshipTypes", relationshipTypes);
+
+ builder = customizeBuilder(builder, user);
}
for (PlainAttr<?> plainAttr : any.getPlainAttrs()) {
@@ -207,7 +216,17 @@ public class ElasticsearchUtils {
return builder.endObject();
}
- public String getContextDomainName(final AnyTypeKind kind) {
- return AuthContextUtils.getDomain().toLowerCase() + "_" +
kind.name().toLowerCase();
+ protected XContentBuilder customizeBuilder(final XContentBuilder builder,
final AnyObject anyObject)
+ throws IOException {
+
+ return builder;
+ }
+
+ protected XContentBuilder customizeBuilder(final XContentBuilder builder,
final Group group) throws IOException {
+ return builder;
+ }
+
+ protected XContentBuilder customizeBuilder(final XContentBuilder builder,
final User user) throws IOException {
+ return builder;
}
}
diff --git
a/ext/elasticsearch/client-elasticsearch/src/main/resources/elasticsearchClientContext.xml
b/ext/elasticsearch/client-elasticsearch/src/main/resources/elasticsearchClientContext.xml
index 0cc8dbb..69ce2ba 100644
---
a/ext/elasticsearch/client-elasticsearch/src/main/resources/elasticsearchClientContext.xml
+++
b/ext/elasticsearch/client-elasticsearch/src/main/resources/elasticsearchClientContext.xml
@@ -22,7 +22,7 @@ under the License.
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
- <bean id="localhost" class="org.apache.http.HttpHost">
+ <bean id="httpHost" class="org.apache.http.HttpHost">
<constructor-arg value="localhost"/>
<constructor-arg value="9200"/>
<constructor-arg value="http"/>
@@ -30,11 +30,11 @@ under the License.
<bean
class="org.apache.syncope.ext.elasticsearch.client.ElasticsearchClientFactoryBean">
<constructor-arg>
<list>
- <ref bean="localhost"/>
+ <ref bean="httpHost"/>
</list>
</constructor-arg>
</bean>
-
+
<bean class="org.apache.syncope.ext.elasticsearch.client.ElasticsearchUtils">
<property name="indexMaxResultWindow" value="10000"/>
<property name="retryOnConflict" value="5"/>
@@ -43,4 +43,4 @@ under the License.
</bean>
<bean
class="org.apache.syncope.ext.elasticsearch.client.ElasticsearchIndexManager"/>
-</beans>
+</beans>
\ No newline at end of file
diff --git a/ext/elasticsearch/persistence-jpa/pom.xml
b/ext/elasticsearch/persistence-jpa/pom.xml
index 5089181..61adecb 100644
--- a/ext/elasticsearch/persistence-jpa/pom.xml
+++ b/ext/elasticsearch/persistence-jpa/pom.xml
@@ -53,7 +53,7 @@ under the License.
<!-- TEST -->
<dependency>
<groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
+ <artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>
<dependency>
diff --git
a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
index f040833..05551ea 100644
---
a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
+++
b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
@@ -57,12 +57,14 @@ import
org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.provisioning.api.utils.RealmUtils;
+import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.apache.syncope.ext.elasticsearch.client.ElasticsearchUtils;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.DisMaxQueryBuilder;
+import org.elasticsearch.index.query.MatchAllQueryBuilder;
import org.elasticsearch.index.query.MatchNoneQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
@@ -80,6 +82,8 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
protected static final QueryBuilder MATCH_NONE_QUERY_BUILDER = new
MatchNoneQueryBuilder();
+ protected static final QueryBuilder MATCH_ALL_QUERY_BUILDER = new
MatchAllQueryBuilder();
+
@Autowired
protected RestHighLevelClient client;
@@ -87,7 +91,7 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
protected ElasticsearchUtils elasticsearchUtils;
protected Triple<Optional<QueryBuilder>, Set<String>, Set<String>>
getAdminRealmsFilter(
- final Set<String> adminRealms) {
+ final AnyTypeKind kind, final Set<String> adminRealms) {
DisMaxQueryBuilder builder = QueryBuilders.disMaxQuery();
@@ -133,7 +137,7 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
final int size,
final List<SortBuilder<?>> sortBuilders) {
- Triple<Optional<QueryBuilder>, Set<String>, Set<String>> filter =
getAdminRealmsFilter(adminRealms);
+ Triple<Optional<QueryBuilder>, Set<String>, Set<String>> filter =
getAdminRealmsFilter(kind, adminRealms);
QueryBuilder queryBuilder;
if (SyncopeConstants.FULL_ADMIN_REALMS.equals(adminRealms)) {
queryBuilder = getQueryBuilder(cond, kind);
@@ -153,7 +157,7 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
size(size);
sortBuilders.forEach(sourceBuilder::sort);
- return new
SearchRequest(elasticsearchUtils.getContextDomainName(kind)).
+ return new
SearchRequest(ElasticsearchUtils.getContextDomainName(AuthContextUtils.getDomain(),
kind)).
searchType(SearchType.QUERY_THEN_FETCH).
source(sourceBuilder);
}
@@ -162,7 +166,7 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
protected int doCount(final Set<String> adminRealms, final SearchCond
cond, final AnyTypeKind kind) {
SearchRequest request = searchRequest(adminRealms, cond, kind, 0, 0,
Collections.emptyList());
try {
- return (int) client.search(request,
RequestOptions.DEFAULT).getHits().getTotalHits();
+ return (int) client.search(request,
RequestOptions.DEFAULT).getHits().getTotalHits().value;
} catch (IOException e) {
LOG.error("Search error", e);
return 0;
@@ -227,7 +231,7 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
return ArrayUtils.isEmpty(esResult)
? Collections.emptyList()
- : buildResult(Stream.of(esResult).map(hit ->
hit.getId()).collect(Collectors.toList()), kind);
+ :
buildResult(Stream.of(esResult).map(SearchHit::getId).collect(Collectors.toList()),
kind);
}
protected QueryBuilder getQueryBuilder(final SearchCond cond, final
AnyTypeKind kind) {
@@ -312,9 +316,15 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
}
}
+ // allow for additional search conditions
+ if (builder == null) {
+ builder = getQueryBuilderForCustomConds(cond, kind);
+ }
+
if (builder == null) {
builder = MATCH_NONE_QUERY_BUILDER;
}
+
if (cond.getType() == SearchCond.Type.NOT_LEAF) {
builder = QueryBuilders.boolQuery().mustNot(builder);
}
@@ -384,9 +394,8 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
DisMaxQueryBuilder builder = QueryBuilders.disMaxQuery();
if (cond.isFromGroup()) {
- realmDAO.findDescendants(realm).forEach(current -> {
- builder.add(QueryBuilders.termQuery("realm",
current.getFullPath()));
- });
+ realmDAO.findDescendants(realm).forEach(
+ current -> builder.add(QueryBuilders.termQuery("realm",
current.getFullPath())));
} else {
for (Realm current = realm; current.getParent() != null; current =
current.getParent()) {
builder.add(QueryBuilders.termQuery("realm",
current.getFullPath()));
@@ -516,4 +525,8 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
return fillAttrQuery(checked.getLeft(), checked.getMiddle(),
checked.getRight());
}
+
+ protected QueryBuilder getQueryBuilderForCustomConds(final SearchCond
cond, final AnyTypeKind kind) {
+ return MATCH_ALL_QUERY_BUILDER;
+ }
}
diff --git
a/ext/elasticsearch/persistence-jpa/src/main/resources/persistence.properties
b/ext/elasticsearch/persistence-jpa/src/main/resources/persistence.properties
index a451701..6a968d8 100644
---
a/ext/elasticsearch/persistence-jpa/src/main/resources/persistence.properties
+++
b/ext/elasticsearch/persistence-jpa/src/main/resources/persistence.properties
@@ -24,6 +24,5 @@
any.search.visitor=org.apache.syncope.core.persistence.api.search.SearchCondVisi
user.dao=org.apache.syncope.core.persistence.jpa.dao.JPAUserDAO
group.dao=org.apache.syncope.core.persistence.jpa.dao.JPAGroupDAO
anyObject.dao=org.apache.syncope.core.persistence.jpa.dao.JPAAnyObjectDAO
-conf.dao=org.apache.syncope.core.persistence.jpa.dao.JPAConfDAO
logger.dao=org.apache.syncope.core.persistence.jpa.dao.JPALoggerDAO
openjpa.RemoteCommitProvider=sjvm
diff --git
a/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java
b/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java
index 883a823..ca83d90 100644
---
a/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java
+++
b/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java
@@ -54,6 +54,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.util.ReflectionUtils;
@@ -92,7 +94,8 @@ public class ElasticsearchAnySearchDAOTest {
// 2. test
Set<String> adminRealms =
Collections.singleton(SyncopeConstants.ROOT_REALM);
- Triple<Optional<QueryBuilder>, Set<String>, Set<String>> filter =
searchDAO.getAdminRealmsFilter(adminRealms);
+ Triple<Optional<QueryBuilder>, Set<String>, Set<String>> filter =
+ searchDAO.getAdminRealmsFilter(AnyTypeKind.USER, adminRealms);
assertEquals(
QueryBuilders.disMaxQuery().add(QueryBuilders.termQuery("realm",
SyncopeConstants.ROOT_REALM)),
filter.getLeft().get());
@@ -110,7 +113,8 @@ public class ElasticsearchAnySearchDAOTest {
// 2. test
Set<String> adminRealms = Collections.singleton("dyn");
- Triple<Optional<QueryBuilder>, Set<String>, Set<String>> filter =
searchDAO.getAdminRealmsFilter(adminRealms);
+ Triple<Optional<QueryBuilder>, Set<String>, Set<String>> filter =
+ searchDAO.getAdminRealmsFilter(AnyTypeKind.USER, adminRealms);
assertFalse(filter.getLeft().isPresent());
assertEquals(Collections.singleton("dyn"), filter.getMiddle());
assertEquals(Collections.emptySet(), filter.getRight());
@@ -119,7 +123,8 @@ public class ElasticsearchAnySearchDAOTest {
@Test
public void getAdminRealmsFilter_groupOwner() {
Set<String> adminRealms =
Collections.singleton(RealmUtils.getGroupOwnerRealm("/any", "groupKey"));
- Triple<Optional<QueryBuilder>, Set<String>, Set<String>> filter =
searchDAO.getAdminRealmsFilter(adminRealms);
+ Triple<Optional<QueryBuilder>, Set<String>, Set<String>> filter =
+ searchDAO.getAdminRealmsFilter(AnyTypeKind.USER, adminRealms);
assertFalse(filter.getLeft().isPresent());
assertEquals(Collections.emptySet(), filter.getMiddle());
assertEquals(Collections.singleton("groupKey"), filter.getRight());
@@ -138,21 +143,24 @@ public class ElasticsearchAnySearchDAOTest {
when(groupDAO.findKey("groupKey")).thenReturn("groupKey");
-
when(elasticsearchUtils.getContextDomainName(AnyTypeKind.USER)).thenReturn("master_user");
+ try (MockedStatic<ElasticsearchUtils> utils =
Mockito.mockStatic(ElasticsearchUtils.class)) {
+ utils.when(() -> ElasticsearchUtils.getContextDomainName(
+ SyncopeConstants.MASTER_DOMAIN,
AnyTypeKind.USER)).thenReturn("master_user");
- // 2. test
- Set<String> adminRealms =
Collections.singleton(RealmUtils.getGroupOwnerRealm("/any", "groupKey"));
+ // 2. test
+ Set<String> adminRealms =
Collections.singleton(RealmUtils.getGroupOwnerRealm("/any", "groupKey"));
- AnyCond anyCond = new AnyCond(AttrCond.Type.ISNOTNULL);
- anyCond.setSchema("id");
+ AnyCond anyCond = new AnyCond(AttrCond.Type.ISNOTNULL);
+ anyCond.setSchema("id");
- SearchRequest searchRequest = searchDAO.searchRequest(
- adminRealms, SearchCond.getLeaf(anyCond), AnyTypeKind.USER, 1,
10, Collections.emptyList());
+ SearchRequest searchRequest = searchDAO.searchRequest(
+ adminRealms, SearchCond.getLeaf(anyCond),
AnyTypeKind.USER, 1, 10, Collections.emptyList());
- assertEquals(
- QueryBuilders.boolQuery().
- must(QueryBuilders.existsQuery("id")).
- must(QueryBuilders.termQuery("memberships",
"groupKey")),
- searchRequest.source().query());
+ assertEquals(
+ QueryBuilders.boolQuery().
+ must(QueryBuilders.existsQuery("id")).
+ must(QueryBuilders.termQuery("memberships",
"groupKey")),
+ searchRequest.source().query());
+ }
}
}
diff --git
a/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
b/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
index 3e8f87a..1e82a7f 100644
---
a/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
+++
b/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
@@ -19,7 +19,6 @@
package org.apache.syncope.core.provisioning.java.job;
import java.io.IOException;
-import java.util.concurrent.ExecutionException;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.persistence.api.dao.AnyDAO;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
@@ -27,18 +26,13 @@ import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
import org.apache.syncope.core.spring.security.AuthContextUtils;
+import org.apache.syncope.ext.elasticsearch.client.ElasticsearchIndexManager;
import org.apache.syncope.ext.elasticsearch.client.ElasticsearchUtils;
-import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
-import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
-import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
-import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
-import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.common.xcontent.XContentFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
@@ -49,42 +43,78 @@ import
org.springframework.beans.factory.annotation.Autowired;
public class ElasticsearchReindex extends AbstractSchedTaskJobDelegate {
@Autowired
- private RestHighLevelClient client;
+ protected RestHighLevelClient client;
@Autowired
- private ElasticsearchUtils elasticsearchUtils;
+ protected ElasticsearchIndexManager indexManager;
@Autowired
- private UserDAO userDAO;
+ protected ElasticsearchUtils elasticsearchUtils;
@Autowired
- private GroupDAO groupDAO;
+ protected UserDAO userDAO;
@Autowired
- private AnyObjectDAO anyObjectDAO;
+ protected GroupDAO groupDAO;
+
+ @Autowired
+ protected AnyObjectDAO anyObjectDAO;
+
+ protected XContentBuilder userSettings() throws IOException {
+ return indexManager.defaultSettings();
+ }
+
+ protected XContentBuilder groupSettings() throws IOException {
+ return indexManager.defaultSettings();
+ }
+
+ protected XContentBuilder anyObjectSettings() throws IOException {
+ return indexManager.defaultSettings();
+ }
+
+ protected XContentBuilder userMapping() throws IOException {
+ return indexManager.defaultMapping();
+ }
+
+ protected XContentBuilder groupMapping() throws IOException {
+ return indexManager.defaultMapping();
+ }
+
+ protected XContentBuilder anyObjectMapping() throws IOException {
+ return indexManager.defaultMapping();
+ }
- @SuppressWarnings("deprecation")
@Override
protected String doExecute(final boolean dryRun, final JobExecutionContext
context) throws JobExecutionException {
if (!dryRun) {
LOG.debug("Start rebuilding indexes");
try {
- removeIndexIfExists(AnyTypeKind.USER);
- removeIndexIfExists(AnyTypeKind.GROUP);
- removeIndexIfExists(AnyTypeKind.ANY_OBJECT);
+ if (indexManager.existsIndex(AuthContextUtils.getDomain(),
AnyTypeKind.USER)) {
+ indexManager.removeIndex(AuthContextUtils.getDomain(),
AnyTypeKind.USER);
+ }
+ indexManager.createIndex(
+ AuthContextUtils.getDomain(), AnyTypeKind.USER,
userSettings(), userMapping());
- createIndex(AnyTypeKind.USER);
- createIndex(AnyTypeKind.GROUP);
- createIndex(AnyTypeKind.ANY_OBJECT);
+ if (indexManager.existsIndex(AuthContextUtils.getDomain(),
AnyTypeKind.GROUP)) {
+ indexManager.removeIndex(AuthContextUtils.getDomain(),
AnyTypeKind.GROUP);
+ }
+ indexManager.createIndex(
+ AuthContextUtils.getDomain(), AnyTypeKind.GROUP,
groupSettings(), groupMapping());
+
+ if (indexManager.existsIndex(AuthContextUtils.getDomain(),
AnyTypeKind.ANY_OBJECT)) {
+ indexManager.removeIndex(AuthContextUtils.getDomain(),
AnyTypeKind.ANY_OBJECT);
+ }
+ indexManager.createIndex(
+ AuthContextUtils.getDomain(), AnyTypeKind.ANY_OBJECT,
anyObjectSettings(), anyObjectMapping());
LOG.debug("Indexing users...");
for (int page = 1; page <= (userDAO.count() /
AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
for (String user : userDAO.findAllKeys(page,
AnyDAO.DEFAULT_PAGE_SIZE)) {
IndexRequest request = new IndexRequest(
-
elasticsearchUtils.getContextDomainName(AnyTypeKind.USER),
- AnyTypeKind.USER.name(),
- user).
+ ElasticsearchUtils.getContextDomainName(
+ AuthContextUtils.getDomain(),
AnyTypeKind.USER)).
+ id(user).
source(elasticsearchUtils.builder(userDAO.find(user)));
IndexResponse response = client.index(request,
RequestOptions.DEFAULT);
LOG.debug("Index successfully created for {}: {}",
user, response);
@@ -95,9 +125,9 @@ public class ElasticsearchReindex extends
AbstractSchedTaskJobDelegate {
for (int page = 1; page <= (groupDAO.count() /
AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
for (String group : groupDAO.findAllKeys(page,
AnyDAO.DEFAULT_PAGE_SIZE)) {
IndexRequest request = new IndexRequest(
-
elasticsearchUtils.getContextDomainName(AnyTypeKind.GROUP),
- AnyTypeKind.GROUP.name(),
- group).
+ ElasticsearchUtils.getContextDomainName(
+ AuthContextUtils.getDomain(),
AnyTypeKind.GROUP)).
+ id(group).
source(elasticsearchUtils.builder(groupDAO.find(group)));
IndexResponse response = client.index(request,
RequestOptions.DEFAULT);
LOG.debug("Index successfully created for {}: {}",
group, response);
@@ -108,9 +138,9 @@ public class ElasticsearchReindex extends
AbstractSchedTaskJobDelegate {
for (int page = 1; page <= (anyObjectDAO.count() /
AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
for (String anyObject : anyObjectDAO.findAllKeys(page,
AnyDAO.DEFAULT_PAGE_SIZE)) {
IndexRequest request = new IndexRequest(
-
elasticsearchUtils.getContextDomainName(AnyTypeKind.ANY_OBJECT),
- AnyTypeKind.ANY_OBJECT.name(),
- anyObject).
+ ElasticsearchUtils.getContextDomainName(
+ AuthContextUtils.getDomain(),
AnyTypeKind.ANY_OBJECT)).
+ id(anyObject).
source(elasticsearchUtils.builder(anyObjectDAO.find(anyObject)));
IndexResponse response = client.index(request,
RequestOptions.DEFAULT);
LOG.debug("Index successfully created for {}: {}",
anyObject, response);
@@ -126,65 +156,6 @@ public class ElasticsearchReindex extends
AbstractSchedTaskJobDelegate {
return "SUCCESS";
}
- @SuppressWarnings("deprecation")
- private void removeIndexIfExists(final AnyTypeKind kind) throws
IOException {
- if (client.indices().exists(
- new
GetIndexRequest().indices(elasticsearchUtils.getContextDomainName(kind)),
RequestOptions.DEFAULT)) {
-
- AcknowledgedResponse acknowledgedResponse =
client.indices().delete(
- new
DeleteIndexRequest(elasticsearchUtils.getContextDomainName(kind)),
RequestOptions.DEFAULT);
- LOG.debug("Successfully removed {}: {}",
- elasticsearchUtils.getContextDomainName(kind),
acknowledgedResponse);
- }
- }
-
- @SuppressWarnings("deprecation")
- private void createIndex(final AnyTypeKind kind)
- throws InterruptedException, ExecutionException, IOException {
-
- XContentBuilder settings = XContentFactory.jsonBuilder().
- startObject().
- startObject("analysis").
- startObject("analyzer").
- startObject("string_lowercase").
- field("type", "custom").
- field("tokenizer", "standard").
- field("filter").
- startArray().
- value("lowercase").
- endArray().
- endObject().
- endObject().
- endObject().
- startObject("index").
- field("number_of_shards",
elasticsearchUtils.getNumberOfShards()).
- field("number_of_replicas",
elasticsearchUtils.getNumberOfReplicas()).
- endObject().
- endObject();
-
- XContentBuilder mapping = XContentFactory.jsonBuilder().
- startObject().
- startArray("dynamic_templates").
- startObject().
- startObject("strings").
- field("match_mapping_type", "string").
- startObject("mapping").
- field("type", "keyword").
- field("analyzer", "string_lowercase").
- endObject().
- endObject().
- endObject().
- endArray().
- endObject();
-
- CreateIndexResponse response = client.indices().create(
- new
CreateIndexRequest(elasticsearchUtils.getContextDomainName(kind)).
- settings(settings).
- mapping(kind.name(), mapping), RequestOptions.DEFAULT);
- LOG.debug("Successfully created {} for {}: {}",
- elasticsearchUtils.getContextDomainName(kind), kind.name(),
response);
- }
-
@Override
protected boolean hasToBeRegistered(final TaskExec execution) {
return true;
diff --git a/fit/build-tools/LICENSE b/fit/build-tools/LICENSE
index 2619dfe..4a190f9 100644
--- a/fit/build-tools/LICENSE
+++ b/fit/build-tools/LICENSE
@@ -847,6 +847,11 @@ any resulting litigation.
==
+For Eclipse Project for JAX-RS
(https://projects.eclipse.org/projects/ee4j.jaxrs):
+This is licensed under the EPL 1.0, see above.
+
+==
+
For Jakarta XML Binding (https://eclipse-ee4j.github.io/jaxb-ri/):
This is licensed under the EPL 1.0, see above.
@@ -867,17 +872,12 @@ This is licensed under the AL 2.0, see above.
==
-For javax.ws.rs-api (https://jax-rs-spec.java.net/):
-This is licensed under the CDDL 1.0, see above.
-
-==
-
For SAAJ Standard Implementation (https://saaj.java.net/):
This is licensed under the CDDL 1.0, see above.
==
-For javax.ws.rs-api (https://jax-ws.java.net/):
+For JAX-WS (http://jax-ws.java.net/):
This is licensed under the CDDL 1.0, see above.
==
diff --git a/fit/build-tools/NOTICE b/fit/build-tools/NOTICE
index 30ad96c..ac56b30 100644
--- a/fit/build-tools/NOTICE
+++ b/fit/build-tools/NOTICE
@@ -43,6 +43,12 @@ Copyright (c) 2019, 2020 Eclipse Foundation. All rights
reserved.
==
+This product includes software developed by the Eclipse Project for JAX-RS.
+Eclipse Project for JAX-RS is a trademark of the Eclipse Foundation.
+All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.
+
+==
+
This product includes software developed by the Eclipse Foundation.
Copyright (c) 2019, 2020 Eclipse Foundation. All rights reserved.
@@ -63,11 +69,6 @@ Copyright (c) Red Hat, Inc., Emmanuel Bernard
==
-This product includes software developed by the JAX-RS project.
-Copyright (c) 2014, Oracle Corporation and/or its affiliates. All rights
reserved.
-
-==
-
This product includes software developed by the SAAJ Standard Implementation
(https://saaj.java.net/).
Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
diff --git a/fit/build-tools/pom.xml b/fit/build-tools/pom.xml
index e56b77d..fdaea88 100644
--- a/fit/build-tools/pom.xml
+++ b/fit/build-tools/pom.xml
@@ -69,7 +69,7 @@ under the License.
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
- <version>2.2.11</version>
+ <version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
diff --git a/fit/core-reference/pom.xml b/fit/core-reference/pom.xml
index 79b386d..9f6a0eb 100644
--- a/fit/core-reference/pom.xml
+++ b/fit/core-reference/pom.xml
@@ -1578,7 +1578,7 @@ under the License.
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
- <version>2.2.11</version>
+ <version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
diff --git a/ide/eclipse/LICENSE b/ide/eclipse/LICENSE
index f34bfd3..7887447 100644
--- a/ide/eclipse/LICENSE
+++ b/ide/eclipse/LICENSE
@@ -599,11 +599,6 @@ This is licensed under the CDDL 1.0, see above.
==
-For javax.ws.rs-api (https://jax-rs-spec.java.net/):
-This is licensed under the CDDL 1.0, see above.
-
-==
-
For Joda Time (http://www.joda.org/joda-time/):
This is licensed under the AL 2.0, see above.
@@ -894,3 +889,9 @@ This is licensed under the EPL 1.0, see above.
For Eclipse SWT (https://projects.eclipse.org/projects/eclipse.platform.swt):
This is licensed under the EPL 1.0, see above.
+
+==
+
+This product includes software developed by the Eclipse Project for JAX-RS.
+Eclipse Project for JAX-RS is a trademark of the Eclipse Foundation.
+All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.
diff --git a/ide/eclipse/NOTICE b/ide/eclipse/NOTICE
index 7feb491..ed42282 100644
--- a/ide/eclipse/NOTICE
+++ b/ide/eclipse/NOTICE
@@ -23,8 +23,9 @@ Copyright (c) 2012-2013 Oracle and/or its affiliates. All
rights reserved.
==
-This product includes software developed by the JAX-RS project.
-Copyright (c) 2014, Oracle Corporation and/or its affiliates. All rights
reserved.
+This product includes software developed by the Eclipse Project for JAX-RS.
+Eclipse Project for JAX-RS is a trademark of the Eclipse Foundation.
+All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.
==
diff --git
a/ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/META-INF/MANIFEST.MF
b/ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/META-INF/MANIFEST.MF
index b9f09cb..3e9b1d1 100644
---
a/ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/META-INF/MANIFEST.MF
+++
b/ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/META-INF/MANIFEST.MF
@@ -28,7 +28,7 @@ Bundle-ClassPath: lib/commons-codec.jar,
lib/jackson-jaxrs-json-provider.jar,
lib/jackson-module-jaxb-annotations.jar,
lib/javax.annotation-api.jar,
- lib/javax.ws.rs-api.jar,
+ lib/jakarta.ws.rs-api.jar,
lib/log4j-api.jar,
lib/slf4j-api.jar,
lib/stax2-api.jar,
diff --git
a/ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/build.properties
b/ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/build.properties
index f5d40f0..7095207 100644
--- a/ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/build.properties
+++ b/ide/eclipse/bundles/org.apache.syncope.ide.eclipse.plugin/build.properties
@@ -37,7 +37,7 @@ bin.includes = plugin.xml,\
lib/jackson-jaxrs-json-provider.jar,\
lib/jackson-module-jaxb-annotations.jar,\
lib/javax.annotation-api.jar,\
- lib/javax.ws.rs-api.jar,\
+ lib/jakarta.ws.rs-api.jar,\
lib/log4j-api.jar,\
lib/slf4j-api.jar,\
lib/stax2-api.jar,\
diff --git a/ide/netbeans/LICENSE b/ide/netbeans/LICENSE
index 876156c..daa12f8 100644
--- a/ide/netbeans/LICENSE
+++ b/ide/netbeans/LICENSE
@@ -604,11 +604,6 @@ This is licensed under the AL 2.0, see above.
==
-For javax.ws.rs-api (https://jax-rs-spec.java.net/):
-This is licensed under the CDDL 1.0, see above.
-
-==
-
For Joda Time (http://www.joda.org/joda-time/):
This is licensed under the AL 2.0, see above.
@@ -675,3 +670,212 @@ This is licensed under the MIT license:
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+==
+
+For Eclipse Project for JAX-RS
(https://projects.eclipse.org/projects/ee4j.jaxrs):
+This is licensed under the EPL 1.0:
+
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+ distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates'
+ from a Contributor if it was added to the Program by such Contributor
+ itself or anyone acting on such Contributor's behalf. Contributions do not
+ include additions to the Program which: (i) are separate modules of
+ software distributed in conjunction with the Program under their own
+ license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly
+ perform, distribute and sublicense the Contribution of such Contributor,
+ if any, and such derivative works, in source code and object code form.
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
+ transfer the Contribution of such Contributor, if any, in source code and
+ object code form. This patent license shall apply to the combination of
+ the Contribution and the Program if, at the time the Contribution is
+ added by the Contributor, such addition of the Contribution causes such
+ combination to be covered by the Licensed Patents. The patent license
+ shall not apply to any other combinations which include the Contribution.
+ No hardware per se is licensed hereunder.
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other
+ intellectual property rights of any other entity. Each Contributor
+ disclaims any liability to Recipient for claims brought by any other
+ entity based on infringement of intellectual property rights or
+ otherwise. As a condition to exercising the rights and licenses granted
+ hereunder, each Recipient hereby assumes sole responsibility to secure
+ any other intellectual property rights needed, if any. For example, if a
+ third party patent license is required to allow Recipient to distribute
+ the Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+ b) its license agreement:
+ i) effectively disclaims on behalf of all Contributors all warranties
+ and conditions, express and implied, including warranties or
+ conditions of title and non-infringement, and implied warranties or
+ conditions of merchantability and fitness for a particular purpose;
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and
+ consequential damages, such as lost profits;
+ iii) states that any provisions which differ from this Agreement are
+ offered by that Contributor alone and not by any other party; and
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable
+ manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+ b) a copy of this Agreement must be included with each copy of the Program.
+ Contributors may not remove or alter any copyright notices contained
+ within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if
+any, in a manner that reasonably allows subsequent Recipients to identify the
+originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore,
+if a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits and
+other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such Commercial
+Contributor in connection with its distribution of the Program in a commercial
+product offering. The obligations in this section do not apply to any claims
+or Losses relating to any actual or alleged intellectual property
+infringement. In order to qualify, an Indemnified Contributor must:
+a) promptly notify the Commercial Contributor in writing of such claim, and
+b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement
+negotiations. The Indemnified Contributor may participate in any such claim at
+its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If
+that Commercial Contributor then makes performance claims, or offers
+warranties related to Product X, those performance claims and warranties are
+such Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using
+and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the
+risks and costs of program errors, compliance with applicable laws, damage to
+or loss of data, programs or equipment, and unavailability or interruption of
+operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of the
+remainder of the terms of this Agreement, and without further action by the
+parties hereto, such provision shall be reformed to the minimum extent
+necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted
+under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue
+and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to
+time. No one other than the Agreement Steward has the right to modify this
+Agreement. The Eclipse Foundation is the initial Agreement Steward. The
+Eclipse Foundation may assign the responsibility to serve as the Agreement
+Steward to a suitable separate entity. Each new version of the Agreement will
+be given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version of the
+Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly
+stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
+licenses to the intellectual property of any Contributor under this Agreement,
+whether expressly, by implication, estoppel or otherwise. All rights in the
+Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial
in
+any resulting litigation.
diff --git a/ide/netbeans/NOTICE b/ide/netbeans/NOTICE
index efb0700..8f34597 100644
--- a/ide/netbeans/NOTICE
+++ b/ide/netbeans/NOTICE
@@ -28,8 +28,9 @@ Copyright (c) Red Hat, Inc., Emmanuel Bernard
==
-This product includes software developed by the JAX-RS project.
-Copyright (c) 2014, Oracle Corporation and/or its affiliates. All rights
reserved.
+This product includes software developed by the Eclipse Project for JAX-RS.
+Eclipse Project for JAX-RS is a trademark of the Eclipse Foundation.
+All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.
==
diff --git a/pom.xml b/pom.xml
index 7b0f183..642616b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -404,14 +404,14 @@ under the License.
<connid.scimv11.version>1.0.1</connid.scimv11.version>
<connid.servicenow.version>1.0.0</connid.servicenow.version>
- <cxf.version>3.2.14</cxf.version>
+ <cxf.version>3.3.10</cxf.version>
<jackson.version>2.11.4</jackson.version>
<spring.version>5.1.20.RELEASE</spring.version>
<spring-security.version>5.1.13.RELEASE</spring-security.version>
- <openjpa.version>3.1.2</openjpa.version>
+ <openjpa.version>3.2.0</openjpa.version>
<hikaricp.version>4.0.3</hikaricp.version>
<bval.version>2.0.5</bval.version>
@@ -425,12 +425,12 @@ under the License.
<flowable.version>6.6.0</flowable.version>
- <camel.version>2.24.2</camel.version>
+ <camel.version>2.25.4</camel.version>
<slf4j.version>1.7.30</slf4j.version>
<opensaml.version>3.3.1</opensaml.version>
- <elasticsearch.version>6.8.16</elasticsearch.version>
+ <elasticsearch.version>7.13.0</elasticsearch.version>
<apacheds.version>2.0.0.AM26</apacheds.version>
<apachedirapi.version>2.0.0</apachedirapi.version>
@@ -502,7 +502,7 @@ under the License.
<httpclient.version>4.5.13</httpclient.version>
<maven-invoker.version>3.0.1</maven-invoker.version>
- <tycho.version>1.2.0</tycho.version>
+ <tycho.version>1.7.0</tycho.version>
<netbeans.version>RELEASE122</netbeans.version>
<antlr4.version>4.9.2</antlr4.version>
@@ -1800,6 +1800,12 @@ under the License.
</dependency>
<dependency>
<groupId>org.mockito</groupId>
+ <artifactId>mockito-inline</artifactId>
+ <version>${mockito.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
@@ -2032,7 +2038,7 @@ under the License.
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
- <version>1.7.16</version>
+ <version>1.8.5</version>
<configuration>
<container>
<containerId>tomcat9x</containerId>
@@ -2812,7 +2818,7 @@ under the License.
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
- <version>2.3.0</version>
+ <version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
diff --git
a/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/javaeecontainer.adoc
b/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/javaeecontainer.adoc
index a5c2feb..237c18b 100644
---
a/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/javaeecontainer.adoc
+++
b/src/main/asciidoc/reference-guide/workingwithapachesyncope/systemadministration/javaeecontainer.adoc
@@ -119,7 +119,7 @@ Add
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
- <version>2.2.11</version>
+ <version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
diff --git a/standalone/LICENSE b/standalone/LICENSE
index 18e8c13..506ab55 100644
--- a/standalone/LICENSE
+++ b/standalone/LICENSE
@@ -1002,6 +1002,11 @@ This is licensed under the EPL 1.0, see above.
==
+For Eclipse Project for JAX-RS
(https://projects.eclipse.org/projects/ee4j.jaxrs):
+This is licensed under the EPL 1.0, see above.
+
+==
+
For Jakarta XML Binding (https://eclipse-ee4j.github.io/jaxb-ri/):
This is licensed under the EPL 1.0, see above.
@@ -1022,17 +1027,12 @@ This is licensed under the AL 2.0, see above.
==
-For javax.ws.rs-api (https://jax-rs-spec.java.net/):
-This is licensed under the CDDL 1.0, see above.
-
-==
-
For SAAJ Standard Implementation (https://saaj.java.net/):
This is licensed under the CDDL 1.0, see above.
==
-For javax.ws.rs-api (https://jax-ws.java.net/):
+For JAX-WS (http://jax-ws.java.net/):
This is licensed under the CDDL 1.0, see above.
==
diff --git a/standalone/NOTICE b/standalone/NOTICE
index 13b6da8..03e968d 100644
--- a/standalone/NOTICE
+++ b/standalone/NOTICE
@@ -159,6 +159,12 @@ Copyright (c) 2019, 2020 Eclipse Foundation. All rights
reserved.
==
+This product includes software developed by the Eclipse Project for JAX-RS.
+Eclipse Project for JAX-RS is a trademark of the Eclipse Foundation.
+All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.
+
+==
+
This product includes software developed by the Eclipse Foundation.
Copyright (c) 2019, 2020 Eclipse Foundation. All rights reserved.
@@ -179,11 +185,6 @@ Copyright (c) Red Hat, Inc., Emmanuel Bernard
==
-This product includes software developed by the JAX-RS project.
-Copyright (c) 2014, Oracle Corporation and/or its affiliates. All rights
reserved.
-
-==
-
This product includes software developed by the SAAJ Standard Implementation
(https://saaj.java.net/).
Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.