Tomcat does not register web service url mappings when web.xml is not present
-----------------------------------------------------------------------------
Key: GERONIMO-2921
URL: https://issues.apache.org/jira/browse/GERONIMO-2921
Project: Geronimo
Issue Type: Bug
Security Level: public (Regular issues)
Components: Tomcat
Reporter: Jarek Gawor
Here's some background info. The web.xml file is now optional for JAX-WS POJO
web services. In such cases, there are certain rules on how the web.xml should
get updated. That is, appropriate <servlet> and <servlet-mapping> elements
should be inserted into the web.xml. When I update the in-memory representation
of the web.xml with the appropriate entires, everything works just fine on
Jetty. However, with Tomcat, it seems like the url-mappings for the web
services do not get registered. Everything else is fine, e.g. the web services
gbeans get initialized, etc. and I can access a JSP deployed in the same war as
the web services.
After a bit of debugging I see that GeronimoStandardContext.addChild() is not
called if the web.xml file is not present even though the in-memory
representation of the DD is updated correctly. So somehow I think the in-memory
representation of the DD is not being passed around correctly.
Here's a stack trace when web.xml file is present and when addChild() is called:
System Thread [RMI TCP Connection(9)-192.168.1.102] (Suspended (breakpoint at
line 217 in GeronimoStandardContext))
GeronimoStandardContext.addChild(Container) line: 217
GeneratedMethodAccessor201.invoke(Object, Object[]) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 585
IntrospectionUtils.callMethod1(Object, String, Object, String,
ClassLoader) line: 899
SetNextRule.end() line: 193
SetNextRule(Rule).end(String, String) line: 229
Digester.endElement(String, String, String) line: 1058
SAXParserImpl$JAXPSAXParser(AbstractSAXParser).endElement(QName,
Augmentations) line: not available
XMLDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanEndElement()
line: not available [local variables unavailable]
XMLDocumentScannerImpl$ContentDispatcher(XMLDocumentFragmentScannerImpl$FragmentContentDispatcher).dispatch(boolean)
line: not available
XMLDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean)
line: not available
XIncludeAwareParserConfiguration(XML11Configuration).parse(boolean)
line: not available
XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource)
line: not available
SAXParserImpl$JAXPSAXParser(XMLParser).parse(XMLInputSource) line: not
available
SAXParserImpl$JAXPSAXParser(AbstractSAXParser).parse(InputSource) line:
not available
SAXParserImpl$JAXPSAXParser.parse(InputSource) line: not available
Digester.parse(InputSource) line: 1562
ContextConfig.applicationWebConfig() line: 369
ContextConfig.start() line: 1060
ContextConfig.lifecycleEvent(LifecycleEvent) line: 261
LifecycleSupport.fireLifecycleEvent(String, Object) line: 120
GeronimoStandardContext(StandardContext).start() line: 4238
GeronimoStandardContext.access$201(GeronimoStandardContext) line: 66
GeronimoStandardContext$SystemMethodValve.invoke(Request, Response)
line: 334
GeronimoBeforeAfterValve.invoke(Request, Response) line: 47
GeronimoStandardContext.start() line: 189
StandardHost(ContainerBase).addChildInternal(Container) line: 760
StandardHost(ContainerBase).addChild(Container) line: 740
StandardHost.addChild(Container) line: 525
TomcatContainer.addContext(TomcatContext) line: 331
TomcatContainer$$FastClassByCGLIB$$9370b073.invoke(int, Object,
Object[]) line: not available
FastMethod.invoke(Object, Object[]) line: 53
FastMethodInvoker.invoke(Object, Object[]) line: 38
GBeanOperation.invoke(Object, Object[]) line: 127
GBeanInstance.invoke(int, Object[]) line: 820
RawInvoker.invoke(int, Object[]) line: 57
RawOperationInvoker.invoke(AbstractName, Object[]) line: 35
ProxyMethodInterceptor.intercept(Object, Method, Object[], MethodProxy)
line: 96
TomcatContainer$$EnhancerByCGLIB$$d873f7e2.addContext(TomcatContext)
line: not available
TomcatWebAppContext.doStart() line: 496
GBeanInstance.createInstance() line: 986
GBeanInstanceState.attemptFullStart() line: 267
GBeanInstanceState.start() line: 102
GBeanInstance.start() line: 529
GBeanDependency.attemptFullStart() line: 111
GBeanDependency.addTarget(AbstractName) line: 146
GBeanDependency$1.running(AbstractName) line: 120
BasicLifecycleMonitor.fireRunningEvent(AbstractName) line: 173
BasicLifecycleMonitor.access$300(BasicLifecycleMonitor, AbstractName)
line: 41
BasicLifecycleMonitor$RawLifecycleBroadcaster.fireRunningEvent() line:
251
GBeanInstanceState.attemptFullStart() line: 292
GBeanInstanceState.start() line: 102
GBeanInstanceState.startRecursive() line: 124
GBeanInstance.startRecursive() line: 543
BasicKernel.startRecursiveGBean(AbstractName) line: 379
ConfigurationUtil.startConfigurationGBeans(AbstractName, Configuration,
Kernel) line: 434
EditableKernelConfigurationManager(KernelConfigurationManager).start(Configuration)
line: 188
EditableKernelConfigurationManager(SimpleConfigurationManager).startConfiguration(Artifact,
LifecycleMonitor) line: 527
EditableKernelConfigurationManager(SimpleConfigurationManager).startConfiguration(Artifact)
line: 508
SimpleConfigurationManager$$FastClassByCGLIB$$ce77a924.invoke(int,
Object, Object[]) line: not available
FastMethod.invoke(Object, Object[]) line: 53
FastMethodInvoker.invoke(Object, Object[]) line: 38
GBeanOperation.invoke(Object, Object[]) line: 127
GBeanInstance.invoke(String, Object[], String[]) line: 855
BasicKernel.invoke(AbstractName, String, Object[], String[]) line: 239
KernelGBean.invoke(AbstractName, String, Object[], String[]) line: 342
KernelGBean$$FastClassByCGLIB$$1cccefc9.invoke(int, Object, Object[])
line: not available
FastMethod.invoke(Object, Object[]) line: 53
FastMethodInvoker.invoke(Object, Object[]) line: 38
GBeanOperation.invoke(Object, Object[]) line: 127
GBeanInstance.invoke(String, Object[], String[]) line: 855
BasicKernel.invoke(AbstractName, String, Object[], String[]) line: 239
MBeanGBeanBridge.invoke(String, Object[], String[]) line: 168
MetaDataImpl$PrivateDynamicMeta(DynamicMetaDataImpl).invoke(Object,
String, Object[], String[]) line: 213
MetaDataImpl.invoke(Object, String, Object[], String[]) line: 220
DefaultMBeanServerInterceptor.invoke(ObjectName, String, Object[],
String[]) line: 815
JmxMBeanServer.invoke(ObjectName, String, Object[], String[]) line: 784
RMIConnectionImpl.doOperation(int, Object[]) line: 1408
RMIConnectionImpl.access$100(RMIConnectionImpl, int, Object[]) line: 81
RMIConnectionImpl$PrivilegedOperation.run() line: 1245
AccessController.doPrivileged(PrivilegedExceptionAction<T>,
AccessControlContext) line: not available [native method]
RMIConnectionImpl.doPrivilegedOperation(int, Object[], Subject) line:
1348
RMIConnectionImpl.invoke(ObjectName, String, MarshalledObject,
String[], Subject) line: 782
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 585
UnicastServerRef2(UnicastServerRef).dispatch(Remote, RemoteCall) line:
294
Transport$1.run() line: 153
AccessController.doPrivileged(PrivilegedExceptionAction<T>,
AccessControlContext) line: not available [native method]
TCPTransport(Transport).serviceCall(RemoteCall) line: 149
TCPTransport.handleMessages(Connection, boolean) line: 466
TCPTransport$ConnectionHandler.run() line: 707
Thread.run() line: 595
It looks like ContextConfig.applicationWebConfig() is (re)parsing web.xml file
but I'm not sure where it gets it from. The url its using to load the file is:
jndi:/0.0.0.0/jaxws-war-2.0-SNAPSHOT/WEB-INF/web.xml
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.