【问题标题】:Import namespace in WSDL result in JAXP09020006: The argument 'systemId' can not be null在 WSDL 中导入命名空间导致 JAXP09020006:参数“systemId”不能为空
【发布时间】:2019-06-28 08:13:56
【问题描述】:

我正在重新格式化没有得到任何答案或评论的现有问题。

我正在尝试使用 Java 11 和 Maven 3.6.1 通过 Netbeans 11 导入 WSDL。不过,Netbeans 8 和 Java 8.2 已经使用了相同的方法,但没有任何问题:

  • 老系统是Linux,新系统是Win10,
  • org.codehaus.mojo 的 jaxws-maven-plugin 2.5 用于旧系统,com.sun.xml.ws 的 jaxws-maven-plugin 2.3.2 用于新系统

我已将问题研究到我的 WSDL 的 import namespace 部分。

这是有问题的 WSDL,我删除了所有功能并删除了对公司名称的引用:

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://XYZ/DTROrchestrator" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="DTROrchestratorService" targetNamespace="http://XYZ/DTROrchestrator">
<wsdl:types>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://XYZ/datatypes/tehnicalException" targetNamespace="http://XYZ/datatypes/tehnicalException" version="1.0">
  <xs:complexType name="TechnicalExceptionInfoType">
    <xs:sequence>
      <xs:element minOccurs="0" name="ExceptionClass" type="xs:string"/>
      <xs:element minOccurs="0" name="SubCode" type="xs:string"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="Description" type="xs:string"/>
      <xs:element minOccurs="0" name="StackTraceString" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://XYZ/DTROrchestrator" xmlns:ns2="http://XYZ/datatypes/tehnicalException" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://XYZ/DTROrchestrator" version="1.0">
  <xs:import namespace="http://XYZ/datatypes/tehnicalException"/>
</xs:schema>

</wsdl:types>

<wsdl:message name="TechnicalException">
    <wsdl:part element="tns:TechnicalExceptionInfo" name="TechnicalException">
    </wsdl:part>
</wsdl:message>
<wsdl:portType name="DTROrchestratorPort">
</wsdl:portType>
<wsdl:binding name="DTROrchestratorServiceSoapBinding" type="tns:DTROrchestratorPort">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
</wsdl:binding>
<wsdl:service name="DTROrchestratorService">
    <wsdl:port binding="tns:DTROrchestratorServiceSoapBinding" name="DTROrchestratorPort">
      <soap:address location="http://XYZ:9203/DTROrchestrator/2.0.0"/>
    </wsdl:port>
</wsdl:service>

这是来自构建的消息

[DEBUG] cmd.exe /X /C ""C:\Program Files\Java\jdk-11.0.3\bin\java.exe" -Djavax.xml.accessExternalSchema=all -cp /C:/Users/Robert/.m2/repository/com/sun/xml/ws/jaxws-maven-plugin/2.3.2/jaxws-maven-plugin-2.3.2.jar org.jvnet.jax_ws_commons.jaxws.Invoker com.sun.tools.ws.wscompile.WsimportTool -pathfile C:\Users\Robert\AppData\Local\Temp\jax-ws-mvn-plugin-cp4115475835641866701.txt -keep -s C:\Users\Robert\MYAPP\MYAPP092\target\generated-sources\jaxws-wsimport -d C:\Users\Robert\MYAPP\MYAPP092\target\classes -verbose -encoding UTF-8 -extension -Xnocompile -catalog C:\Users\Robert\MYAPP\MYAPP092\src\jax-ws-catalog.xml -wsdllocation http://localhost/wsdl/DTROrchestrator.wsdl -b C:\Users\Robert\MYAPP\MYAPP092\src\jaxws\dtrorchestrator\dtrorchestrator-wsdlbindings.xml file:/C:/Users/Robert/MYAPP/MYAPP092/src/wsdl/DTROrchestrator/DTROrchestrator.wsdl"
parsing WSDL...

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:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    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:570)
    at com.sun.tools.xjc.util.SubtreeCutter.endElement(SubtreeCutter.java:82)
    at java.xml/org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:570)
    at java.xml/org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:570)
    at com.sun.tools.xjc.reader.xmlschema.parser.CustomizationContextChecker.endElement(CustomizationContextChecker.java:169)
    at java.xml/org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:570)
    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)
    ... 5 more

如果与 xs:import namespace=".​​.." 的行被删除,则没有错误(仅警告由于删除所有功能而导致的空 WSDL)。

编辑:如果 complexType 被移动到外部 xsd 中,那么也没有错误!

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://XYZ/DTROrchestrator" xmlns:ns2="http://XYZ/datatypes/tehnicalException" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://XYZ/DTROrchestrator" version="1.0">
  <xs:import namespace="http://XYZ/datatypes/tehnicalException" schemaLocation="tehnicalexception.xsd"/>
</xs:schema>

但是这个解决方案给我带来了未解决的绑定问题,因此我仍在寻找嵌入式 XSD 的解决方案。请回答我你有什么想法。

【问题讨论】:

    标签: java maven soap wsdl java-11


    【解决方案1】:

    我有一些信息。现在我知道,当我将 maven 设置为使用 Java 11 时,问题就开始了。这是新旧系统之间的关键区别。

    此外,我通过从 jaxws-maven-plugin 描述中删除整个 部分解决了这个问题。这些部分是很久以前添加的,它们显然不再正确了。

    因此,现在我只有这个:

    <plugin>
        <!-- Maven plugin for JAX-WS RI -->
        <!-- https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-maven-plugin -->
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.3.3</version>
        <!-- <dependencies> ... </dependencies> REMOVED -->
        <!-- <configuration> ... </configuration> REMOVED -->
        <executions>
        ...
        </executions>
    </plugin>
    

    编辑:我忘了提及,我将 maven-shade-plugin 更改为 maven-assembly-plugin。使用第一个我仍然得到错误(虽然不同)。

    顺便说一句:能够使用 Java 11 编译我的 SOAP 客户端是一个很长的故事,这不是唯一的问题。最后,我一切正常。

    【讨论】:

      猜你喜欢
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 2020-01-14
      • 2019-07-27
      相关资源
      最近更新 更多