【发布时间】:2012-05-19 11:23:33
【问题描述】:
我喜欢 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。
【问题讨论】:
-
您使用的是哪个 Web 服务框架?
-
这有关系吗?我正在使用 JBoss WS
-
是的,这很重要;这就是我问的原因。
-
你的客户还不会破产吗?不知道如何处理新值,无论它们是如何编码的?
-
改变的是值,而不是 wsdl,所以一个好的客户端应该能够处理它。假设我开始为
FRENCH返回3并且客户不理解这一点,他们应该优雅地处理它(例如默认为ENGLISH)。但是如果 wsdl 改变了他们的代码将会中断,直到他们重建他们的代理代码。
标签: java web-services enums jax-ws jbossws