Skip to content
Browse files

AS7-4208 Inconsistent behaviour when dealing with resteasy scanning c…

…ontext params
  • Loading branch information...
1 parent 4781044 commit b3a1e8b587ec620982d2ff5218708f52587ba917 @stuartwdouglas stuartwdouglas committed
View
12 jaxrs/src/main/java/org/jboss/as/jaxrs/JaxrsMessages.java
@@ -22,14 +22,14 @@
package org.jboss.as.jaxrs;
+import javax.ws.rs.core.Application;
+
import org.jboss.as.server.deployment.DeploymentUnitProcessingException;
import org.jboss.logging.Cause;
import org.jboss.logging.Message;
import org.jboss.logging.MessageBundle;
import org.jboss.logging.Messages;
-import javax.ws.rs.core.Application;
-
/**
* Date: 05.11.2011
*
@@ -47,7 +47,6 @@
* Creates an exception indicating the JAX-RS application class could not be loaded.
*
* @param cause the cause of the error.
- *
* @return a {@link DeploymentUnitProcessingException} for the error.
*/
@Message(id = 11230, value = "Could not load JAX-RS Application class")
@@ -58,7 +57,6 @@
*
* @param app1 the first application.
* @param app2 the second application.
- *
* @return a {@link DeploymentUnitProcessingException} for the error.
*/
@Message(id = 11231, value = "More than one Application class found in deployment %s and %s")
@@ -68,7 +66,6 @@
* A message indicating only one JAX-RS application class is allowed.
*
* @param sb a builder with application classes.
- *
* @return the message.
*/
@Message(id = 11232, value = "Only one JAX-RS Application Class allowed. %s")
@@ -84,12 +81,15 @@
/**
* JAX-RS resource @Path annotation is on a class or interface that is not a view
- * @param type The class with the annotation
+ *
+ * @param type The class with the annotation
* @param ejbName The ejb
* @return
*/
@Message(id = 11234, value = "JAX-RS resource %s does not correspond to a view on the EJB %s. @Path annotations can only be placed on classes or interfaces that represent a local, remote or no-interface view of an EJB.")
DeploymentUnitProcessingException typeNameNotAnEjbView(String type, String ejbName);
+ @Message(id = 11235, value = "Invalid value for parameter %s: %s")
+ DeploymentUnitProcessingException invalidParamValue(String param, String value);
}
View
11 jaxrs/src/main/java/org/jboss/as/jaxrs/deployment/JaxrsIntegrationProcessor.java
@@ -25,7 +25,6 @@
import org.jboss.metadata.web.jboss.JBossWebMetaData;
import org.jboss.metadata.web.spec.FilterMetaData;
import org.jboss.metadata.web.spec.ServletMappingMetaData;
-import org.jboss.modules.Module;
import org.jboss.modules.ModuleIdentifier;
import org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher;
import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters;
@@ -47,7 +46,6 @@
@Override
public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
- final Module module = deploymentUnit.getAttachment(Attachments.MODULE);
if (!JaxrsDeploymentMarker.isJaxrsDeployment(deploymentUnit)) {
return;
@@ -76,13 +74,10 @@ public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitPro
final ParamValueMetaData param = it.next();
if (param.getParamName().equals(RESTEASY_SCAN)) {
it.remove();
- JAXRS_LOGGER.resteasyScanWarning(RESTEASY_SCAN);
} else if (param.getParamName().equals(RESTEASY_SCAN_RESOURCES)) {
it.remove();
- JAXRS_LOGGER.resteasyScanWarning(RESTEASY_SCAN_RESOURCES);
} else if (param.getParamName().equals(RESTEASY_SCAN_PROVIDERS)) {
it.remove();
- JAXRS_LOGGER.resteasyScanWarning(RESTEASY_SCAN_PROVIDERS);
}
}
}
@@ -155,12 +150,6 @@ public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitPro
if (resteasy.hasBootClasses() || resteasy.isDispatcherCreated())
return;
- //if there are no JAX-RS classes in the app just return
- if (resteasy.getScannedApplicationClass() == null
- && resteasy.getScannedJndiComponentResources().isEmpty()
- && resteasy.getScannedProviderClasses().isEmpty()
- && resteasy.getScannedResourceClasses().isEmpty()) return;
-
boolean useScannedClass = false;
String servletName;
if (resteasy.getScannedApplicationClass() == null) {
View
36 jaxrs/src/main/java/org/jboss/as/jaxrs/deployment/JaxrsScanningProcessor.java
@@ -21,9 +21,6 @@
*/
package org.jboss.as.jaxrs.deployment;
-import static org.jboss.as.jaxrs.JaxrsLogger.JAXRS_LOGGER;
-import static org.jboss.as.jaxrs.JaxrsMessages.MESSAGES;
-
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
@@ -36,6 +33,7 @@
import javax.ws.rs.core.Application;
import org.jboss.as.jaxrs.JaxrsAnnotations;
+import org.jboss.as.jaxrs.JaxrsMessages;
import org.jboss.as.server.Services;
import org.jboss.as.server.deployment.Attachments;
import org.jboss.as.server.deployment.DeploymentPhaseContext;
@@ -61,6 +59,12 @@
import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrapClasses;
import org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters;
+import static org.jboss.as.jaxrs.JaxrsLogger.JAXRS_LOGGER;
+import static org.jboss.as.jaxrs.JaxrsMessages.MESSAGES;
+import static org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters.RESTEASY_SCAN;
+import static org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters.RESTEASY_SCAN_PROVIDERS;
+import static org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters.RESTEASY_SCAN_RESOURCES;
+
/**
* Processor that finds jax-rs classes in the deployment
*
@@ -80,7 +84,7 @@ public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitPro
}
final DeploymentUnit parent = deploymentUnit.getParent() == null ? deploymentUnit : deploymentUnit.getParent();
final Map<ModuleIdentifier, ResteasyDeploymentData> deploymentData;
- if(deploymentUnit.getParent() == null) {
+ if (deploymentUnit.getParent() == null) {
deploymentData = Collections.synchronizedMap(new HashMap<ModuleIdentifier, ResteasyDeploymentData>());
deploymentUnit.putAttachment(JaxrsAttachments.ADDITIONAL_RESTEASY_DEPLOYMENT_DATA, deploymentData);
} else {
@@ -171,12 +175,12 @@ protected void scanWebDeployment(final DeploymentUnit du, final JBossWebMetaData
if (contextParams != null) {
for (ParamValueMetaData param : contextParams) {
- if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_SCAN)) {
- resteasyDeploymentData.setScanAll(Boolean.valueOf(param.getParamValue()));
+ if (param.getParamName().equals(RESTEASY_SCAN)) {
+ resteasyDeploymentData.setScanAll(valueOf(RESTEASY_SCAN, param.getParamValue()));
} else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_SCAN_PROVIDERS)) {
- resteasyDeploymentData.setScanProviders(Boolean.valueOf(param.getParamValue()));
- } else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_SCAN_RESOURCES)) {
- resteasyDeploymentData.setScanResources(Boolean.valueOf(param.getParamValue()));
+ resteasyDeploymentData.setScanProviders(valueOf(RESTEASY_SCAN_PROVIDERS, param.getParamValue()));
+ } else if (param.getParamName().equals(RESTEASY_SCAN_RESOURCES)) {
+ resteasyDeploymentData.setScanResources(valueOf(RESTEASY_SCAN_RESOURCES, param.getParamValue()));
} else if (param.getParamName().equals(ResteasyContextParameters.RESTEASY_UNWRAPPED_EXCEPTIONS)) {
resteasyDeploymentData.setUnwrappedExceptionsParameterSet(true);
}
@@ -308,4 +312,18 @@ protected void scan(final DeploymentUnit du, final ClassLoader classLoader, fina
return null;
}
+
+ private boolean valueOf(String paramName, String value) throws DeploymentUnitProcessingException {
+ if (value == null) {
+ throw JaxrsMessages.MESSAGES.invalidParamValue(paramName, value);
+ }
+ if (value.toLowerCase().equals("true")) {
+ return true;
+ } else if (value.toLowerCase().equals("false")) {
+ return false;
+ } else {
+ throw JaxrsMessages.MESSAGES.invalidParamValue(paramName, value);
+ }
+ }
+
}
View
35 ...ation/basic/src/test/java/org/jboss/as/test/integration/jaxrs/cfg/HelloWorldResource.java
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.as.test.integration.jaxrs.cfg;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+@Path("helloworld")
+@Produces({"text/plain"})
+public class HelloWorldResource {
+ @GET
+ public String getMessage() {
+ return "Hello World!";
+ }
+}
View
62 ...ion/basic/src/test/java/org/jboss/as/test/integration/jaxrs/cfg/ResteasyParamsParent.java
@@ -1,62 +0,0 @@
-package org.jboss.as.test.integration.jaxrs.cfg;
-
-import java.util.concurrent.TimeUnit;
-import java.net.URL;
-
-import org.jboss.as.test.integration.common.HttpRequest;
-import org.jboss.as.test.integration.jaxrs.packaging.war.HelloWorldResource;
-import org.jboss.as.test.integration.jaxrs.packaging.war.WebXml;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
-
-public abstract class ResteasyParamsParent {
-
- private final static String DEP_NAME = "default";
-
- public static Archive<?> getDeploy(final String depName,
- final Class<?> clazz, final String paramName,
- final String paramValue) {
- return getDeploy(depName, clazz, paramName, paramValue, "", "");
- }
-
- public static Archive<?> getDeploy(final Class<?> clazz,
- final String paramName, final String paramValue) {
- return getDeploy(DEP_NAME, clazz, paramName, paramValue, "", "");
- }
-
- public static Archive<?> getDeploy(final Class<?> clazz,
- final String paramName, final String paramValue, final String webXmlBefore, final String webXmlAfter) {
- return getDeploy(DEP_NAME, clazz, paramName, paramValue, webXmlBefore, webXmlAfter);
- }
-
- public static Archive<?> getDeploy(final String depName,
- final Class<?> clazz, final String paramName,
- final String paramValue, final String webXmlBefore, final String webXmlAfter) {
- WebArchive war = ShrinkWrap.create(WebArchive.class, "jaxrsnoap_"
- + (depName == null ? DEP_NAME : depName.length() > 0 ? depName
- : DEP_NAME) + ".war");
- war.addPackage(HttpRequest.class.getPackage());
- war.addClasses(clazz, ResteasyParamsParent.class, HelloWorldResource.class);
- war.addAsWebInfResource(
- WebXml.get(webXmlBefore
- + "<servlet-mapping>\n"
- + " <servlet-name>javax.ws.rs.core.Application</servlet-name>\n"
- + " <url-pattern>/myjaxrs/*</url-pattern>\n"
- + "</servlet-mapping>\n"
- + "\n"
- + "<context-param>\n"
- + " <param-name>" + paramName + "</param-name>\n"
- + " <param-value>" + paramValue + "</param-value>\n"
- + "</context-param>\n"
- + webXmlAfter
- + "\n"), "web.xml");
- return war;
- }
-
- public static String performCall(final String urlPattern, URL url)
- throws Exception {
- return HttpRequest.get(url + urlPattern, 5, TimeUnit.SECONDS);
- }
-
-}
View
211 .../src/test/java/org/jboss/as/test/integration/jaxrs/cfg/ResteasyScanResourcesTestCase.java
@@ -21,24 +21,28 @@
*/
package org.jboss.as.test.integration.jaxrs.cfg;
-import static org.junit.Assert.assertEquals;
-
import java.net.URL;
+import java.util.concurrent.TimeUnit;
import junit.framework.Assert;
-
import org.jboss.arquillian.container.test.api.Deployer;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.OperateOnDeployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.junit.InSequence;
import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.as.test.integration.common.HttpRequest;
+import org.jboss.as.test.integration.jaxrs.cfg.applicationclasses.HelloWorldApplication;
+import org.jboss.as.test.integration.jaxrs.packaging.war.WebXml;
import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Ignore;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
+import static org.junit.Assert.assertEquals;
+
/**
* Tests for RESTEasy configuration parameter 'resteasy.scan.resources'
*
@@ -46,115 +50,92 @@
*/
@RunWith(Arquillian.class)
@RunAsClient
-public class ResteasyScanResourcesTestCase extends ResteasyParamsParent {
-
- private static final String depNameTrue = "dep_true";
- private static final String depNameFalse = "dep_false";
- private static final String depNameFalseAS7_3034 = "dep_false_as7_3034";
- private static final String depNameInvalid = "dep_invalid";
-
- @Deployment(name = depNameTrue, managed = false)
- public static Archive<?> deploy_true() {
- return getDeploy(depNameTrue,
- ResteasyScanResourcesTestCase.class,
- "resteasy.scan.resources", "true");
- }
-
- @Deployment(name = depNameFalse, managed = false)
- public static Archive<?> deploy_false() {
- return getDeploy(depNameFalse,
- ResteasyScanResourcesTestCase.class,
- "resteasy.scan.resources", "false");
- }
-
- @Deployment(name = depNameFalseAS7_3034, managed = false)
- public static Archive<?> deploy_false_as7_3034() {
- return getDeploy(
- depNameFalseAS7_3034,
- ResteasyScanResourcesTestCase.class,
- "resteasy.scan.resources",
- "false",
- "<servlet>\n"
- + " <servlet-name>javax.ws.rs.core.Application</servlet-name>\n"
- + " <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher</servlet-class>\n"
- + "</servlet>\n" + "\n", "");
- }
-
- @Deployment(name = depNameInvalid, managed = false)
- public static Archive<?> deploy_invalid() {
- return getDeploy(depNameInvalid,
- ResteasyScanResourcesTestCase.class,
- "resteasy.scan.resources", "blah");
-
- }
-
- @ArquillianResource
- private Deployer deployer;
-
- @Test
- @InSequence(-1)
- public void testDeployTrue() throws Exception {
- try {
- deployer.deploy(depNameTrue);
- } catch (Exception e) {
- Assert.fail("Unexpected exception occured during deploying - "
- + e.toString());
- }
- }
-
- @Test
- @InSequence(1)
- @OperateOnDeployment(depNameTrue)
- public void testDeployTrue1(@ArquillianResource URL url) throws Exception {
- String result = performCall("myjaxrs/helloworld", url);
- assertEquals("Hello World!", result);
- }
-
- @Ignore("AS-3034")
- @Test
- @InSequence(-1)
- public void testDeployFalse() throws Exception {
- try {
- deployer.deploy(depNameFalse);
- } catch (Exception e) {
- Assert.fail("Unexpected exception occured during deploying - "
- + e.toString());
- }
- }
-
- @Ignore("AS-3034")
- @Test
- @InSequence(1)
- @OperateOnDeployment(depNameFalse)
- public void testDeployFalse1(@ArquillianResource URL url) throws Exception {
- try {
- @SuppressWarnings("unused")
- String result = performCall("myjaxrs/helloworld", url);
- Assert.fail("Scan of Resources is disabled so we should not pass to there - HTTP 404 must occur!");
- } catch (Exception e) {
- }
- }
-
- @Ignore("AS-3034")
- @Test
- @InSequence(-1)
- public void testDeployFalse_AS7_3043() throws Exception {
- try {
- deployer.deploy(depNameFalseAS7_3034);
- Assert.fail("Test should not go there - invalid deployment (duplicated javax.ws.rs.core.Application)! Possible regression of AS7-3034 found");
- } catch (Exception e) {
- }
- }
-
- @Ignore("AS-3034")
- @Test
- @RunAsClient
- public void testDeployInvalid() throws Exception {
- try {
- deployer.deploy(depNameInvalid);
- Assert.fail("Test should not go here - invalid deployment (invalid value of resteasy.scan.resources)!");
- } catch (Exception e) {
- }
- }
+public class ResteasyScanResourcesTestCase {
+
+ private static final String depNameTrue = "dep_true";
+ private static final String depNameFalse = "dep_false";
+ private static final String depNameFalseAS7_3034 = "dep_false_as7_3034";
+ private static final String depNameInvalid = "dep_invalid";
+
+ @Deployment(name = depNameTrue, managed = true)
+ public static Archive<?> deploy_true() {
+ return ShrinkWrap.create(WebArchive.class, depNameTrue + ".war")
+ .addPackage(ResteasyScanResourcesTestCase.class.getPackage())
+ .setWebXML(webXml("resteasy.scan.resources", "true"));
+ }
+
+ @Deployment(name = depNameFalse, managed = true)
+ public static Archive<?> deploy_false() {
+ return ShrinkWrap.create(WebArchive.class, depNameFalse + ".war")
+ .addPackage(ResteasyScanResourcesTestCase.class.getPackage())
+ .setWebXML(webXml("resteasy.scan.resources", "false"));
+ }
+
+ @Deployment(name = depNameFalseAS7_3034, managed = false)
+ public static Archive<?> deploy_false_as7_3034() {
+ return ShrinkWrap.create(WebArchive.class, depNameFalseAS7_3034 + ".war")
+ .addPackage(ResteasyScanResourcesTestCase.class.getPackage())
+ .addPackage(HelloWorldApplication.class.getPackage());
+ }
+
+ @Deployment(name = depNameInvalid, managed = false)
+ public static Archive<?> deploy_invalid() {
+ return ShrinkWrap.create(WebArchive.class, depNameInvalid + ".war")
+ .addPackage(ResteasyScanResourcesTestCase.class.getPackage())
+ .setWebXML(webXml("resteasy.scan.resources", "blah"));
+
+ }
+
+ private static StringAsset webXml(String paramName, String paramValue) {
+ return WebXml.get("<servlet-mapping>\n"
+ + " <servlet-name>javax.ws.rs.core.Application</servlet-name>\n"
+ + " <url-pattern>/myjaxrs/*</url-pattern>\n"
+ + "</servlet-mapping>\n"
+ + "\n"
+ + "<context-param>\n"
+ + " <param-name>" + paramName + "</param-name>\n"
+ + " <param-value>" + paramValue + "</param-value>\n"
+ + "</context-param>\n"
+ + "\n");
+ }
+
+ @ArquillianResource
+ private Deployer deployer;
+
+ @Test
+ @OperateOnDeployment(depNameTrue)
+ public void testDeployTrue1(@ArquillianResource URL url) throws Exception {
+ String result = HttpRequest.get(url.toExternalForm() + "myjaxrs/helloworld", 10, TimeUnit.SECONDS);
+ assertEquals("Hello World!", result);
+ }
+
+ @Test
+ @OperateOnDeployment(depNameFalse)
+ public void testDeployFalse1(@ArquillianResource URL url) throws Exception {
+ try {
+ @SuppressWarnings("unused")
+ String result = HttpRequest.get(url.toExternalForm() + "myjaxrs/helloworld", 10, TimeUnit.SECONDS);
+ Assert.fail("Scan of Resources is disabled so we should not pass to there - HTTP 404 must occur!");
+ } catch (Exception e) {
+ }
+ }
+
+ @Test
+ public void testDeployFalse_AS7_3043() throws Exception {
+ try {
+ deployer.deploy(depNameFalseAS7_3034);
+ Assert.fail("Test should not go there - invalid deployment (duplicated javax.ws.rs.core.Application)! Possible regression of AS7-3034 found");
+ } catch (Exception e) {
+ }
+ }
+
+ @Test
+ public void testDeployInvalid() throws Exception {
+ try {
+ deployer.deploy(depNameInvalid);
+ Assert.fail("Test should not go here - invalid deployment (invalid value of resteasy.scan.resources)!");
+ } catch (Exception e) {
+ }
+ }
}
View
33 ...ava/org/jboss/as/test/integration/jaxrs/cfg/applicationclasses/HelloWorldApplication.java
@@ -0,0 +1,33 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.as.test.integration.jaxrs.cfg.applicationclasses;
+
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+/**
+ * Application with no path
+ *@author Stuart Douglas
+ */
+@ApplicationPath("app1")
+public class HelloWorldApplication extends Application {
+}
View
34 ...va/org/jboss/as/test/integration/jaxrs/cfg/applicationclasses/HelloWorldApplication2.java
@@ -0,0 +1,34 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.as.test.integration.jaxrs.cfg.applicationclasses;
+
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+/**
+ * Application with no path
+ *
+ * @author Stuart Douglas
+ */
+@ApplicationPath("app2")
+public class HelloWorldApplication2 extends Application {
+}

0 comments on commit b3a1e8b

Please sign in to comment.
Something went wrong with that request. Please try again.