代码之家  ›  专栏  ›  技术社区  ›  Catchwa

当xercesimpl.jar位于类路径上时,NetBeans Web服务客户端出现问题

  •  5
  • Catchwa  · 技术社区  · 14 年前

    当xercesimpl.jar包含在库中时,我无法在NetBeans Web应用程序中创建Web服务客户端。

    使用Netbeans 6.9和Glassfish 3.0.1:

    1.)创建新的Web应用程序
    2.)创建新的Web服务
    3.)向创建的Web服务添加新操作(只需让它返回空值-实现并不重要)
    4.)将Web服务部署到Glassfish(工作正常)
    5)添加 xercesImpl.jar (我使用2.9.1版)作为Web服务的库(我需要对我使用的第三方库执行Xerces)
    6.)停止玻璃鱼。
    7.)清理和建设项目。
    8.)运行项目。测试Web服务是否仍然工作(它仍然工作)。
    9.)创建新的Web服务客户端。把它指向WSDL(我正在使用 http://www.webservicex.com/CurrencyConvertor.asmx?wsdl 就像测试一样)。
    10.)停止玻璃鱼。
    11.)清理和建设项目。

    显示错误消息:

    C:\netbeansprojects\wstest\nbproject\jaxws build.xml:43: 启动wsimport时出错:生成失败 (总时间:1秒)

    第43行是:

    <wsimport sourcedestdir="${build.generated.dir}/jax-wsCache/CurrencyConvertor" 
    destdir="${build.generated.dir}/jax-wsCache/CurrencyConvertor" wsdl=
    "${basedir}/${conf-dir}xml-resources/web-service-references/
    CurrencyConvertor/wsdl/www.webservicex.com/CurrencyConvertor.asmx.wsdl"
    catalog="catalog.xml" extension="true" verbose="true"
    wsdlLocation="http://www.webservicex.com/CurrencyConvertor.asmx?wsdl" 
    xnocompile="true" xendorsed="true">
    

    12.)重启Netbeans。
    13.)清理和建设项目。(现在开始建造)
    14.)运行项目。Glassfish启动正常,除了此单行错误消息:

    严重:解析目录时出错

    15.)加载Web服务测试仪页面会在Glassfish日志中产生以下异常:

    WARNING: Servlet web service endpoint 'NewWebService' failure
    java.lang.IllegalStateException: WEB9031: WebappClassLoader unable to load resource [META-INF/services/org.apache.xerces.xni.parser.XMLParserConfiguration], because it has not yet been started, or was already stopped
    at org.glassfish.web.loader.WebappClassLoader.findResourceInternal(WebappClassLoader.java:2085)
    at org.glassfish.web.loader.WebappClassLoader.findResource(WebappClassLoader.java:1018)
    at org.glassfish.web.loader.WebappClassLoader.getResourceAsStream(WebappClassLoader.java:1255)
    at org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source)
    at com.sun.org.apache.xml.internal.resolver.readers.SAXCatalogReader.readCatalog(SAXCatalogReader.java:238)
    at com.sun.org.apache.xml.internal.resolver.Catalog.parseCatalog(Catalog.java:680)
    at com.sun.xml.ws.util.xml.XmlUtil.createEntityResolver(XmlUtil.java:270)
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:560)
    at org.glassfish.webservices.JAXWSServlet.registerEndpoint(JAXWSServlet.java:405)
    at org.glassfish.webservices.JAXWSServlet.doInit(JAXWSServlet.java:264)
    at org.glassfish.webservices.JAXWSServlet.init(JAXWSServlet.java:99)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1428)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1060)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:187)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    at java.lang.Thread.run(Thread.java:619)
    
    WARNING: StandardWrapperValve[NewWebService]: PWC1382: Allocate exception for servlet NewWebService
    javax.servlet.ServletException
    at org.glassfish.webservices.JAXWSServlet.doInit(JAXWSServlet.java:271)
    at org.glassfish.webservices.JAXWSServlet.init(JAXWSServlet.java:99)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1428)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1060)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:187)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: java.lang.IllegalStateException: WEB9031: WebappClassLoader unable to load resource [META-INF/services/org.apache.xerces.xni.parser.XMLParserConfiguration], because it has not yet been started, or was already stopped
    at org.glassfish.web.loader.WebappClassLoader.findResourceInternal(WebappClassLoader.java:2085)
    at org.glassfish.web.loader.WebappClassLoader.findResource(WebappClassLoader.java:1018)
    at org.glassfish.web.loader.WebappClassLoader.getResourceAsStream(WebappClassLoader.java:1255)
    at org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
    at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source)
    at com.sun.org.apache.xml.internal.resolver.readers.SAXCatalogReader.readCatalog(SAXCatalogReader.java:238)
    at com.sun.org.apache.xml.internal.resolver.Catalog.parseCatalog(Catalog.java:680)
    at com.sun.xml.ws.util.xml.XmlUtil.createEntityResolver(XmlUtil.java:270)
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:560)
    at org.glassfish.webservices.JAXWSServlet.registerEndpoint(JAXWSServlet.java:405)
    at org.glassfish.webservices.JAXWSServlet.doInit(JAXWSServlet.java:264)
    ... 26 more
    

    我能做些什么来解决这个问题吗?注意,它只在我创建新的Web服务客户机/引用之后发生。即使有人建议我应该针对哪个项目创建一个bug(即,这是NetBeans的错误吗?玻璃鱼断层?JAX-WS故障?等等),那就好了。

    2 回复  |  直到 10 年前
        1
  •  4
  •   Catchwa    14 年前

    我终于找到了解决办法:

    http://forums.java.net/jive/thread.jspa?threadID=59445

    我需要做的是从xercesimpl.jar文件中删除这些文件:

    META-INF/services/javax.xml.parsers.DocumentBuilderFactory
    META-INF/services/javax.xml.parsers.SAXParserFactory
    

    当修改后的JAR文件包含在我的项目中时,它不再引起任何问题。

    如果有人有更干净的解决方案,请告诉我。

        2
  •  0
  •   Vaseaa    10 年前

    我找到了解决我的问题的方法,这和你的相似。

    我在jar中添加了以下文件:

    META-INF/services/org.apache.xerces.xni.parser.XMLParserConfiguration

    此文件的内容只是:

    org.apache.xerces.parsers.XML11Configuration
    

    当做。