Author: jharting
Date: 2010-06-03 08:18:05 -0400 (Thu, 03 Jun 2010)
New Revision: 13010
Added:
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/ContextDataResource.java
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/test/ContextDataTest.java
Modified:
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml
branches/community/Seam_2_2/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java
Log:
JBSEAM-4642
Added:
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/ContextDataResource.java
===================================================================
---
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/ContextDataResource.java
(rev 0)
+++
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/resteasy/ContextDataResource.java 2010-06-03
12:18:05 UTC (rev 13010)
@@ -0,0 +1,35 @@
+package org.jboss.seam.example.restbay.resteasy;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.ext.Providers;
+
+import org.jboss.resteasy.spi.ResteasyProviderFactory;
+
+@Path("/contextData")
+@Produces("text/plain")
+public class ContextDataResource
+{
+ @GET
+ @Path("/providers")
+ public boolean providersAvailable()
+ {
+ return ResteasyProviderFactory.getContextData(Providers.class) != null;
+ }
+
+ @GET
+ @Path("/registry")
+ public boolean registryAvailable()
+ {
+ return ResteasyProviderFactory.getContextData(Providers.class) != null;
+ }
+
+ @GET
+ @Path("/dispatcher")
+ public boolean dispatcherAvailable()
+ {
+ return ResteasyProviderFactory.getContextData(Providers.class) != null;
+ }
+
+}
Added:
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/test/ContextDataTest.java
===================================================================
---
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/test/ContextDataTest.java
(rev 0)
+++
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/test/ContextDataTest.java 2010-06-03
12:18:05 UTC (rev 13010)
@@ -0,0 +1,50 @@
+package org.jboss.seam.example.restbay.test;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
+import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
+import org.jboss.seam.mock.ResourceRequestEnvironment;
+import org.jboss.seam.mock.SeamTest;
+import org.jboss.seam.mock.ResourceRequestEnvironment.Method;
+import org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * @author Jozef Hartinger
+ */
+public class ContextDataTest extends SeamTest
+{
+ @DataProvider(name = "contextDataTypes")
+ public Object[][] getContextDataTypePaths()
+ {
+ return new String[][]{ { "/providers" }, { "/registry" }, {
"/dispatcher" } };
+ }
+
+ @Test(dataProvider = "contextDataTypes")
+ public void testContextData(String pathSegment) throws Exception
+ {
+ final String path = "/restv1/contextData" + pathSegment;
+
+ new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, path)
+ {
+
+ @Override
+ protected void prepareRequest(EnhancedMockHttpServletRequest request)
+ {
+ super.prepareRequest(request);
+ request.addHeader("Accept", "text/plain");
+ }
+
+ @Override
+ protected void onResponse(EnhancedMockHttpServletResponse response)
+ {
+ assertEquals(response.getStatus(), 200, "Unexpected response
code.");
+ assertEquals(response.getContentAsString(), "true",
"Unexpected response.");
+ }
+
+ }.run();
+ }
+}
Modified:
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml
===================================================================
---
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml 2010-06-03
10:02:18 UTC (rev 13009)
+++
branches/community/Seam_2_2/examples/restbay/src/org/jboss/seam/example/restbay/test/testng.xml 2010-06-03
12:18:05 UTC (rev 13010)
@@ -37,6 +37,12 @@
<class
name="org.jboss.seam.example.restbay.test.SubresourceTest"/>
</classes>
</test>
+
+ <test name="RestBay Context Data">
+ <classes>
+ <class
name="org.jboss.seam.example.restbay.test.ContextDataTest"/>
+ </classes>
+ </test>
<test name="RestBay DBUnit Integration">
Modified:
branches/community/Seam_2_2/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java
===================================================================
---
branches/community/Seam_2_2/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java 2010-06-03
10:02:18 UTC (rev 13009)
+++
branches/community/Seam_2_2/src/resteasy/org/jboss/seam/resteasy/ResteasyBootstrap.java 2010-06-03
12:18:05 UTC (rev 13010)
@@ -26,7 +26,9 @@
import org.jboss.resteasy.core.ThreadLocalResteasyProviderFactory;
import org.jboss.resteasy.plugins.providers.RegisterBuiltin;
import org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory;
+import org.jboss.resteasy.spi.Registry;
import org.jboss.resteasy.spi.ResourceFactory;
+import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.jboss.resteasy.spi.StringConverter;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
@@ -53,8 +55,11 @@
import java.lang.annotation.Annotation;
import java.util.Collection;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
+import javax.ws.rs.ext.Providers;
+
/**
* Detects (through scanning and configuration) JAX-RS resources and providers, then
* registers them with RESTEasy.
@@ -108,6 +113,13 @@
// TODO: How does that actually work? It's never used because the dispatcher is
created with the original one
SeamResteasyProviderFactory.setInstance(new
ThreadLocalResteasyProviderFactory(providerFactory));
+ // Put Providers, Registry and Dispatcher into RESTEasy context.
+ dispatcher.getDefaultContextObjects().put(Providers.class, providerFactory);
+ dispatcher.getDefaultContextObjects().put(Registry.class,
dispatcher.getRegistry());
+ dispatcher.getDefaultContextObjects().put(Dispatcher.class, dispatcher);
+ Map contextDataMap = SeamResteasyProviderFactory.getContextDataMap();
+ contextDataMap.putAll(dispatcher.getDefaultContextObjects());
+
// Seam can scan the classes for us, we just have to list them in
META-INF/seam-deployment.properties
DeploymentStrategy deployment = (DeploymentStrategy)
Component.getInstance("deploymentStrategy");
AnnotationDeploymentHandler handler =