3

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

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

public enum Language {
    ENGLISH(1),
    BAHASA_MALAYSIA(2);
}

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

<xs:simpleType name="language">
<xs:restriction base="xs:string">
  <xs:enumeration value="ENGLISH"/>
  <xs:enumeration value="BAHASA_MALAYSIA"/>
  </xs:restriction>
</xs:simpleType>

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

我的问题是,如何防止枚举在 wsdl 中暴露为枚举?我希望它被暴露为简单的数据类型String或者int.

如果有问题,我正在使用JBoss WS 。

4

1 回答 1

6

如果将来如果我决定添加一种新语言我会遇到麻烦,那么 wsdl 文件将会 > 不同并且它会破坏旧客户端。

不,它不会破坏旧的(结构良好的)客户。向枚举添加值可以被认为是向后兼容的更改。请参阅Extensibility、XML Vocabularies 和 XML Schema等文章。

根据您的说法,我首先猜测您的工作代码,然后让 JBoss-WS 生成 WSDL 和 XSD。没有什么不妥。但是,如果向后和向前兼容性对您来说非常重要,您应该首先使用合同(即手动设计 WSDL 和 XSD)。因为您永远不知道 WSDL 和 XSD 的新版本 JBossWS 会是什么样子。

如果您真的希望 JBoss-WS 生成不同的东西,那么您需要查看 JAX-B 的枚举。JAX-B 是实际的 XSD 生成所做的。

于 2012-05-19T12:37:04.270 回答