diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/AbstractSailingServerResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/AbstractSailingServerResource.java index 936faae6193..e2c844448ee 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/AbstractSailingServerResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/AbstractSailingServerResource.java @@ -96,4 +96,14 @@ public abstract class AbstractSailingServerResource { bigDecimal = bigDecimal.setScale(places, RoundingMode.HALF_UP); return bigDecimal.doubleValue(); } + + /** + * Restores original URL parameter which uses the escape "__" for "/" + * + * @param toRestore url parameter as string containing "__" instead of "/" + * @return restored url parameter containing "/" instead of "__" + */ + protected String restoreEscapedParameter(String toRestore) { + return toRestore != null && toRestore.contains(SLASH_ENCODING) ? toRestore.replace(SLASH_ENCODING, "/") : toRestore; + } } diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/TagsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/TagsResource.java index e7ba6299db7..9e2b75ce4a9 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/TagsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/TagsResource.java @@ -2,6 +2,7 @@ package com.sap.sailing.server.gateway.jaxrs.api; import java.util.ArrayList; import java.util.List; +import java.util.logging.Logger; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -152,6 +153,8 @@ public class TagsResource extends AbstractSailingServerResource { } } + private static final Logger logger = Logger.getLogger(TagsResource.class.getName()); + private final TagDTODeSerializer serializer; // private final boolean enforceSecurityChecks; @@ -172,8 +175,14 @@ public class TagsResource extends AbstractSailingServerResource { @GET @Produces("application/json;charset=UTF-8") @Path("/{leaderboardName}/{raceColumnName}/{fleetName}") - public Response getTags(@PathParam("leaderboardName") String leaderboardName, - @PathParam("raceColumnName") String raceColumnName, @PathParam("fleetName") String fleetName) { + public Response getTags(@PathParam("leaderboardName") String leaderboardNameParameter, + @PathParam("raceColumnName") String raceColumnNameParameter, + @PathParam("fleetName") String fleetNameParameter) { + // restore escaped parameters + String leaderboardName = restoreEscapedParameter(leaderboardNameParameter); + String raceColumnName = restoreEscapedParameter(raceColumnNameParameter); + String fleetName = restoreEscapedParameter(fleetNameParameter); + // default response Response response = Response.noContent().build(); List tags = new ArrayList(); @@ -209,7 +218,7 @@ public class TagsResource extends AbstractSailingServerResource { List privateTags = serializer.deserialize(jsonArray); tags.addAll(privateTags); } catch (ParseException e) { - // TODO: add error handling, could not read private tags + logger.warning("Could not parse private tags received from JSON in UserStore!"); } } }