We have several Java web applications packaged as WARs, all packaged in an EAR. Our RESTful services are built using JAX-RS and in WAR versions.
We would like to add static content for each of these version-dependent WAR versions, but use a root context (WAR) for both static content and RESTful API calls, so that all of the following URLs work
{hostname}/v1/swagger.yaml <-- Static Content describing the v1 API
{hostname}/v1/orders/{uid} <-- JAX-RS RESTful API (v1)
{hostname}/v2/swagger.yaml <-- Static Content describing the v2 API
{hostname}/v2/orders/{uid} <-- JAX-RS RESTful API (v2)
The following deployment structure is what we currently have that works for JAX-RS services, but not static content. In other words, these URLs work:
{hostname}/v1/orders/{uid} <-- JAX-RS RESTful API (v1)
{hostname}/v2/orders/{uid} <-- JAX-RS RESTful API (v2)
But the problem is that these URLs are not available:
{hostname}/v1/swagger.yaml <-- Static Content describing the v1 API
{hostname}/v2/swagger.yaml <-- Static Content describing the v2 API
Question: How can we make these static URLs work?
Here's an exploded EAR:
example.ear
META-INF
application.xml
v1.war
swagger.yaml
WEB-INF
web.xml
classes
ApplicationV1.class
OrdersResourceV1.class
v2.war
swagger.yaml
WEB-INF
web.xml
classes
ApplicationV2.class
OrdersResourceV2.class
EAR application.xml:
<?xml version="1.0"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6">
<application-name>...</application-name>
<module>
<web>
<web-uri>v1.war</web-uri>
<context-root>/v1</context-root>
</web>
</module>
<module>
<web>
<web-uri>v2.war</web-uri>
<context-root>/v2</context-root>
</web>
</module>
<module>
<web>
<web-uri>another.war</web-uri>
<context-root>/</context-root>
</web>
</module>
</application>
v1 v2 web.xml:
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>
ApplicationV1.java (JAX-RS), URL:
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/")
public class ApplicationV1 extends Application {
private Set<Object> singletons = new HashSet<Object>();
public ApplicationV1() {
singletons.add(new OrdersResourceV1());
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
OrdersResourceV1.java (JAX-RS) URL-:
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.*;
@RequestScoped
@Path("/orders")
public class OrdersResourceV1 {
@GET
@Path("/{uid}")
@Produces("application/json;charset=UTF-8")
public Response getOrder(@PathParam("uid") String orderUid) {
<ommited for brevity>
}
}
, ApplicationV*.java @ApplicationPath("/services"), , URL- : - , .
{hostname}/v1/swagger.yaml <-- Static Content describing the v1 API
{hostname}/v1/services/orders/{uid} <-- JAX-RS RESTful API (v1)
{hostname}/v2/swagger.yaml <-- Static Content describing the v2 API
{hostname}/v2/services/orders/{uid} <-- JAX-RS RESTful API (v2)
, : JAX-RS WAR (/v1 /v2)? URL-? , , JAX-RS URL?
, JavaEE, , Wildfly 8.1 Java8.