JAX-WS wsimport 无法处理内联命名空间?

问题描述

我正在尝试使用 com.sun.xml.ws:jaxws-maven-plugin 从 WSDL 生成 java 类。

我的 WSDL 文件引用了一个外部命名空间文件

<wsdl:import namespace="http://www.company.com/"
             location="http://ws.company.com/private"/>

由于此 URL 不公开,我已下载该文件并使用 XML 目录指向它:

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
    <uri name="http://ws.company.com/private"
         uri="file:/ws.company.com.private.xml"/>
</catalog>

问题在于这个命名空间文件包含一个内联命名空间定义:

<wsdl:deFinitions name="Authentication" targetNamespace="http://www.company.com/" ...>
    <wsdl:types>
        <xs:schema elementFormDefault="qualified" targetNamespace="http://www.company.com/"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <!-- By debugging,I found that this import causes the problem -->
            <xs:import namespace="http://schemas.datacontract.org/2004/07/Tdi.Framework.Entity.ErrorResults"/>

            <!-- (etc...) -->
        </xs:schema>
        <xs:schema elementFormDefault="qualified"
                   targetNamespace="http://schemas.datacontract.org/2004/07/Tdi.Framework.Entity.ErrorResults"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema"
                   xmlns:tns="http://schemas.datacontract.org/2004/07/Tdi.Framework.Entity.ErrorResults">
            <!-- Here's where the deFinition is -->
        </xs:schema>
    </wsdl:types>
</wsdl:deFinitions>

当我运行 wsimport 时,出现以下异常:

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.jvnet.jax_ws_commons.jaxws.Invoker.main(Invoker.java:74)
Caused by: java.lang.NullPointerException: JAXP09020006: The argument 'systemId' can not be null.
        at java.xml/javax.xml.catalog.CatalogMessages.reportNPEOnNull(CatalogMessages.java:129)
        at java.xml/javax.xml.catalog.CatalogResolverImpl.resolveEntity(CatalogResolverImpl.java:70)
        at com.sun.tools.xjc.ModelLoader$1.resolveEntity(ModelLoader.java:398)
        at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.resolveRelativeURL(NGCCRuntimeEx.java:191)
        at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.importSchema(NGCCRuntimeEx.java:256)
        at com.sun.xml.xsom.impl.parser.state.importDecl.action0(importDecl.java:56)
        at com.sun.xml.xsom.impl.parser.state.importDecl.leaveElement(importDecl.java:167)
        at com.sun.xml.xsom.impl.parser.state.NGCCRuntime.endElement(NGCCRuntime.java:289)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:557)
        at com.sun.tools.xjc.util.SubtreeCutter.endElement(SubtreeCutter.java:82)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:557)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:557)
        at com.sun.tools.xjc.reader.xmlschema.parser.CustomizationContextChecker.endElement(CustomizationContextChecker.java:169)
        at java.xml/org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:557)
        at com.sun.tools.xjc.reader.internalizer.DOMForestScanner$LocationResolver.endElement(DOMForestScanner.java:110)
        at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:225)
        at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:251)
        at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:220)
        at com.sun.xml.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:97)
        at com.sun.tools.xjc.reader.internalizer.DOMForestScanner.scan(DOMForestScanner.java:62)
        at com.sun.tools.xjc.reader.internalizer.DOMForestScanner.scan(DOMForestScanner.java:70)
        at com.sun.tools.xjc.reader.internalizer.DOMForestParser.parse(DOMForestParser.java:74)
        at com.sun.tools.xjc.ModelLoader$XMLSchemaParser.parse(ModelLoader.java:210)
        at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.parseEntity(NGCCRuntimeEx.java:351)
        at com.sun.xml.xsom.impl.parser.ParserContext.parse(ParserContext.java:98)
        at com.sun.xml.xsom.parser.XSOMParser.parse(XSOMParser.java:141)
        at com.sun.xml.xsom.parser.XSOMParser.parse(XSOMParser.java:130)
        at com.sun.tools.xjc.ModelLoader.createXSOM(ModelLoader.java:475)
        at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:239)
        at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:65)
        at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:112)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2268)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:168)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:111)
        at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:414)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:175)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:153)

据我所知:解析器不喜欢 xs:import 标签没有定义 schemaLocation 的事实。我尝试了各种技巧(甚至将定义复制到外部文件),但似乎没有任何效果。谁能解释一下如何让这个工作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...