BaseDomain クラスを継承するいくつかのドメイン クラスがあります。
この BaseDomain クラスには、 public final String name; であるフィールドがあります。
name の値はコンストラクターで設定されます。
public class BaseDomain {
public final String name;
public BaseDomain() {
this.name = this.getClass().getCanonicalName();
}
}
この BaseDomain はいくつかのクラスによって拡張されています
public class Trip extends BaseDomain {
private int id;
public Trip(int id){
this.id = id;
}
}
ここまでは順調ですね。
JXPath を使用して、Trip のオブジェクト インスタンス内のフィールド「name」の値を取得したいのですが、取得できません。「id」フィールドにはアクセスできますが、「name」フィールドにはアクセスできません。
JXPathContext jxPathContext = JXPathContext.newContext(trip);
jxPathContext.setLenient(true);
int id = (int)jxPathContext.getValue("/@id"); // This works.
String name = (String)jxPathContext.getValue("/@name"); // This does not work.
この設定とJXPathで「name」の値を取得することは可能ですか?
コードに構文エラーやその他のエラーがある可能性があります。皆さんが私の質問を理解して理解してくれることを願っています。
ヘルプやポインタは大歓迎です。
最初に: ケリー S. フレンチの素早いリプレイに感謝したいと思います。もう少し説明しなければならないことに気づきました。
最終的にはより深い検索を行うため、jxpath を使用したいと考えています。例: Trip は、BaseDomain も拡張する Locations のリストを保持する場合があります。各 Location は、BaseDomain を拡張する PointOfInterest のリストを保持できます。
コードの他の部分のリフレクションを介して、タイプに基づいて BaseDomain のリストを取得できるようにしたい (class.getCanonicalName())
オブジェクト ツリーは xml に基づいておらず、純粋な POJO です。
私が理解している限り、タイプ、クラス名などに基づいてオブジェクトのリストを見つけるための jxpath-query を作成する方法はありません。
これは正しいです?誰かがそれを行う方法を知っていますか?
見苦しくても、最も簡単な方法は、スーパークラスにクラス名を保持するフィールドを用意することです。それが私がこの醜い解決策を行った理由です。
最終的に、トリップに基づいて、任意の深さで BaseDomain のインスタンスであるオブジェクトの反復子を返す jxpath-query を作成したいと思います。オブジェクトツリーのどのブランチにノードが配置されているかに依存しません。探しているオブジェクトのクラス名を取得します。
jxpath-queryでこれを達成できるかどうか知っている人はいますか?
コード例、ブログまたはその他のドキュメントへのリンクは大歓迎です。
以前のように、私はどんな助けにもとても感謝しています.