Skip to content
This repository was archived by the owner on May 28, 2018. It is now read-only.

Commit 36f09f3

Browse files
author
Jean-Christophe Counio
committed
JERSEY-2863 Get values from uriInfo instead of having to declare them in bindings
1 parent fe6e1e0 commit 36f09f3

File tree

3 files changed

+50
-20
lines changed

3 files changed

+50
-20
lines changed

incubator/declarative-linking/src/main/java/org/glassfish/jersey/linking/ELLinkBuilder.java

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static URI buildURI(InjectLinkDescriptor link,
108108
UriBuilder ub = applyLinkStyle(template, link.getLinkStyle(), uriInfo);
109109
UriTemplateParser parser = new UriTemplateParser(template);
110110
List<String> parameterNames = parser.getNames();
111-
Map<String, Object> valueMap = getParameterValues(parameterNames, link, context);
111+
Map<String, Object> valueMap = getParameterValues(parameterNames, link, context, uriInfo);
112112
return ub.buildFromMap(valueMap);
113113
}
114114

@@ -131,24 +131,29 @@ private static UriBuilder applyLinkStyle(String template, InjectLink.Style style
131131

132132
private static Map<String, Object> getParameterValues(List<String> parameterNames,
133133
InjectLinkDescriptor linkField,
134-
LinkELContext context) {
134+
LinkELContext context,
135+
UriInfo uriInfo) {
135136
Map<String, Object> values = new HashMap<>();
136137
for (String name : parameterNames) {
137-
String elExpression = getEL(name, linkField);
138+
String elExpression = linkField.getBinding(name);
139+
if (elExpression == null) {
140+
String value = uriInfo.getPathParameters().getFirst(name);
141+
if (value == null) {
142+
value = uriInfo.getQueryParameters().getFirst(name);
143+
}
144+
if (value != null) {
145+
values.put(name, value);
146+
continue;
147+
}
148+
elExpression = "${" + ResponseContextResolver.INSTANCE_OBJECT + "." + name + "}";
149+
}
138150
ValueExpression expr = expressionFactory.createValueExpression(context,
139-
elExpression, String.class);
151+
elExpression, String.class);
140152

141153
Object value = expr.getValue(context);
142154
values.put(name, value != null ? value.toString() : null);
143-
}
155+
}
144156
return values;
145157
}
146158

147-
private static String getEL(String name, InjectLinkDescriptor linkField) {
148-
String binding = linkField.getBinding(name);
149-
if (binding != null) {
150-
return binding;
151-
}
152-
return "${" + ResponseContextResolver.INSTANCE_OBJECT + "." + name + "}";
153-
}
154159
}

incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/FieldProcessorTest.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161

6262
import javax.xml.bind.annotation.XmlTransient;
6363

64+
import org.glassfish.jersey.internal.util.collection.MultivaluedStringMap;
6465
import org.glassfish.jersey.linking.mapping.ResourceMappingContext;
6566
import org.glassfish.jersey.server.ExtendedUriInfo;
6667
import org.glassfish.jersey.server.model.Resource;
@@ -84,6 +85,8 @@ public class FieldProcessorTest {
8485

8586
private static final String baseURI = "http://example.com/application/resources";
8687

88+
private MultivaluedMap queryParams = new MultivaluedStringMap();
89+
8790
@Override
8891
public String getPath() {
8992
throw new UnsupportedOperationException("Not supported yet.");
@@ -136,22 +139,22 @@ public UriBuilder getBaseUriBuilder() {
136139

137140
@Override
138141
public MultivaluedMap<String, String> getPathParameters() {
139-
throw new UnsupportedOperationException("Not supported yet.");
142+
return new MultivaluedStringMap();
140143
}
141144

142145
@Override
143146
public MultivaluedMap<String, String> getPathParameters(boolean decode) {
144-
throw new UnsupportedOperationException("Not supported yet.");
147+
return new MultivaluedStringMap();
145148
}
146149

147150
@Override
148151
public MultivaluedMap<String, String> getQueryParameters() {
149-
throw new UnsupportedOperationException("Not supported yet.");
152+
return queryParams;
150153
}
151154

152155
@Override
153156
public MultivaluedMap<String, String> getQueryParameters(boolean decode) {
154-
throw new UnsupportedOperationException("Not supported yet.");
157+
return queryParams;
155158
}
156159

157160
@Override
@@ -646,6 +649,13 @@ public String getQueryParam2() {
646649
public String uri;
647650
}
648651

652+
public static class QueryResourceBeanNoBindings {
653+
//query parameters will be populated from uriInfo
654+
//JERSEY-2863
655+
@InjectLink(resource = QueryResource.class, method = "getB")
656+
public String uri;
657+
}
658+
649659
@Test
650660
public void testQueryResource() {
651661
LOG.info("QueryResource");
@@ -664,6 +674,20 @@ public void testDoubleQueryResource() {
664674
assertEquals("/application/resources/a/b?query=queryExample&query2=queryExample2", testClass.uri);
665675
}
666676

677+
@Test
678+
public void testQueryResourceWithoutBindings() {
679+
LOG.info("QueryResource");
680+
FieldProcessor<QueryResourceBeanNoBindings> instance = new FieldProcessor(QueryResourceBeanNoBindings.class);
681+
QueryResourceBeanNoBindings testClass = new QueryResourceBeanNoBindings();
682+
mockUriInfo.getQueryParameters().putSingle("query", "queryExample");
683+
mockUriInfo.getQueryParameters().putSingle("query2", "queryExample2");
684+
assertEquals("queryExample", mockUriInfo.getQueryParameters().getFirst("query"));
685+
instance.processLinks(testClass, mockUriInfo, mockRmc);
686+
assertEquals("/application/resources/a/b?query=queryExample&query2=queryExample2", testClass.uri);
687+
//clean mock
688+
mockUriInfo.getQueryParameters().clear();
689+
}
690+
667691
public static class TestClassK {
668692

669693
public static final ZipEntry zipEntry = new ZipEntry("entry");

incubator/declarative-linking/src/test/java/org/glassfish/jersey/linking/HeaderProcessorTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import javax.ws.rs.core.PathSegment;
5050
import javax.ws.rs.core.UriBuilder;
5151

52+
import org.glassfish.jersey.internal.util.collection.MultivaluedStringMap;
5253
import org.glassfish.jersey.linking.InjectLink.Extension;
5354
import org.glassfish.jersey.linking.mapping.ResourceMappingContext;
5455
import org.glassfish.jersey.server.ExtendedUriInfo;
@@ -114,19 +115,19 @@ public UriBuilder getBaseUriBuilder() {
114115
}
115116

116117
public MultivaluedMap<String, String> getPathParameters() {
117-
throw new UnsupportedOperationException("Not supported yet.");
118+
return new MultivaluedStringMap();
118119
}
119120

120121
public MultivaluedMap<String, String> getPathParameters(boolean decode) {
121-
throw new UnsupportedOperationException("Not supported yet.");
122+
return new MultivaluedStringMap();
122123
}
123124

124125
public MultivaluedMap<String, String> getQueryParameters() {
125-
throw new UnsupportedOperationException("Not supported yet.");
126+
return new MultivaluedStringMap();
126127
}
127128

128129
public MultivaluedMap<String, String> getQueryParameters(boolean decode) {
129-
throw new UnsupportedOperationException("Not supported yet.");
130+
return new MultivaluedStringMap();
130131
}
131132

132133
public List<String> getMatchedURIs() {

0 commit comments

Comments
 (0)