Hide Forgot
project_key: SOA Initially I thought this was a regression of a SOA 5 issue, where we needed to add the xmldsig-core-schema.xsd to the local resolver, however it would appear to be worse as there are requests being made for other files. I deployed the juddiv3.war to a SOA server configured with CXF and snooped the network accesses while requesting a single service wsdl, this resulted in network requests for xmldsig-core-schema.xsd, XMLSchema.dtd, datatypes.xsd and xml.xsd. A quick count of the GET requests suggests that there are about 84 remote requests being made to resolve the above files.
juddiv3.war file being deployed
Attachment: Added: juddiv3.war.new
WSDL being requested in this test was http://127.0.0.1:8080/juddiv3/services/replication?wsdl
Stack showing a remote access Daemon Thread [http-127.0.0.1-8080-1] (Suspended) java.net.PlainSocketImpl.socketConnect(java.net.InetAddress, int, int) line: not available [native method] java.net.SocksSocketImpl(java.net.PlainSocketImpl).doConnect(java.net.InetAddress, int, int) line: 333 java.net.SocksSocketImpl(java.net.PlainSocketImpl).connectToAddress(java.net.InetAddress, int, int) line: 195 java.net.SocksSocketImpl(java.net.PlainSocketImpl).connect(java.net.SocketAddress, int) line: 182 java.net.SocksSocketImpl.connect(java.net.SocketAddress, int) line: 366 java.net.Socket.connect(java.net.SocketAddress, int) line: 525 sun.net.www.http.HttpClient(sun.net.NetworkClient).doConnect(java.lang.String, int) line: 158 sun.net.www.http.HttpClient.openServer(java.lang.String, int) line: 394 sun.net.www.http.HttpClient.openServer() line: 529 sun.net.www.http.HttpClient.<init>(java.net.URL, java.net.Proxy, int) line: 233 sun.net.www.http.HttpClient.New(java.net.URL, java.net.Proxy, int, boolean) line: 306 sun.net.www.http.HttpClient.New(java.net.URL, java.net.Proxy, int) line: 323 sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(java.net.URL, java.net.Proxy, int) line: 860 sun.net.www.protocol.http.HttpURLConnection.plainConnect() line: 801 sun.net.www.protocol.http.HttpURLConnection.connect() line: 726 sun.net.www.protocol.http.HttpURLConnection.getInputStream() line: 1049 sun.net.www.protocol.http.HttpURLConnection(java.net.HttpURLConnection).getResponseCode() line: 373 org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal() line: 2110 org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse() line: 2087 org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close() line: 1985 org.apache.cxf.transport.http.HTTPConduit(org.apache.cxf.transport.AbstractConduit).close(org.apache.cxf.message.Message) line: 66 org.apache.cxf.transport.http.HTTPConduit.close(org.apache.cxf.message.Message) line: 640 org.apache.cxf.transport.TransportURIResolver.resolve(java.lang.String, java.lang.String) line: 112 org.apache.cxf.catalog.CatalogWSDLLocator.getImportInputSource(java.lang.String, java.lang.String) line: 118 org.apache.cxf.wsdl11.ResourceManagerWSDLLocator(org.apache.cxf.wsdl11.AbstractWrapperWSDLLocator).getImportInputSource(java.lang.String, java.lang.String) line: 85 com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(java.lang.Class, org.w3c.dom.Element, javax.wsdl.Definition, javax.wsdl.extensions.ExtensionRegistry) line: 752 com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(java.lang.Class, org.w3c.dom.Element, javax.wsdl.Definition, javax.wsdl.extensions.ExtensionRegistry) line: 842 com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(java.lang.Class, org.w3c.dom.Element, javax.wsdl.Definition) line: 632 com.ibm.wsdl.xml.WSDLReaderImpl.parseTypes(org.w3c.dom.Element, javax.wsdl.Definition) line: 593 com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(java.lang.String, org.w3c.dom.Element, java.util.Map) line: 305 com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(java.lang.String, org.w3c.dom.Element, java.util.Map) line: 2265 com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(javax.wsdl.xml.WSDLLocator, org.w3c.dom.Element) line: 2251 org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(java.lang.String) line: 230 org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(java.lang.String) line: 179 org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(org.apache.cxf.Bus, java.lang.String, javax.xml.namespace.QName) line: 91 org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean(org.apache.cxf.service.factory.ReflectionServiceFactoryBean).buildServiceFromWSDL(java.lang.String) line: 403 org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean(org.apache.cxf.service.factory.ReflectionServiceFactoryBean).initializeServiceModel() line: 528 org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean(org.apache.cxf.service.factory.ReflectionServiceFactoryBean).create() line: 278 org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create() line: 178 org.apache.cxf.jaxws.JaxWsServerFactoryBean(org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory).createEndpoint() line: 100 org.apache.cxf.jaxws.JaxWsServerFactoryBean(org.apache.cxf.frontend.ServerFactoryBean).create() line: 105 org.apache.cxf.jaxws.JaxWsServerFactoryBean.create() line: 167 org.apache.cxf.jaxws.spring.EndpointDefinitionParser$SpringEndpointImpl(org.apache.cxf.jaxws.EndpointImpl).getServer(java.lang.String) line: 346 org.apache.cxf.jaxws.spring.EndpointDefinitionParser$SpringEndpointImpl(org.apache.cxf.jaxws.EndpointImpl).doPublish(java.lang.String) line: 259 org.apache.cxf.jaxws.spring.EndpointDefinitionParser$SpringEndpointImpl(org.apache.cxf.jaxws.EndpointImpl).publish(java.lang.String) line: 209 org.apache.cxf.jaxws.spring.EndpointDefinitionParser$SpringEndpointImpl(org.apache.cxf.jaxws.EndpointImpl).publish() line: 404 sun.reflect.GeneratedMethodAccessor367.invoke(java.lang.Object, java.lang.Object[]) line: not available sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 25 java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 597 org.springframework.beans.factory.support.DefaultListableBeanFactory(org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory).invokeCustomInitMethod(java.lang.String, java.lang.Object, java.lang.String, boolean) line: 1414 org.springframework.beans.factory.support.DefaultListableBeanFactory(org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory).invokeInitMethods(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition) line: 1375 org.springframework.beans.factory.support.DefaultListableBeanFactory(org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory).initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition) line: 1335 org.springframework.beans.factory.support.DefaultListableBeanFactory(org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory).doCreateBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[]) line: 473 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run() line: 409 java.security.AccessController.doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext) line: not available [native method] org.springframework.beans.factory.support.DefaultListableBeanFactory(org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory).createBean(java.lang.String, org.springframework.beans.factory.support.RootBeanDefinition, java.lang.Object[]) line: 380 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject() line: 264 org.springframework.beans.factory.support.DefaultListableBeanFactory(org.springframework.beans.factory.support.DefaultSingletonBeanRegistry).getSingleton(java.lang.String, org.springframework.beans.factory.ObjectFactory) line: 222 org.springframework.beans.factory.support.DefaultListableBeanFactory(org.springframework.beans.factory.support.AbstractBeanFactory).doGetBean(java.lang.String, java.lang.Class, java.lang.Object[], boolean) line: 261 org.springframework.beans.factory.support.DefaultListableBeanFactory(org.springframework.beans.factory.support.AbstractBeanFactory).getBean(java.lang.String, java.lang.Class, java.lang.Object[]) line: 185 org.springframework.beans.factory.support.DefaultListableBeanFactory(org.springframework.beans.factory.support.AbstractBeanFactory).getBean(java.lang.String) line: 164 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons() line: 429 org.springframework.context.support.GenericApplicationContext(org.springframework.context.support.AbstractApplicationContext).finishBeanFactoryInitialization(org.springframework.beans.factory.config.ConfigurableListableBeanFactory) line: 728 org.springframework.context.support.GenericApplicationContext(org.springframework.context.support.AbstractApplicationContext).refresh() line: 380 org.jboss.wsf.stack.cxf.CXFServletExt.loadAdditionalConfigExt(org.springframework.context.ApplicationContext, javax.servlet.ServletConfig) line: 151 org.jboss.wsf.stack.cxf.CXFServletExt.loadBus(javax.servlet.ServletConfig) line: 109 org.jboss.wsf.stack.cxf.CXFServletExt(org.apache.cxf.transport.servlet.AbstractCXFServlet).init(javax.servlet.ServletConfig) line: 78 org.jboss.wsf.stack.cxf.CXFServletExt.init(javax.servlet.ServletConfig) line: 79 org.apache.catalina.core.StandardWrapper.loadServlet() line: 1048 org.apache.catalina.core.StandardWrapper.allocate() line: 777 org.apache.catalina.core.StandardWrapperValve.invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response) line: 129 org.apache.catalina.core.StandardContextValve.invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response) line: 191 org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response) line: 183 org.jboss.web.tomcat.security.JaccContextValve.invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response) line: 95 org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response, org.jboss.servlet.http.HttpEvent) line: 126 org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response) line: 70 org.apache.catalina.core.StandardHostValve.invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response) line: 127 org.apache.catalina.valves.ErrorReportValve.invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response) line: 102 org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response) line: 158 org.apache.catalina.core.StandardEngineValve.invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response) line: 109 org.apache.catalina.connector.CoyoteAdapter.service(org.apache.coyote.Request, org.apache.coyote.Response) line: 330 org.apache.coyote.http11.Http11Processor.process(java.net.Socket) line: 829 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(java.net.Socket) line: 598 org.apache.tomcat.util.net.JIoEndpoint$Worker.run() line: 451 java.lang.Thread.run() line: 619
I think I have found a valid solution however there appears to be a bug in configuring the solution. The Apache CXF implementation should be supporting the definition of an XML catalog within the deployment, this specifically addresses the problem we regularly see when schemas are used which are not known to JBossWS - the catalog needs to be defined in META-INF/jax-ws-catalog.xml of the deployment and can reference how to locate any required schema locally. For some reason this is not being picked up for an exploded war deployment but I suspect this could be due to attempting to locate the META-INF on the classpath which of course it would not be for a war.
Tracing the network calls there are actually two schemas being downloaded and two dtds. I have a packaging so that the schemas can now be resolved locally, the dtd resolution is slightly different so continuing to investigate.
Attaching a catalog which addresses the issue of remote access for the schemas.
Attachment: Added: XMLCatalog.jar
Kevin - just passing this back your way as the creator of the issue but this will most likely need to go to Trevor / Julian to be implemented as this becomes a packaging issue for the platform. It is not feasible for a web services stack to be aware of all schemas that can be referenced by the deployments deployed to them, for this reason the JAX-WS 2.1 specification includes a catalog mechanism to allow additional schemas to be registered without requiring the schemas that use them to import them. Attached to this Jira issue is an XMLCatalog.jar that contains such a definition, this should be placed in: - {jboss.home}/server/default/deploy/juddiv3.war/WEB-INF/lib The jax-ws-catalog.xml contains the required definitions for xmldsig-core-schema.xsd and xml.xsd The DOCTYPE at the top of the xmldsig-core-schema.xsd has also been changed from PUBLIC to SYSTEM to reference a local copy of XMLSchema.dtd. This change was required as the xmldsig-core-schema.xsd is parsed using a DocumentBuilder that we have no option to set an EntityResolver. Finally datatypes.dtd is also indirectly referenced so needs to be included in the jar. Once this jar is in place no breakpoints are hit initialising the endpoint establishing socket connections.
Link: Added: This issue depends JBESB-3518
The jax-ws catalog has been added into the juddi webservices war and tested on both CXF and native.
Writer: Added: dlesage
Temporarily reopening to update release note info.
Release Notes Docs Status: Added: Documented as Resolved Issue Release Notes Text: Added: https://issues.jboss.org/browse/JBESB-3518 The CXF integration required an XML catalogue to be specified as it would otherwise try to resolve the schemas remotely. To fix this problem, a jax-ws catalog for juddi webservices has been added.