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

それが問題なら、私はJBossWSを使用しています。

4

1 に答える 1

6

将来、新しい言語を追加することにした場合、問題が発生すると、wsdlファイルが異なり、古いクライアントが破損します。

いいえ、古い(適切に構築された)クライアントを壊すことはありません。列挙に値を追加することは、下位互換性のある変更と見なすことができます。拡張性、XML語彙、XMLスキーマなどの記事を参照してください。

あなたの話から、私は最初にあなたの作業コードを推測し、JBoss-WSにWSDLとXSDを生成させます。それは何も悪いことではありません。ただし、後方および前方の互換性が非常に大きな懸念事項である場合は、最初に契約を結ぶ必要があります(つまり、WSDLとXSDを手動で設計します)。これは、WSDLとXSDの新しいバージョンのJBossWSがどのようになるかわからないためです。

本当にJBoss-WSに別の何かを生成させたい場合は、JAX-Bを調べる必要があります。JAX-Bは、実際のXSD生成が行うことです。

于 2012-05-19T12:37:04.270 に答える