質問: CXF の wsdl2java を使用して、生成された Java スタブにスキーマ要素と型の制限を含めることは可能ですか?
ユースケース: WSDL に次のタイプが含まれている場合:
<xs:complexType name="TestResponse">
<xs:sequence>
<xs:element name="code">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:maxInclusive value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="text">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
デフォルトでは、wsdljava は次のようなセッターを含むスタブを生成します。
public void setCode(Integer value) {
this.code = value;
}
public void setText(String value) {
this.text = value;
}
次のようなものがあると便利です。
public void setCode(Integer value) {
if (value > 5) throw new ValidationException();
this.code = value;
}
public void setText(String value) {
if (value.length() > 5) throw new ValidationException();
this.text = value;
}
そのようなツール/JAXB プラグインが現在 XJC 用に存在しないため、CXF の wsdljava が存在しないというのは正しいですか?
これまでにわかったこと:
少なくとも 2010 年には、Oracle Java プログラミング フォーラムのこの投稿によると、そのままでは、または利用可能なプラグインではサポートされていないようです。
これに対する次の可能な代替アプローチを認識しています(ただし、完全にはテストしていません)。
- krasa -jaxb-tools JAXB プラグインを使用してスタブに JSR-303 アノテーションを生成する
- XJC と CXF の wsdl2java をダンプし、XmlBeans を使用してスタブを生成します (私たちのプロジェクトは CXF に大きく依存しているため、これはオプションではありません)。
- ここで説明したようにスタブがシリアル化されたら、CXF がスタブを検証するのを待ちます(ただし、これはセッターの呼び出し中に検証が失われることを意味します)。