在Java XML Web服务中防止枚举

Ros*_*sim 3 java enums web-services jax-ws jbossws

我喜欢Enum类型安全,它也使代码更具可读性.Enum每当有机会我总是会利用.

当我需要将这些代码公开为Web服务时,问题就开始了.例如,如果我有这样的枚举:

public enum Language {
    ENGLISH(1),
    BAHASA_MALAYSIA(2);
}
Run Code Online (Sandbox Code Playgroud)

它将在wsdl中公开,如下所示:

<xs:simpleType name="language">
<xs:restriction base="xs:string">
  <xs:enumeration value="ENGLISH"/>
  <xs:enumeration value="BAHASA_MALAYSIA"/>
  </xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)

如果将来如果我决定添加一种新语言我将遇到麻烦,wsdl文件会有所不同,它会破坏旧客户端.

我的问题,如何防止枚举在wsdl中作为枚举公开?我想将它暴露为简单的数据类型Stringint.

如果重要的话,我正在使用JBoss WS.

Jas*_*kes 6

如果将来如果我决定添加一种新语言我将遇到麻烦,wsdl文件将会有所不同,它将破坏旧客户端.

不,它不会打破旧的(构造良好的)客户端.将值添加到enumaration可以被认为是向后兼容的更改.请参阅可扩展性,XML词汇表和XML架构等文章.

从你所说的我首先猜测你的工作代码,让JBoss-WS生成WSDL和XSD.没有什么不妥.但是,如果向后和向前的兼容性是您最关心的问题,那么您应首先签订合同(即手动设计WSDL和XSD).因为你永远不知道WSDL和XSD的新版JBossWS会是什么样子.

如果你真的希望JBoss-WS生成不同的枚举,你需要查看JAX-B.JAX-B是实际的XSD生成.