-
-
Save anonymous/bb457425728291ae7e7c to your computer and use it in GitHub Desktop.
Patch for JERSEY-2863
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 76d2972ed3926581f44fc3b4b8592d4dfcdd62d3 Mon Sep 17 00:00:00 2001 | |
From: Jean-Christophe Counio <jean-christophe.counio@oracle.com> | |
Date: Wed, 13 May 2015 13:59:03 -0700 | |
Subject: [PATCH] add values in path and query params in ELBuilder values | |
--- | |
.../glassfish/jersey/linking/ELLinkBuilder.java | 29 +++++++++++++--------- | |
.../jersey/linking/FieldProcessorTest.java | 9 ++++--- | |
.../jersey/linking/HeaderProcessorTest.java | 9 ++++--- | |
3 files changed, 27 insertions(+), 20 deletions(-) | |
diff --git a/incubator/declarative-linking/src/main/java/org/glassfish/jersey/linking/ELLinkBuilder.java b/incubator/declarative-linking/src/main/java/org/glassfish/jersey/linking/ELLinkBuilder.java | |
index 20fbe59..1861405 100644 | |
--- a/incubator/declarative-linking/src/main/java/org/glassfish/jersey/linking/ELLinkBuilder.java | |
+++ b/incubator/declarative-linking/src/main/java/org/glassfish/jersey/linking/ELLinkBuilder.java | |
@@ -108,7 +108,7 @@ final class ELLinkBuilder { | |
UriBuilder ub = applyLinkStyle(template, link.getLinkStyle(), uriInfo); | |
UriTemplateParser parser = new UriTemplateParser(template); | |
List<String> parameterNames = parser.getNames(); | |
- Map<String, Object> valueMap = getParameterValues(parameterNames, link, context); | |
+ Map<String, Object> valueMap = getParameterValues(parameterNames, link, context, uriInfo); | |
return ub.buildFromMap(valueMap); | |
} | |
@@ -131,24 +131,29 @@ final class ELLinkBuilder { | |
private static Map<String, Object> getParameterValues(List<String> parameterNames, | |
InjectLinkDescriptor linkField, | |
- LinkELContext context) { | |
+ LinkELContext context, | |
+ UriInfo uriInfo) { | |
Map<String, Object> values = new HashMap<>(); | |
for (String name : parameterNames) { | |
- String elExpression = getEL(name, linkField); | |
+ String elExpression = linkField.getBinding(name); | |
+ if (elExpression == null) { | |
+ String value = uriInfo.getPathParameters().getFirst(name); | |
+ if (value == null) { | |
+ value = uriInfo.getQueryParameters().getFirst(name); | |
+ } | |
+ if (value != null) { | |
+ values.put(name, value); | |
+ continue; | |
+ } | |
+ elExpression = "${" + ResponseContextResolver.INSTANCE_OBJECT + "." + name + "}"; | |
+ } | |
ValueExpression expr = expressionFactory.createValueExpression(context, | |
- elExpression, String.class); | |
+ elExpression, String.class); | |
Object value = expr.getValue(context); | |
values.put(name, value != null ? value.toString() : null); | |
- } | |
+ } | |
return values; | |
} | |
- private static String getEL(String name, InjectLinkDescriptor linkField) { | |
- String binding = linkField.getBinding(name); | |
- if (binding != null) { | |
- return binding; | |
- } | |
- return "${" + ResponseContextResolver.INSTANCE_OBJECT + "." + name + "}"; | |
- } | |
} | |
diff --git a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/FieldProcessorTest.java b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/FieldProcessorTest.java | |
index ccc5c24..99aee77 100644 | |
--- a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/FieldProcessorTest.java | |
+++ b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/FieldProcessorTest.java | |
@@ -60,6 +60,7 @@ import javax.ws.rs.core.PathSegment; | |
import javax.ws.rs.core.UriBuilder; | |
import javax.xml.bind.annotation.XmlTransient; | |
+import org.glassfish.jersey.internal.util.collection.MultivaluedStringMap; | |
import org.glassfish.jersey.linking.mapping.ResourceMappingContext; | |
import org.glassfish.jersey.server.ExtendedUriInfo; | |
@@ -136,22 +137,22 @@ public class FieldProcessorTest { | |
@Override | |
public MultivaluedMap<String, String> getPathParameters() { | |
- throw new UnsupportedOperationException("Not supported yet."); | |
+ return new MultivaluedStringMap(); | |
} | |
@Override | |
public MultivaluedMap<String, String> getPathParameters(boolean decode) { | |
- throw new UnsupportedOperationException("Not supported yet."); | |
+ return new MultivaluedStringMap(); | |
} | |
@Override | |
public MultivaluedMap<String, String> getQueryParameters() { | |
- throw new UnsupportedOperationException("Not supported yet."); | |
+ return new MultivaluedStringMap(); | |
} | |
@Override | |
public MultivaluedMap<String, String> getQueryParameters(boolean decode) { | |
- throw new UnsupportedOperationException("Not supported yet."); | |
+ return new MultivaluedStringMap(); | |
} | |
@Override | |
diff --git a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/HeaderProcessorTest.java b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/HeaderProcessorTest.java | |
index e117b17..1f38dd7 100644 | |
--- a/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/HeaderProcessorTest.java | |
+++ b/incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/HeaderProcessorTest.java | |
@@ -48,6 +48,7 @@ import java.util.regex.MatchResult; | |
import javax.ws.rs.core.MultivaluedMap; | |
import javax.ws.rs.core.PathSegment; | |
import javax.ws.rs.core.UriBuilder; | |
+import org.glassfish.jersey.internal.util.collection.MultivaluedStringMap; | |
import org.glassfish.jersey.linking.InjectLink.Extension; | |
import org.glassfish.jersey.linking.mapping.ResourceMappingContext; | |
@@ -114,19 +115,19 @@ public class HeaderProcessorTest { | |
} | |
public MultivaluedMap<String, String> getPathParameters() { | |
- throw new UnsupportedOperationException("Not supported yet."); | |
+ return new MultivaluedStringMap(); | |
} | |
public MultivaluedMap<String, String> getPathParameters(boolean decode) { | |
- throw new UnsupportedOperationException("Not supported yet."); | |
+ return new MultivaluedStringMap(); | |
} | |
public MultivaluedMap<String, String> getQueryParameters() { | |
- throw new UnsupportedOperationException("Not supported yet."); | |
+ return new MultivaluedStringMap(); | |
} | |
public MultivaluedMap<String, String> getQueryParameters(boolean decode) { | |
- throw new UnsupportedOperationException("Not supported yet."); | |
+ return new MultivaluedStringMap(); | |
} | |
public List<String> getMatchedURIs() { | |
-- | |
1.9.3 (Apple Git-50) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment