You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by bl...@apache.org on 2010/02/28 21:53:45 UTC
svn commit: r917291 - in /incubator/wink/trunk:
wink-common/src/main/java/org/apache/wink/common/internal/registry/
wink-server/src/main/java/org/apache/wink/server/internal/
wink-server/src/main/java/org/apache/wink/server/internal/handlers/
wink-serv...
Author: bluk
Date: Sun Feb 28 20:53:45 2010
New Revision: 917291
URL: http://svn.apache.org/viewvc?rev=917291&view=rev
Log:
Add ability to inject @Context Application class
Removed restriction on only allowing interfaces
on the message context.
Added:
incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/jaxrs/ApplicationInjectionTest.java
Modified:
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ContextAccessor.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/DeploymentConfiguration.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/ServerMessageContext.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/servlet/RestServlet.java
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ContextAccessor.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ContextAccessor.java?rev=917291&r1=917290&r2=917291&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ContextAccessor.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ContextAccessor.java Sun Feb 28 20:53:45 2010
@@ -62,13 +62,6 @@
@SuppressWarnings("unchecked")
public <T> T getContextFromAccessor(final Class<T> contextClass, RuntimeContext runtimeContext) {
- // the context class must be an interface.
- // we do this check just so we can throw a nice exception.
- if (contextClass.isInterface() == false) {
- throw new IllegalArgumentException(String.format("%s must be an interface",
- contextClass));
- }
-
// return context directly
if (runtimeContext != null) {
try {
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/DeploymentConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/DeploymentConfiguration.java?rev=917291&r1=917290&r2=917291&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/DeploymentConfiguration.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/DeploymentConfiguration.java Sun Feb 28 20:53:45 2010
@@ -118,6 +118,9 @@
private ServletContext servletContext;
private FilterConfig filterConfig;
+ // jax-rs application subclass
+ private List<Application> applications;
+
private String[] httpMethodOverrideHeaders;
/**
@@ -259,8 +262,16 @@
}
public void addApplication(Application application, boolean isSystemApplication) {
+ if (applications == null) {
+ applications = new ArrayList<Application>(1);
+ }
new ApplicationProcessor(application, resourceRegistry, providersRegistry,
isSystemApplication).process();
+ applications.add(application);
+ }
+
+ public List<Application> getApplications() {
+ return applications;
}
// init methods
@@ -337,8 +348,8 @@
MediaTypeMapperFactory handlersFactory = handlerFactoryClass.newInstance();
mediaTypeMapper.addMappings(handlersFactory.getMediaTypeMappings());
} catch (ClassNotFoundException e) {
- logger.error(Messages
- .getMessage("isNotAClassWithMsgFormat", mediaTypeMapperFactoryClassName), e);
+ logger.error(Messages.getMessage("isNotAClassWithMsgFormat",
+ mediaTypeMapperFactoryClassName), e);
} catch (InstantiationException e) {
logger.error(Messages.getMessage("classInstantiationExceptionWithMsgFormat",
mediaTypeMapperFactoryClassName), e);
@@ -361,7 +372,9 @@
if (handlersFactoryClassName != null) {
try {
logger.debug("Handlers Factory Class is: {}", handlersFactoryClassName);
- // use ClassUtils.getClass instead of Class.forName so we have classloader visibility into the Web module in J2EE environments
+ // use ClassUtils.getClass instead of Class.forName so we have
+ // classloader visibility into the Web module in J2EE
+ // environments
Class<HandlersFactory> handlerFactoryClass =
(Class<HandlersFactory>)ClassUtils.getClass(handlersFactoryClassName);
HandlersFactory handlersFactory = handlerFactoryClass.newInstance();
@@ -377,13 +390,14 @@
errorUserHandlers = (List<ResponseHandler>)handlersFactory.getErrorHandlers();
}
} catch (ClassNotFoundException e) {
- logger.error(Messages.getMessage("isNotAClassWithMsgFormat", handlersFactoryClassName), e);
+ logger.error(Messages.getMessage("isNotAClassWithMsgFormat",
+ handlersFactoryClassName), e);
} catch (InstantiationException e) {
logger.error(Messages.getMessage("classInstantiationExceptionWithMsgFormat",
handlersFactoryClassName), e);
} catch (IllegalAccessException e) {
- logger
- .error(Messages.getMessage("classIllegalAccessWithMsgFormat", handlersFactoryClassName), e);
+ logger.error(Messages.getMessage("classIllegalAccessWithMsgFormat",
+ handlersFactoryClassName), e);
}
}
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/ServerMessageContext.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/ServerMessageContext.java?rev=917291&r1=917290&r2=917291&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/ServerMessageContext.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/handlers/ServerMessageContext.java Sun Feb 28 20:53:45 2010
@@ -22,6 +22,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.List;
import java.util.Properties;
import javax.servlet.FilterConfig;
@@ -31,6 +32,7 @@
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
+import javax.ws.rs.core.Application;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
@@ -85,6 +87,10 @@
setAttribute(ProvidersRegistry.class, configuration.getProvidersRegistry());
initContexts();
+ List<Application> apps = configuration.getApplications();
+ if (apps != null && !apps.isEmpty()) {
+ setAttribute(Application.class, apps.get(0));
+ }
}
private void initContexts() {
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/servlet/RestServlet.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/servlet/RestServlet.java?rev=917291&r1=917290&r2=917291&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/servlet/RestServlet.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/servlet/RestServlet.java Sun Feb 28 20:53:45 2010
@@ -112,9 +112,9 @@
protected RequestProcessor createRequestProcessor() throws ClassNotFoundException,
InstantiationException, IllegalAccessException, IOException {
DeploymentConfiguration deploymentConfiguration = getDeploymentConfiguration();
+ deploymentConfiguration.addApplication(getApplication(), false);
RequestProcessor requestProcessor = new RequestProcessor(deploymentConfiguration);
logger.debug("Creating request processor {} for servlet {}", requestProcessor, this);
- deploymentConfiguration.addApplication(getApplication(), false);
return requestProcessor;
}
Added: incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/jaxrs/ApplicationInjectionTest.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/jaxrs/ApplicationInjectionTest.java?rev=917291&view=auto
==============================================================================
--- incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/jaxrs/ApplicationInjectionTest.java (added)
+++ incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/jaxrs/ApplicationInjectionTest.java Sun Feb 28 20:53:45 2010
@@ -0,0 +1,76 @@
+/*
+ * 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.jaxrs;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.Context;
+
+import org.apache.wink.server.internal.servlet.MockServletInvocationTest;
+import org.apache.wink.test.mock.MockRequestConstructor;
+import org.junit.Test;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+public class ApplicationInjectionTest extends MockServletInvocationTest {
+
+ @Override
+ protected String getApplicationClassName() {
+ return MyApplication.class.getName();
+ }
+
+ public static class MyApplication extends Application {
+
+ @Override
+ public Set<Class<?>> getClasses() {
+ Set<Class<?>> classes = new HashSet<Class<?>>();
+ classes.add(TestResource.class);
+ return classes;
+ }
+
+ }
+
+ @Path("/test")
+ public static class TestResource {
+ @Context
+ Application app;
+
+ @GET
+ public String get() {
+ assertNotNull(app);
+ assertTrue(app instanceof MyApplication);
+ return "hello";
+ }
+ }
+
+ @Test
+ public void testHttpHeaderContext() throws Exception {
+ MockHttpServletRequest servletRequest =
+ MockRequestConstructor.constructMockRequest("GET", "/test", "*/*");
+ MockHttpServletResponse response = invoke(servletRequest);
+ assertEquals(200, response.getStatus());
+ assertEquals("hello", response.getContentAsString());
+ }
+
+}