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中作为枚举公开?我想将它暴露为简单的数据类型String或int.
如果重要的话,我正在使用JBoss WS.
如果将来如果我决定添加一种新语言我将遇到麻烦,wsdl文件将会有所不同,它将破坏旧客户端.
不,它不会打破旧的(构造良好的)客户端.将值添加到enumaration可以被认为是向后兼容的更改.请参阅可扩展性,XML词汇表和XML架构等文章.
从你所说的我首先猜测你的工作代码,让JBoss-WS生成WSDL和XSD.没有什么不妥.但是,如果向后和向前的兼容性是您最关心的问题,那么您应首先签订合同(即手动设计WSDL和XSD).因为你永远不知道WSDL和XSD的新版JBossWS会是什么样子.
如果你真的希望JBoss-WS生成不同的枚举,你需要查看JAX-B.JAX-B是实际的XSD生成.