如何解决wsimport 生成带下划线的字母数字枚举
使用 wsimport 从 WSDL 生成 java 类时,枚举名称正在发生变化:
pom.xml
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<wsdlLocation>http://localhost/service/*</wsdlLocation>
<wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
<xdebug>true</xdebug>
<verbose>true</verbose>
<target>2.0</target>
<keep>true</keep>
</configuration>
<executions>
<execution>
<id>PaymentCheck</id>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<packageName>com.pay.jaxws.paymentCheck</packageName>
<wsdlDirectory>${basedir}/src/main/resources/wsdl/internal</wsdlDirectory>
<wsdlFiles>
<wsdlFile>PaymentCheck.wsdl</wsdlFile>
</wsdlFiles>
</configuration>
</execution>
</executions>
</plugin>
WSDL 枚举描述为:
<schema> ....
<simpleType name="subFailureType">
<restriction base="string">
<enumeration value="SUCCESS"/>
<enumeration value="FA01" /> <!-- Failure code for - Not enough cover -->
<enumeration value="FA01" /> <!-- Failure code for - All other cases -->
</restriction>
</simpleType>
</schema>
生成的类:
@XmlType(name = "subFailureType")
@XmlEnum
public enum SubFailureType {
SUCCESS("SUCCESS"),@XmlEnumValue("FA01")
FA_01("FA01"),@XmlEnumValue("FA02")
FA_02("FA02");
private final String value;
SubFailureType(String v) {
value = v;
}
public String value() {
return value;
}
public static SubFailureType fromValue(String v) {
for (SubFailureType c: SubFailureType.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
而不是 Enum FA01/FA02 附加下划线 "FA_01" 出现在名称中。
有什么办法可以纠正吗?这类似于 wsimport generating enum types incorrectly with extra underscore 在 2012 年提出的问题,但没有找到任何解决方法或解决方案。
解决方法
可以使用Bindings解决这个问题,在pom.xml中添加了binding entry:
<configuration>
<packageName>com.pay.jaxws.paymentCheck</packageName>
<wsdlDirectory>${basedir}/src/main/resources/wsdl/internal</wsdlDirectory>
<wsdlFiles>
<wsdlFile>PaymentCheck.wsdl</wsdlFile>
</wsdlFiles>
<bindingFiles>
<bindingFile>${basedir}/src/main/resources/wsdl/internal/paymentCheckBindings.xjb</bindingFile>
</bindingFiles>
</configuration>
并添加了paymentCheckBinding.xjb如下
<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings
wsdlLocation="PaymentCheck.wsdl"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="2.1"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxws:bindings
node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://account.ws.integration.payment.te.com/PaymentCheckWS']">
<jaxb:bindings
node="//xs:simpleType[@name='subFailureType']/xs:restriction/xs:enumeration[@value='FA01']">
<jaxb:typesafeEnumMember name="FA01" />
</jaxb:bindings>
</jaxws:bindings>
</jaxws:bindings>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。