Я использую сторонний 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