1

JibX が提供する CodeGen ツールを使用して作成したファイルがいくつかあります。これらのクラスはすべて同じルート名を持つため、生成されたクラスはすべて同じ名前になります。

最初に、これらの生成されたすべてのクラスを独自のパッケージに配置して名前の競合を解決することで、この問題を解決しました。その後、新しいオブジェクトを宣言またはキャストするたびに、非常に長いパッケージ名全体を宣言する必要があるという問題に遭遇しました。

これを処理する最初のアイデアは、元の自動生成されたクラスを拡張した個別の名前を持つ空のサブクラスを作成することでした。そのような

public class AutoGen
{
     //This class generated by CodeGen binds as expected
     //No problems marshalling or unmarshalling documents
}


public class UniqueName extends com.CompanyName.ProductName.SDK.Events.HeartBeatEvent.AutoGen
{
     //This class is empty
}

私が今直面している問題は、バインドがないために、JibX が文字列またはファイルをこのサブクラスにマーシャリングまたはアンマーシャリングしないことです。

CodeGen のドキュメントをもう一度読んだ後、生成されたクラス名を宣言できるコマンドが見つからないようです。CodeGen によって生成されたクラスに、ユーザーが宣言した一意の名前を効率的に作成する方法はありますか? そうでない場合、JibX がサブクラスを正しくマーシャリングおよびアンマーシャリングする方法はありますか? これらのソリューションのいずれかが機能します。

また、コードの生成元である xsd ファイルを変更することはできません。

4

2 に答える 2

0

このページに記載されている JiBX ネーム コンバーター拡張機能をご覧ください。

http://jibx.sourceforge.net/fromschema/codegen-extends.html

デフォルトの実装で利用可能なオプションを使用できない場合は、独自の名前コンバーターを作成できます。

おそらく、カスタム コンバーターを作成する必要があります。それはかなり単純なはずです。

JiBX のソース コードは次の場所にあります。

https://github.com/jibx/core

幸運を!

Don Corley
JiBX 寄稿者

于 2013-06-13T16:03:22.637 に答える
0

あなたが持っているオプションは、生成されたクラスを一意にすることです。それらを任意のパッケージ構造に配置してから、バインディングを編集します。

XSD を変更することはできず、対応するクラスを手動で記述したくないと思われるため、このオプションが最適な場合があります。

あなたの質問に直接答えるために、生成されたクラスの名前を指定する方法はありません。代わりに、クラスに独自の名前を付けてから、新しい名前とパッケージ構造に対応するようにバインディング構成を編集する必要があります。

于 2013-06-12T19:49:32.857 に答える