You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by ql...@apache.org on 2016/07/26 16:23:04 UTC
incubator-unomi git commit: UNOMI-46 : Avoid NPE when asking for the
definition of a missing tag + Return 404
Repository: incubator-unomi
Updated Branches:
refs/heads/master c97f92274 -> 6832aae60
UNOMI-46 : Avoid NPE when asking for the definition of a missing tag + Return 404
Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/6832aae6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/6832aae6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/6832aae6
Branch: refs/heads/master
Commit: 6832aae60fec56022a2de9ba7a5811c7fbf05934
Parents: c97f922
Author: Quentin Lamerand <ql...@jahia.com>
Authored: Tue Jul 26 18:22:58 2016 +0200
Committer: Quentin Lamerand <ql...@jahia.com>
Committed: Tue Jul 26 18:22:58 2016 +0200
----------------------------------------------------------------------
.../unomi/rest/DefinitionsServiceEndPoint.java | 26 +++++++++++++++-----
.../apache/unomi/rest/LocalizationHelper.java | 2 +-
.../services/DefinitionsServiceImpl.java | 3 ---
.../services/services/ProfileServiceImpl.java | 13 ++++++----
4 files changed, 29 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/6832aae6/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java
----------------------------------------------------------------------
diff --git a/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java
index 365124c..e9754a8 100644
--- a/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java
+++ b/rest/src/main/java/org/apache/unomi/rest/DefinitionsServiceEndPoint.java
@@ -20,6 +20,7 @@ package org.apache.unomi.rest;
import org.apache.cxf.rs.security.cors.CrossOriginResourceSharing;
import org.apache.unomi.api.PluginType;
import org.apache.unomi.api.PropertyMergeStrategyType;
+import org.apache.unomi.api.Tag;
import org.apache.unomi.api.ValueType;
import org.apache.unomi.api.actions.ActionType;
import org.apache.unomi.api.conditions.ConditionType;
@@ -86,14 +87,18 @@ public class DefinitionsServiceEndPoint {
* Retrieves the tag with the specified identifier localized using the specified language.
*
* @param language the language to use to localize.
- * @param tag the identifier of the tag to retrieve
+ * @param tagId the identifier of the tag to retrieve
* @param filterHidden {@code true} if hidden sub-tags should be filtered out, {@code false} otherwise
* @return the tag with the specified identifier
*/
@GET
@Path("/tags/{tagId}")
- public RESTTag getTag(@PathParam("tagId") String tag, @QueryParam("filterHidden") @DefaultValue("false") boolean filterHidden, @HeaderParam("Accept-Language") String language) {
- return localizationHelper.generateTag(definitionsService.getTag(tag), language, filterHidden);
+ public RESTTag getTag(@PathParam("tagId") String tagId, @QueryParam("filterHidden") @DefaultValue("false") boolean filterHidden, @HeaderParam("Accept-Language") String language) {
+ Tag tag = definitionsService.getTag(tagId);
+ if (tag == null) {
+ throw new NotFoundException(new NoSuchElementException(tagId)); // return 404 when tag is not found
+ }
+ return localizationHelper.generateTag(tag, language, filterHidden);
}
/**
@@ -123,7 +128,10 @@ public class DefinitionsServiceEndPoint {
String[] tagsArray = tags.split(",");
Set<ConditionType> results = new LinkedHashSet<>();
for (String s : tagsArray) {
- results.addAll(definitionsService.getConditionTypesByTag(definitionsService.getTag(s), recursive));
+ Tag tag = definitionsService.getTag(s);
+ if (tag != null) {
+ results.addAll(definitionsService.getConditionTypesByTag(tag, recursive));
+ }
}
return localizationHelper.generateConditions(results, language);
}
@@ -191,7 +199,10 @@ public class DefinitionsServiceEndPoint {
String[] tagsArray = tags.split(",");
Set<ActionType> results = new LinkedHashSet<>();
for (String s : tagsArray) {
- results.addAll(definitionsService.getActionTypeByTag(definitionsService.getTag(s), recursive));
+ Tag tag = definitionsService.getTag(s);
+ if (tag != null) {
+ results.addAll(definitionsService.getActionTypeByTag(tag, recursive));
+ }
}
return localizationHelper.generateActions(results, language);
}
@@ -258,7 +269,10 @@ public class DefinitionsServiceEndPoint {
String[] tagsArray = tags.split(",");
Set<ValueType> results = new LinkedHashSet<>();
for (String s : tagsArray) {
- results.addAll(definitionsService.getValueTypeByTag(definitionsService.getTag(s), recursive));
+ Tag tag = definitionsService.getTag(s);
+ if (tag != null) {
+ results.addAll(definitionsService.getValueTypeByTag(tag, recursive));
+ }
}
return localizationHelper.generateValueTypes(results, language);
}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/6832aae6/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
----------------------------------------------------------------------
diff --git a/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java b/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
index 884ac8d..6cb5d89 100644
--- a/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
+++ b/rest/src/main/java/org/apache/unomi/rest/LocalizationHelper.java
@@ -219,7 +219,7 @@ public class LocalizationHelper {
* @return a {@link RESTTag} based on the specified {@link Tag} and localized using the specified language
*/
public RESTTag generateTag(Tag tag, String language, boolean filterHidden) {
- if (filterHidden && tag.isHidden()) {
+ if (tag == null || (filterHidden && tag.isHidden())) {
return null;
}
RESTTag result = new RESTTag();
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/6832aae6/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
----------------------------------------------------------------------
diff --git a/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
index 7744652..b1a38a2 100644
--- a/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/services/DefinitionsServiceImpl.java
@@ -237,9 +237,6 @@ public class DefinitionsServiceImpl implements DefinitionsService, SynchronousBu
public Tag getTag(String tagId) {
Tag completeTag = tags.get(tagId);
- if (completeTag == null) {
- return null;
- }
return completeTag;
}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/6832aae6/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
----------------------------------------------------------------------
diff --git a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
index aa756b6..432e1f6 100644
--- a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
@@ -610,17 +610,20 @@ public class ProfileServiceImpl implements ProfileService, SynchronousBundleList
return propertyTypes;
}
- public Set<PropertyType> getPropertyTypeByTag(String tag, boolean includeFromSubtags) {
+ public Set<PropertyType> getPropertyTypeByTag(String tagId, boolean includeFromSubtags) {
Set<PropertyType> propertyTypes = new LinkedHashSet<PropertyType>();
- Collection<PropertyType> directPropertyTypes = persistenceService.query("tags", tag, "rank", PropertyType.class);
+ Collection<PropertyType> directPropertyTypes = persistenceService.query("tags", tagId, "rank", PropertyType.class);
if (directPropertyTypes != null) {
propertyTypes.addAll(directPropertyTypes);
}
if (includeFromSubtags) {
- for (Tag subTag : definitionsService.getTag(tag).getSubTags()) {
- Set<PropertyType> childPropertyTypes = getPropertyTypeByTag(subTag.getId(), true);
- propertyTypes.addAll(childPropertyTypes);
+ Tag tag = definitionsService.getTag(tagId);
+ if (tag != null) {
+ for (Tag subTag : tag.getSubTags()) {
+ Set<PropertyType> childPropertyTypes = getPropertyTypeByTag(subTag.getId(), true);
+ propertyTypes.addAll(childPropertyTypes);
+ }
}
}
return propertyTypes;