You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by nf...@apache.org on 2009/07/15 13:59:00 UTC
svn commit: r794241 - in /incubator/wink/trunk:
wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/
wink-common/src/main/java/org/apache/wink/common/internal/registry/
wink-common/src/main/java/org/apache/wink/common/internal/re...
Author: nfischer
Date: Wed Jul 15 11:58:59 2009
New Revision: 794241
URL: http://svn.apache.org/viewvc?rev=794241&view=rev
Log:
Apply @DefaultValue also to methods [WINK-98]
Added:
incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java
Modified:
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java Wed Jul 15 11:58:59 2009
@@ -314,7 +314,7 @@
Type[] paramTypes = method.getGenericParameterTypes();
for (int pos = 0, limit = paramTypes.length; pos < limit; pos++) {
Injectable fp = InjectableFactory.getInstance().create(paramTypes[pos],
- parameterAnnotations[pos], method, false);
+ parameterAnnotations[pos], method, false, null);
formalParameters.add(fp);
}
}
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java Wed Jul 15 11:58:59 2009
@@ -70,7 +70,7 @@
}
public Injectable create(Type genericType, Annotation[] annotations, Member member,
- boolean enclosingEncoded) {
+ boolean encoded, String defaultValue) {
Class<?> classType = GenericsUtils.getClassType(genericType);
MatrixParam matrix = null;
@@ -80,8 +80,6 @@
CookieParam cookie = null;
FormParam form = null;
Context context = null;
- Encoded encodedAnn = null;
- DefaultValue defaultValueAnn = null;
Injectable injectable = null;
int annotationsCounter = 0;
@@ -108,9 +106,9 @@
context = (Context) annotations[i];
++annotationsCounter;
} else if (annotations[i].annotationType().equals(Encoded.class)) {
- encodedAnn = (Encoded) annotations[i];
+ encoded = true;
} else if (annotations[i].annotationType().equals(DefaultValue.class)) {
- defaultValueAnn = (DefaultValue) annotations[i];
+ defaultValue = ((DefaultValue) annotations[i]).value();
}
}
@@ -143,12 +141,8 @@
if (injectable instanceof BoundInjectable) {
BoundInjectable binding = (BoundInjectable) injectable;
- if (enclosingEncoded || encodedAnn != null) {
- binding.setEncoded(true);
- }
- if (defaultValueAnn != null) {
- binding.setDefaultValue(defaultValueAnn.value());
- }
+ binding.setEncoded(encoded);
+ binding.setDefaultValue(defaultValue);
}
return injectable;
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java Wed Jul 15 11:58:59 2009
@@ -34,12 +34,15 @@
private List<String> paths;
private Set<MediaType> consumes;
private Set<MediaType> produces;
- private boolean encoded = false;
+ private boolean encoded;
+ private String defaultValue;
public AbstractMetadata() {
paths = new ArrayList<String>();
consumes = new LinkedHashSet<MediaType>();
produces = new LinkedHashSet<MediaType>();
+ encoded = false;
+ defaultValue = null;
}
public String getPath() {
@@ -91,4 +94,12 @@
public boolean isEncoded() {
return encoded;
}
+
+ public String getDefaultValue() {
+ return defaultValue;
+ }
+
+ public void setDefaultValue(String defaultValue) {
+ this.defaultValue = defaultValue;
+ }
}
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java Wed Jul 15 11:58:59 2009
@@ -128,7 +128,7 @@
for (int pos = 0, limit = paramTypes.length; pos < limit; pos++) {
Injectable fp = InjectableFactory.getInstance().create(paramTypes[pos],
parameterAnnotations[pos], constructor,
- getMetadata().isEncoded() || constructorMetadata.isEncoded());
+ getMetadata().isEncoded() || constructorMetadata.isEncoded(), null);
if (!isConstructorParameterValid(fp)) {
continue L1;
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java Wed Jul 15 11:58:59 2009
@@ -30,6 +30,7 @@
import java.util.Set;
import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
import javax.ws.rs.Encoded;
import javax.ws.rs.HttpMethod;
import javax.ws.rs.Path;
@@ -79,7 +80,7 @@
@Override
protected final Injectable parseAccessibleObject(AccessibleObject field, Type fieldType) {
Injectable injectable = InjectableFactory.getInstance().create(fieldType,
- field.getAnnotations(), (Member) field, getMetadata().isEncoded());
+ field.getAnnotations(), (Member) field, getMetadata().isEncoded(), null);
if (injectable.getParamType() == Injectable.ParamType.ENTITY) {
// EntityParam should be ignored for fields (see JSR-311 3.2)
return null;
@@ -213,6 +214,12 @@
hasAnnotation = true;
metadata.addProduces(MediaType.valueOf(mediaType));
}
+
+ String defaultValue = getDefaultValue(method);
+ if (defaultValue != null) {
+ metadata.setDefaultValue(defaultValue);
+ hasAnnotation = true;
+ }
if (method.getAnnotation(Encoded.class) != null) {
metadata.setEncoded(true);
@@ -328,6 +335,14 @@
}
return null;
}
+
+ private String getDefaultValue(Method method) {
+ DefaultValue defaultValueAnn = method.getAnnotation(DefaultValue.class);
+ if (defaultValueAnn != null) {
+ return defaultValueAnn.value();
+ }
+ return null;
+ }
private void parseMethodParameters(Method method, MethodMetadata methodMetadata) {
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
@@ -336,7 +351,8 @@
for (int pos = 0, limit = paramTypes.length; pos < limit; pos++) {
Injectable fp = InjectableFactory.getInstance().create(paramTypes[pos],
parameterAnnotations[pos], method,
- getMetadata().isEncoded() || methodMetadata.isEncoded());
+ getMetadata().isEncoded() || methodMetadata.isEncoded(),
+ methodMetadata.getDefaultValue());
if (fp.getParamType() == Injectable.ParamType.ENTITY) {
if (entityParamExists) {
// we are allowed to have only one entity parameter
Added: incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java?rev=794241&view=auto
==============================================================================
--- incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java (added)
+++ incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java Wed Jul 15 11:58:59 2009
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.wink.server.internal.registry;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.wink.server.internal.servlet.MockServletInvocationTest;
+import org.apache.wink.test.mock.MockRequestConstructor;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+public class DefaultValueTest extends MockServletInvocationTest {
+
+ private static final String DEFAULT_VALUE = "MyDefaultValue";
+ private static List<Class<?>> resources = new LinkedList<Class<?>>();
+
+ static {
+ for (Class<?> cls : DefaultValueTest.class.getClasses()) {
+ if (cls.getSimpleName().endsWith("Resource")) {
+ resources.add(cls);
+ }
+ }
+ }
+
+ @Override
+ protected Class<?>[] getClasses() {
+ return resources.toArray(new Class<?>[resources.size()]);
+ }
+
+ @Path("/a")
+ public static class AResource {
+
+ @QueryParam("hulu")
+ String noDefault;
+
+ @DefaultValue(DEFAULT_VALUE)
+ @QueryParam("bulu")
+ String defaultValue;
+
+ @QueryParam("mulu")
+ Set<String> noDefaultSet;
+
+ @DefaultValue(DEFAULT_VALUE)
+ @QueryParam("mulu")
+ Set<String> defaultSet;
+
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ public String get(@DefaultValue("12345") @QueryParam("qulu") int defaultQueryParam,
+ @HeaderParam("hulu") int noDefaultQueryParam) {
+ return noDefault + ":"
+ + defaultValue
+ + ":"
+ + noDefaultSet
+ + ":"
+ + defaultSet
+ + ":"
+ + defaultQueryParam
+ + ":"
+ + noDefaultQueryParam;
+ }
+
+ @GET
+ @Produces(MediaType.TEXT_HTML)
+ @DefaultValue("98765")
+ public String getParam(@QueryParam("qulu") Integer qulu, @HeaderParam("hulu") int x) {
+ return noDefault + ":"
+ + defaultValue
+ + ":"
+ + noDefaultSet
+ + ":"
+ + defaultSet
+ + ":"
+ + qulu
+ + ":"
+ + x;
+ }
+
+ }
+
+ public void testAll() throws Exception {
+ MockHttpServletRequest mockRequest =
+ MockRequestConstructor.constructMockRequest("GET", "/a", MediaType.TEXT_PLAIN);
+ MockHttpServletResponse mockResponse = invoke(mockRequest);
+ assertEquals(200, mockResponse.getStatus());
+ assertEquals("null:" + DEFAULT_VALUE + ":[]:[" + DEFAULT_VALUE + "]:12345:0", mockResponse
+ .getContentAsString());
+
+ // Test @DefaultValue on method
+ mockRequest = MockRequestConstructor.constructMockRequest("GET", "/a", MediaType.TEXT_HTML);
+ mockResponse = invoke(mockRequest);
+ assertEquals(200, mockResponse.getStatus());
+ assertEquals("null:" + DEFAULT_VALUE + ":[]:[" + DEFAULT_VALUE + "]:98765:98765",
+ mockResponse.getContentAsString());
+ }
+}