1

質問: 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 がスタブを検証するのを待ちます(ただし、これはセッターの呼び出し中に検証が失われることを意味します)。
4

1 に答える 1

2

これを行うXJCプラグインを見たことがありません。いくつかの基本的な検証ステップのためにそれを書きたいと思うなら、私たちは確かに貢献をいただければ幸いです。

データモデルとしてXMLBeansを使用するように切り替えたい場合、CXFのwsdl2javaはXMLBeansをサポートします。「-dbxmlbeans」フラグをコマンドラインに追加すると、JAXBの代わりにXMLBeansのものが生成されます。

于 2012-11-29T18:50:16.773 に答える