我正在尝试将服务从 Java 8 升级到 JDK 17。我对 Maven 还很陌生。下面是maven pom.xml文件。
<plugin>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>4.0.2</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
</configuration>
</execution>
</executions>
<configuration>
<wsdlDirectory>${wsdlDir}</wsdlDirectory>
<bindingDirectory></bindingDirectory>
<verbose>true</verbose>
<sourceDestDir>${basedir}/src/test/java</sourceDestDir>
<extension>true</extension>
<xjcArgs>
<xjcArg>-Xcollection-setter-injector</xjcArg>
</xjcArgs>
</configuration>
<dependencies>
<dependency>
<groupId>com.sun.istack</groupId>
<artifactId>istack-commons-runtime</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>com.sun.istack</groupId>
<artifactId>istack-commons-tools</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.jws</groupId>
<artifactId>jsr181-api</artifactId>
<version>1.0-MR1</version>
</dependency>
<dependency>
<groupId>org.andromda.thirdparty.jaxb2_commons</groupId>
<artifactId>collection-setter-injector</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
当尝试使用 Maven 构建此文件时,我在解析 wsdl 文件时遇到错误。
parsing WSDL...
[ERROR] Unexpected <bindings> appears at line 5 column 17
line 5 of http://dummy.pseudo-schema#schema2
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.jvnet.jax_ws_commons.jaxws.Invoker.main(Invoker.java:74)
Caused by: com.sun.tools.ws.wscompile.AbortException
at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:114)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2265)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:164)
at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:111)
at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:413)
at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:180)
at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:158)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
... 2 more
下面是正在使用的 jax-ws 绑定文件(由于政策删除了一些细节)
<?xml version="1.0" encoding="UTF-8"?>
<bindings version="2.1" wsdlLocation=""
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl">
<globalBindings>
<javaType name="java.util.Date" xmlType="xs:date"
parseMethod=""
printMethod=""
/>
<javaType name="java.util.Date" xmlType="xs:dateTime"
parseMethod=""
printMethod=""
/>
<xjc:serializable/>
</globalBindings>
</bindings>
使用 Java 8 构建项目时,相同的配置也有效。有人可以让我知道到底是什么问题吗?我对这些插件还很陌生,所以很难找到问题。
以上配置有两点:
1。您的标头定义对于雅加达迁移不正确
应该是下面这个
<bindings version="3.0" wsdlLocation=""
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns="https://jakarta.ee/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl">
如果您不针对 jakarta(例如,Spring v6 以下/SpringBoot v3 以下)但只需要 Java17,那么插件本身应更改为以下内容:
<plugin>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3.7</version>
<!-- configuration like above here -->
</plugin>
2。我还发现您正在使用以下插件,但该插件不在活动开发状态下:
<dependency>
<groupId>org.andromda.thirdparty.jaxb2_commons</groupId>
<artifactId>collection-setter-injector</artifactId>
<version>1.0</version>
</dependency>
此插件位于
org.jvnet.jaxb:jaxb-plugins:4.0.0
,您可以在 here 找到,并且可以使用 -Xsetters
激活(插件文档 here。只需将上述依赖项替换为新依赖项即可。
对于基于雅加达的版本,请使用此:
<dependency>
<groupId>org.jvnet.jaxb</groupId>
<artifactId>jaxb-plugins</artifactId>
<version>4.0.0</version>
</dependency>
对于非基于雅加达的版本,请使用此:
<dependency>
<groupId>org.jvnet.jaxb</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>2.0.9</version>
</dependency>
还有一点:
org.andromda.thirdparty.jaxb2_commons
groupId 中的一些插件目前已集成在 jaxb-plugins 4.0.1 中。