私は EclipseLink MOXy Dynamic Entity Creation を使用していますが、問題が 1 つあります。私のアプリは、ダウンストリーム SOAP サービスのコードベースにライブラリを保持していません。ただし、起動時にDynamicJAXBContextFactory.createContextFromXSD()を使用してすべてのオブジェクトを作成します。ここから、独自のローカルで定義されたオブジェクトを取得し、アプリでメタデータを使用して変換します。下流のオブジェクトが単純で、ネストされたクラスがない場合、問題なく変換されたオブジェクトを作成できます。しかし、次のような下流の DynamicType があるとします。
class Person {
class Address {
String city;
String state;
}
String first;
String last;
Address address;
}
XPathメソッドによるセットを使用して人物オブジェクトを作成しようとしました:
DynamicEntity person = jaxbContext.newDynamicEntity(jaxbContext.getDynamicType( "Person" ));
jaxbContext.setValueByXPath( person, "first/text()", null, "Tres");
jaxbContext.setValueByXPath( person, "last/text()", null, "Bailey");
jaxbContext.setValueByXPath( person, "address/city/text()", null, "Cowpens");
jaxbContext.setValueByXPath( person, "address/state/text()", null, "SC");
最初の 2 つの set 値は機能しますが、person が真新しいオブジェクトの場合、都市と州を設定する後の 2 行は値を設定しません。アドレスオブジェクトにはまだ値が設定されていないため、それらが機能しないことは理にかなっています。しかし、私のユースケースでは、サービス固有のバインディング ファイルを持たないようにしようとしており、各 DynamicTypes を繰り返し処理して各設定のフィールドとそのタイプを見つける必要はありません。これはMOXyでも可能ですか?
私は EclipseLink バージョン 2.5 を使用し、Tomcat 7 と Java 6 を実行しています。