【发布时间】:2021-06-16 15:40:11
【问题描述】:
在使用 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);
}
}
名称中出现了 FA01/FA02 附加下划线 “FA_01” 而不是 Enum。
有什么办法可以解决这个问题吗?这类似于 2012 年提出的问题 wsimport generating enum types incorrectly with extra underscore,但没有找到任何解决方法或解决方案。
【问题讨论】: