This is our usecase:
We have the jaxws-endpoint-servlet.war web archive with the following content:
jar -tvf jaxws-endpoint-servlet.war
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/org/
WEB-INF/classes/org/jboss/
WEB-INF/classes/org/jboss/test/
WEB-INF/classes/org/jboss/test/ws/
WEB-INF/classes/org/jboss/test/ws/jaxws/
WEB-INF/classes/org/jboss/test/ws/jaxws/endpoint/
WEB-INF/classes/org/jboss/test/ws/jaxws/endpoint/EndpointBean.class
WEB-INF/classes/org/jboss/test/ws/jaxws/endpoint/EndpointInterface.class
WEB-INF/classes/org/jboss/test/ws/jaxws/endpoint/EndpointServlet.class
WEB-INF/wsdl/
WEB-INF/wsdl/TestService.wsdl
WEB-INF/web.xml
The most important class here is EndpointServlet, which contains the following lines of
code:
| public void init(ServletConfig config) throws ServletException
| {
| super.init(config);
|
| // Create the endpoint
| EndpointBean epImpl = new EndpointBean();
| javax.xml.ws.Endpoint endpoint = Endpoint.create(SOAPBinding.SOAP11HTTP_BINDING,
epImpl);
|
| // Create and start the HTTP server
| SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider();
| HttpServer httpServer =
spiProvider.getSPI(HttpServerFactory.class).getHttpServer();
| httpServer.start();
|
| // Create the context and publish the endpoint
| HttpContext context = httpServer.createContext("/jaxws-endpoint");
| endpoint.publish(context);
| }
|
The purpose of this code is to create new web application deployment dynamically using
this api only. The endpoint published this way must reside on address
http://localhost:8080/jaxws-endpoint where HttpContext and Endpoint are our abstractions.
Our current approach:
To solve this use case we're creating new web deployment dynamically this way at the
moment:
| JBossWebMetaData jbwmd = dep.getAttachment(JBossWebMetaData.class);
|
| AbstractDeployment deployment = createSimpleDeployment(dep.getSimpleName());
| MutableAttachments ma =
(MutableAttachments)deployment.getPredeterminedManagedObjects();
| ma.addAttachment(HttpSpec.PROPERTY_GENERATED_WEBAPP, Boolean.TRUE);
| ma.addAttachment(ClassLoaderFactory.class, new ContextClassLoaderFactory());
| ma.addAttachment(JBossWebMetaData.class, jbwmd);
| mainDeployer.deploy(deployment);
|
| ...
|
| private static class ContextClassLoaderFactory implements ClassLoaderFactory
| {
| public ClassLoader createClassLoader(DeploymentUnit unit) throws Exception
| {
| return Thread.currentThread().getContextClassLoader();
| }
|
| public void removeClassLoader(DeploymentUnit unit) throws Exception
| {
| }
| }
|
Problem we're dealing with:
We're not able to dynamically deploy this archive to
http://localhost:8080/jaxws-endpoint context. The dynamically created application is
deployed to
http://localhost:8080/jaxws-endpoint-servlet context.
I guess this is because of our custom class loader we have. Is there a possibility to
enforce deployment context?
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4160586#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...