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.

Reply via email to