1

私のアプリが提供しているサービスの XSD のレガシー セットが提供されており、リファクタリングが非常に必要です。一部のコンシューマー アプリには開発チームがないため、結果とスキーマを変更できません。ただし、実際のファイルに対しては何でもできます。

これが私のディレクトリ設定です:

    • サブディレクトリ1
      • 一般
      • 発達
    • サブディレクトリ2
      • 一般
      • 発達

簡単にするために、ファイル間のバージョンの増分により、complexType に要素が追加され、以前のバージョンがベース/スーパー クラスと見なされるように再適用できると仮定します。

これで、subdir1/common に、Include_v01.xsd と Include_v02.xsd を含めることができます。subdir1/development には、Include_v01.xsd を使用する svc1_v01.xsd と、Include_v02.xsd を使用する svc1_v02.xsd があります。

Subdir2/common では、Include_v02.xsd と Include_v03.xsd を使用できます subdir2/developmen では、Include_v02.xsd を使用する svc2_v01.xsd と、include_v03.xsd を使用する svc2_v02.xsd を使用できます

私はそのようなサブディレクトリを約20個持っています。これらのディレクトリには、約 1500 個ほどの XSD ファイルがあります。各 xsd には複数のインクルードを含めることができ、それ自体に複数のインクルードを含めることができ、それ自体に複数のインクルードを含めることができます。

最終的には、これらを最も単純な形式にリファクタリングしたいと考えています。たとえば、Include_v02.xsd のコピーは 1 つだけで、Include_v02.xsd は完全に別のコピーではなく、Include_v01.xsd から実際に構築されます。 . はい、ファイルをコピーし、名前を変更し、フィールドを 1 つ追加しただけのジャークもいます。次に、それを使用するすべてのサブディレクトリにコピーしました。

それよりも重要なのは、Java クラスを同様の構造で生成できることです。

現在、私ができる最善の方法は、ディレクトリで xjc を実行し、各サービスのスキーマを別のパッケージにコンパイルすることです。これにより、さまざまな Java パッケージに Include_v02 オブジェクトのコピーが大量に作成されます。スキーマがバージョン管理されていないか、バージョン間で再管理されていないため、この方法で行う必要があります。同じばかがファイルを複製し、名前を変更し、新しい要素を追加するだけで、ルート要素を同じに保ち、他の際立った特徴はありません。

それは難しい注文であり、Java オブジェクトを簡単にコピー/マージする方法、または異なるパッケージ内の同一の Java オブジェクト間で単純にコピーする方法に落ち着くでしょう。

ここで参照されているように、エピソード ファイルは、現在生成に使用しているスクリプトよりも優れているとは思えません。これは、多層のネスティングを考えると、各ルート要素を非常に慎重に把握する必要があるためです。使用済み。

EDIT============================ 私がInclude_v01.xsdに以下を持っていた場合:

<complexType name="cmplxtp">
    <complexContent><sequence>
         <element name="st1" type="string"/>
     </complexContent></sequence>
</complexType>

そして、Include_v02.xsd には次のようなものがありました

<complexType name="cmplxtp">
    <complexContent><sequence>
         <element name="st1" type="string"/>
         <element name="st2" type="string"/>
     </complexContent></sequence>
</complexType>

私はいくつかの組み合わせが大好きです

にリファクタリングされた XSD

Include_v01.xsd 同じ Include_v02.xsd

また

Include_v01.xsd に残っているすべての個々の要素 (複合または単純) 新しい要素のみを追加して、Include_v01.xsd をインクルードするための Include_v02

また

2 つの Java クラス

package pack1;
class cmplxtp {
    public String st1;
}

package pack2;
class cmplxtp extends pack1.cmplxtp  {
    public String st2;
}

Java クラスは私にとって最も重要ですが、そこに到達するのに役立つものは何でも優れています。

それがまったく可能でない場合、単純な場合、または価値がない場合は、同じオブジェクトが異なるパッケージに存在する場合に、同じオブジェクトを別のオブジェクトにコピーする簡単な方法にも感謝します。コードベースを単純化したいだけです。160 ほどのサービスがあり、それぞれに多くのバージョンがあり、各バージョンには SAME EXACT ファイルを含めることができます。これは、生成されたコードでは、同じクラスの 300 以上の定義を持つことができることを意味しますが、コピーされたインクルードのために異なるパッケージになります。

4

0 に答える 0