0

CXF を使用して WSDL を Java に変換しています。キーを有効にする-autoNameResolutionと、CXF は同じ内容のファイルを多数生成します。それを回避する方法はありますか?

ネストされた静的クラスを避けるために、有効にしまし<jaxb:globalBindings localScoping="toplevel">た。WSDL 要素でわかるように、「Apple」は 3 回参照されています。残念ながら、WSDL を変更することはできません。CXF は 、それに応じて Apple.java、Apple2.java、Apple3.java-autoNameResolutionを作成するか、フラグが設定されていない場合にクラッシュします。

<xs:element name="Forest">
  <xs:complexType>
    <xs:sequence>
      <xs:element maxOccurs="99" minOccurs="0" name="Apple">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Size" type="xsd:string" />
            <xs:element name="Color" type="xsd:string" />
            <xs:element name="Taste" type="xsd:string" />
          </xs:sequence>
        </xs:complexType>

      </xs:element>
      <xs:element minOccurs="0" name="TreeOne">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Branch1" type="xsd:string">
            </xs:element>
            <xs:element maxOccurs="99" minOccurs="0" name="Apple">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Size" type="xsd:string" />
                  <xs:element name="Color" type="xsd:string" />
                  <xs:element name="Taste" type="xsd:string" />
                </xs:sequence>

              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="TreeTwo">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="BranchTwo" type="xsd:string">
            </xs:element>
            <xs:element maxOccurs="99" minOccurs="0" name="Apple">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Size" type="xsd:string" />
                  <xs:element name="Color" type="xsd:string" />
                  <xs:element name="Taste" type="xsd:string" />
                </xs:sequence>

              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

wsdl2javaにApple2.javaと Apple3.javaを作成しないように教え、3 つのケースすべてで Apple.java を参照する方法はありますか? バインディングを使用すると、名前をApple2->PeachApple3->Watermelonなどの別の名前に変更できますが、これは私が探しているものではありません。3 つのリンゴすべてが同じフィールドのセットを持ち、実際には同じであることがわかるでしょうか? それを解決する方法はありますか?cxf によって生成されたコードをリファクタリングするリファクタリング プラグインでしょうか?

4

1 に答える 1

0

カスタマイズを使用して、JAXB/XJC に既存のクラスを強制的に再利用させることがjaxb:class/@refできます。線に沿った何か:

<jaxb:class ref="com.acme.foo.Apple"/>

com.acme.foo.Apple生成されたクラスの 1 つの FQCN はどこにありますかApple。これを他の 2 つの にバインドするxs:complexTypeと、JAXB は同じものを再度生成するのではなく、既存のクラスを再利用します。

私は WSDL をカスタマイズした経験があまりないので、残念ながら、この場合のバインディングの正確な構文を示すことはできません。

于 2019-01-21T20:21:39.000 に答える