-
1. Re: CXF Servlet fails to start because META-INF is not on the classpath
ehodges Jun 14, 2017 3:56 PM (in response to ehodges)If there is no way to include META-INF files in the classpath without creating a "jboss-deployment-structure.xml" file, then I guess I'll have to do that.
I've tried creating one. I added it to the WAR's WEB_INF directory, but that produced a message during deployment that said the file was ignored for "sub-deployments".
So I added it to the EAR's META_INF. It looks like this:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="cxf-core-3.1.11" meta-inf="TRUE" />
</dependencies>
</deployment>
</jboss-deployment-structure>
I can't find documentation on what the "meta-inf" attribute's value should be. Just guessing it should be "TRUE".
I can't find documentation on what the module's name attribute value should be, either. My CXF JAR is called "cxf-core-3.1.11.jar", so I guessed the module name would be "cxf-core-3.1.11". That doesn't seem to work. Now when I deploy the log is full of these:
14:39:31,428 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.module.service."deployment.<foo>.ear.cxf-core-3.1.11.jar".main: org.jboss.msc.service.StartException in service jboss.module.service."deployment.<foo>.ear.cxf-core-3.1.11.jar".main: WFLYSRV0179: Failed to load module: deployment.<foo>.ear.cxf-core-3.1.11.jar:main
at org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:91)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.jboss.modules.ModuleNotFoundException: cxf-core-3.1.11:main
at org.jboss.modules.Module.addPaths(Module.java:1093)
at org.jboss.modules.Module.link(Module.java:1449)
at org.jboss.modules.Module.relinkIfNecessary(Module.java:1477)
at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:225)
at org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:68)
... 5 more
I'm searching the web for a solution but I haven't found one yet. Any ideas? Is there some documentation out there I'm just not finding?
-
2. Re: CXF Servlet fails to start because META-INF is not on the classpath
jaikiran Jun 14, 2017 11:09 PM (in response to ehodges)Can you post the complete stacktrace of the original issue (the cannot read the resource error) please? That will give us a bit more context.
-
3. Re: CXF Servlet fails to start because META-INF is not on the classpath
ehodges Jun 15, 2017 9:47 AM (in response to jaikiran)Here's the stack trace:
08:40:20,367 INFO [org.springframework.web.context.support.XmlWebApplicationContext] (ServerService Thread Pool -- 70) Refreshing Root WebApplicationContext: startup date [Thu Jun 15 08:40:20 CDT 2017]; parent: Root WebApplicationContext
08:40:20,369 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] (ServerService Thread Pool -- 70) Loading XML bean definitions from class path resource [META-INF/cxf/cxf.xml]
08:40:20,374 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 70) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./TestWeb: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./TestWeb: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [META-INF/cxf/cxf.xml]; nested exception is java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf.xml] cannot be opened because it does not exist
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [META-INF/cxf/cxf.xml]; nested exception is java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf.xml] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:613)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:514)
at org.apache.cxf.transport.servlet.CXFServlet.createSpringContext(CXFServlet.java:151)
at org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:74)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(CXFNonSpringServlet.java:77)
at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117)
at org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:78)
at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:103)
at io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:250)
at io.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:133)
at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:546)
at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:517)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:559)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:101)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82)
... 6 more
Caused by: java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
... 35 more
This method:
at org.apache.cxf.transport.servlet.CXFServlet.createSpringContext(CXFServlet.java:151)
is where the code sets an org.springframework.web.context.support.XmlWebApplicationContext's config location to "classpath:/META-INF/cxf/cxf.xml" and then calls XmlWebApplicationContext.refresh(). I believe that ultimately fails becaue "META-INF/cxf/cxf.xml" isn't visible to the classloader.
I've stepped through the same code run by the WebSphere app server and "META-INF/cxf/cxf.xml" is visible.
-
4. Re: CXF Servlet fails to start because META-INF is not on the classpath
ehodges Jun 15, 2017 12:00 PM (in response to ehodges)Any suggestions about getting WildFly 10 to treat the cxf-core-3.1.11.jar in my EAR as a "module"? The documentation I find about WildFly/JBoss modules all talks about creating directories, as if the EAR was exploded. I just want to deploy an EAR containing a CXF JAR and have CXF servlets work like they do in other Java EE app servers.