私は、同様のJAXB JAVAオブジェクトを持つ複数のパッケージを持っています。 Javaオブジェクトは、異なるXSDから自動的に生成され、同様の構造を持つように見えますが、違いはないと仮定することはできません。類似しているにもかかわらず、2つの同様のXMLドキュメントを同じJAVAクラスにマーシャリングできません。2つの異なるパッケージの下で同じオブジェクトを操作するJAVA?
私は、コードの重複を減らす方法を見つけようとしていますが、同じオブジェクトからデータを取り出して別のパッケージからデータを取り出すときに、同じパッケージの同じコードをもう一度書き込まないようにしています。
public void function1(JAXBElement documentJAXB)
{
ObjType obj = new ObjType();
// parse the document
path.to.package1.Document doc = (path.to.package1.Document) documentJAXB.getValue();
obj.setMsgid(doc.getFIToFIPmtStsRpt().getGrpHdr().getMsgId());
obj.setCredtm(Util.getSqlDate(doc.getFIToFIPmtStsRpt().getGrpHdr().getCreDtTm()));
....
}
第二の機能は
public void function2(JAXBElement documentJAXB)
{
ObjType obj = new ObjType();
// parse the document
path.to.package2.Document doc = (path.to.package2.Document) documentJAXB.getValue();
obj.setMsgid(doc.getFIToFIPmtStsRpt().getGrpHdr().getMsgId());
obj.setCredtm(Util.getSqlDate(doc.getFIToFIPmtStsRpt().getGrpHdr().getCreDtTm()));
....
}
このコードを結合する方法はありpackage2
の下で同様のオブジェクトに同じ動作を適用しますか?私はジェネリックスを考えましたが、例えば、これらのクラスが実装するインタフェースがないため、関数呼び出しをコンパイルできません。getFIToFIPmtStsRpt
パッケージ名を動的に定義する方法はありますか?
あなたが彼らのために共通のインターフェースを作成し、と同様に、JAXBの設定でそれを設定することができますこれは:https://stackoverflow.com/questions/1271980/generating-a-jaxb-class-that-implements-an-interface – abbath
'document'クラスと、他のメソッドを呼び出すすべてのネストされたクラスへのインターフェイスを作成する必要があります私はこれを行うためのより良い、より速い方法を見つけることを望んでいた。 – KAD
状況によっては、オブジェクトを最大限に再利用しようとしない方が良い場合があります。 XSDが同じオブジェクトを共有する場合、なぜ同じ名前空間にないのでしょうか?それはそれらが同じパッケージで生成されるようにします。 XSDが関連しておらず、同じオブジェクトを(偶然によって)使用する場合、私はそれらを別々に生きておき、互いに独立して進化させることができます。 – Manuel