[ 
https://issues.apache.org/jira/browse/GERONIMO-2921?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12477299
 ] 

Jeff Genender commented on GERONIMO-2921:
-----------------------------------------

Can you provide a simple test case for this?

> 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