[ https://issues.apache.org/jira/browse/GERONIMO-2921?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jeff Genender reassigned GERONIMO-2921: --------------------------------------- Assignee: Jeff Genender > 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 > Assigned To: Jeff Genender > Attachments: jaxws-war-2.0-SNAPSHOT.war > > > 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.