WSDLException faultCode = PARSER_ERROR - При использовании schemaLocation: MyService? Xsd = myschema.xsd - PullRequest
0 голосов
/ 04 августа 2020

Я использую сторонний WSDL, который включает определение XSD. Я загрузил WSDL и XSD и поместил их в локальные папки: ${project.basedir}/src/main/resources/wsdl/ и ${project.basedir}/src/main/resources/xsd/ соответственно.

Начало файла WSDL блокируется следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="MyService" targetNamespace="http://com.foo.crud" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:crud="http://com.foo.crud" xmlns:tns="http://com.foo.schema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<documentation>MyService Ver. 1.5</documentation>
    <types>
        <xsd:schema>
            <xsd:import namespace="http://com.foo.schema" schemaLocation="MyService?xsd=myschema.xsd"/>
        </xsd:schema>
    </types>
...

Если я запустил код как есть (см. Ниже конфигурацию cxf-codegen-plugin), maven выдает ошибку:

faultCode=PARSER_ERROR: Problem parsing 'MyService?xsd=myschema.xsd'.: java.io.FileNotFoundException: /home/user/my-application/target/MyService (No such file or directory)

Итак, кажется, что cxf-codegen-plugin не может интерпретировать schemaLocation правильно, он ищет MyService вместо myschema.xsd.

Я могу «исправить» проблему, изменив указанное местоположение с schemaLocation="MyService?xsd=myschema.xsd" на schemaLocation="../xsd/myschema.xsd".

Но почему-то кажется неправильным редактировать предоставленный WSDL вручную.

Я использую:

  • maven : 3.6.0
  • cxf-codegen-plugin : 3.3.7
  • java : 11.0.7

И, наконец, конфигурация моего плагина:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${project.basedir}/src/main/resources/wsdl/MyService.wsdl</wsdl>
                        <wsdlLocation>classpath:wsdl/MyService.wsdl</wsdlLocation>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Я попытался добавить подсказку, где найти файл XSD:

<extraargs>
    <extraarg>-catalog</extraarg>
    <extraarg>${basedir}/src/main/resources/xsd/myschema.xsd</extraarg>
</extraargs>

Но, конечно, если имя неправильно проанализировано, это не поможет.

Так что, если кто-нибудь знает, как решить эту проблему, любая помощь очень оценен!

Подробная трассировка стека:

[INFO] 20:14:21.675 [main] DEBUG org.apache.cxf.resource.DefaultResourceManager - resolving resource <MyService?xsd=myschema.xsd> as stream 
[INFO] 20:14:21.676 [main] DEBUG org.apache.cxf.resource.DefaultResourceManager - resolving resource <MyService?xsd=myschema.xsd> type <class java.net.URL>
[WARNING] Exception in thread "main" org.apache.cxf.tools.common.ToolException: org.apache.cxf.wsdl11.WSDLRuntimeException: Fail to create wsdl definition file:/home/user/my-application/src/main/resources/wsdl/MyService.wsdl: WSDLException (at /definitions/types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing 'MyService?xsd=myschema.xsd'.: java.io.FileNotFoundException: /home/user/my-application/target/MyService (No such file or directory)
[WARNING]   at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412)
[WARNING]   at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:105)
[WARNING]   at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
[WARNING]   at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
[WARNING]   at org.apache.cxf.maven_plugin.wsdl2java.ForkOnceWSDL2Java.main(ForkOnceWSDL2Java.java:51)
[WARNING] Caused by: org.apache.cxf.wsdl11.WSDLRuntimeException: Fail to create wsdl definition file:/home/user/my-application/src/main/resources/wsdl/MyService.wsdl: WSDLException (at /definitions/types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing 'MyService?xsd=myschema.xsd'.: java.io.FileNotFoundException: /home/user/my-application/target/MyService (No such file or directory)
[WARNING]   at org.apache.cxf.tools.wsdlto.core.WSDLDefinitionBuilder.parseWSDL(WSDLDefinitionBuilder.java:99)
[WARNING]   at org.apache.cxf.tools.wsdlto.core.WSDLDefinitionBuilder.build(WSDLDefinitionBuilder.java:71)
[WARNING]   at org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.build(JAXWSDefinitionBuilder.java:84)
[WARNING]   at org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.build(JAXWSDefinitionBuilder.java:61)
[WARNING]   at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:187)
[WARNING]   at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:156)
[WARNING]   at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:404)
[WARNING]   ... 4 more
[WARNING] Caused by: javax.wsdl.WSDLException: WSDLException (at /definitions/types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing 'MyService?xsd=myschema.xsd'.: java.io.FileNotFoundException: /home/user/my-application/target/MyService (No such file or directory)
[WARNING]   at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2198)
[WARNING]   at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(WSDLReaderImpl.java:830)
[WARNING]   at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(WSDLReaderImpl.java:654)
[WARNING]   at com.ibm.wsdl.xml.WSDLReaderImpl.parseTypes(WSDLReaderImpl.java:610)
[WARNING]   at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(WSDLReaderImpl.java:320)
[WARNING]   at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2352)
[WARNING]   at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2338)
[WARNING]   at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:255)
[WARNING]   at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:165)
[WARNING]   at org.apache.cxf.tools.wsdlto.core.WSDLDefinitionBuilder.parseWSDL(WSDLDefinitionBuilder.java:80)
[WARNING]   ... 10 more
[WARNING] Caused by: java.io.FileNotFoundException: /home/user/my-application/target/MyService (No such file or directory)
[WARNING]   at java.base/java.io.FileInputStream.open0(Native Method)
[WARNING]   at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
[WARNING]   at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
[WARNING]   at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112)
[WARNING]   at java.base/sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:86)
[WARNING]   at java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184)
[WARNING]   at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:652)
[WARNING]   at java.xml/com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:150)
[WARNING]   at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:860)
[WARNING]   at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
[WARNING]   at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
[WARNING]   at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:246)
[WARNING]   at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
[WARNING]   at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2188)
[WARNING]   ... 19 more
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.889 s
[INFO] Finished at: 2020-08-04T20:14:21+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.cxf:cxf-codegen-plugin:3.3.7:wsdl2java (generate-sources) on project my-application: 
[ERROR] Exit code: 1
[ERROR] Command line was: /usr/local/share/jdk-11.0.7/bin/java --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED --add-exports=java.xml/com.sun.org.apache.xerces.internal.impl.xs=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED -jar /tmp/cxf-tmp-3258269347027548146/cxf-codegen1999716177968029181.jar /tmp/cxf-tmp-3258269347027548146/cxf-w2j14505354483396894904args
...