4

私はこの次のディレクトリ構造を持っています

Root
   CommonSchema
      1.xsd
      2.xsd

   Service1
      XSD
        3.xsd ( importing 1 and 2 xsd )
      WSDL
        A.wsdl ( importing 3.xsd )

   Service2
      XSD
        4.xsd ( importing 1 and 2 xsd )
      WSDL
        B.wsdl ( importing 4.xsd )

XMLBeans + CXFを使用して、ソースを生成し、それらを1つのjarにコンパイルしようとしています。CommonSchemaフォルダーには、Service1と2で共有されるスキーマがあります。

ソースソースを生成しようとすると、1と2のxsdのソースに名前の競合があるようです。これを以下に示します。

最初のWSDL生成

ここに画像の説明を入力してください

2番目のWSDL生成

ここに画像の説明を入力してください

この一般的なスキーマをどのようにコンパイルする必要があるかについてのアイデアはありますか?

これが私のAntスクリプトです:

<target name="cxfWSDLToJava">
  <java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
    <arg value="-databinding"/>
    <arg value="xmlbeans"/>
    <arg value="-client"/>
    <arg value="-d"/>
    <arg value="cxfsrc"/>
    <arg value="D:\Generation\Services\CBS-CustAccountInfo-I\WSDL\CBS-CustAccountInfo-I-Concrete.wsdl"/>
    <classpath>
      <path refid="cxf.classpath"/>
    </classpath>
  </java>
</target>

<target name="cxfWSDLTXNToJava">
  <java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
    <arg value="-databinding"/>
    <arg value="xmlbeans"/>
    <arg value="-client"/>
    <arg value="-d"/>
    <arg value="cxfsrc"/>
    <arg value="D:\Generation\Services\CBS-DirectDebCredTransfer-C\WSDL\CBS-DirectDebCredTransfer-C-Concrete.wsdl"/>
    <classpath>
      <path refid="cxf.classpath"/>
    </classpath>
  </java>
</target>

私のプロジェクトは次の場所にあります:ここCXF-Generationの下。

スキーマ全体とWSDLは、CXF-Generation/Generationの下にあります。

4

2 に答える 2

1

私はアリの専門家ではないので、私が正しいかどうかはわかりませんが、問題は、一方のターゲットがもう一方のターゲットを覆い隠すことだと思います。

XmlBeansコマンドを実行する場合、2つの別々のコマンドのように実行する場合:

wsdl2java -uri my_service1.wsdl
wsdl2java -uri my_service2.wsdl

最初のコマンドはjarを生成し、2番目のコマンドは2番目のwsdlからの新しいコードでそれをovverrideします。

このように実行していると思います。そのため、1つのwsdlのコードしか取得できません。

それらを両方とも1つのwsdl(おそらくラッパーwsdl)に結合してから、そこからコードを生成する必要があります。

または、2つの異なるjarを生成できます。

編集:

少し修正しました。明らかにIBMだけが別のwsdlからのwsdlのインポートをサポートしています

したがって、ラッパーオプションはテーブルから外れています。私見、これらはあなたのオプションです:

  1. 競合が発生しないように共通スキーマのターゲット名前空間を変更し、2つのjarを生成します。
  2. 両方のwsdlを1つに結合します(単純なコピー貼り付け)-目的が異なる同じ名前のメソッド/パラメーターがある場合は、少し注意が必要です。
于 2012-07-01T12:59:45.810 に答える
0

xsdconfigを使用して問題を解決します。結局、パッケージを複製しましたが、それは私のニーズに合っています。

競合するパッケージを生成するMyMaven

<executions>
<execution>
    <id>generate-sources</id>
    <phase>generate-sources</phase>
    <configuration>
        <wsdlOptions>
            <wsdlOption>
                <wsdl>${basedir}\..\Generation\Services\CBS-DirectDebCredTransfer-C\WSDL\CBS-DirectDebCredTransfer-C-Concrete.wsdl</wsdl>
                <extraargs>
                    <extraarg>-db</extraarg>
                    <extraarg>xmlbeans</extraarg>
                    <extraarg>-p</extraarg>
                    <extraarg>com.xxx.txnpos.ws</extraarg>
                </extraargs>
                <bindingFiles>
                    <bindingFile>${basedir}/txnpos.xsdconfig</bindingFile>
                </bindingFiles>
            </wsdlOption>
        </wsdlOptions>
    </configuration>
    <goals>
        <goal>wsdl2java</goal>
    </goals>
</execution>
</executions>

私のxsd構成:

<?xml version="1.0"?>
<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/aggregates/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.aggregates</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/body/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.body</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/elements/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.elements</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/envelope/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.envelope</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/header/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.header</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/monetaryErrorReponse/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.monetaryErrorReponse</xb:package>
</xb:namespace>
</xb:config>
于 2012-07-26T03:02:33.293 に答える