Digester を使用して API からの XML 応答を解析するクラスを拡張するクラスを作成しています (既存のクラスの例、以下のコード スニッパー)。応答を受け取った後、コードはオブジェクトを作成し、それに特定のメソッドを追加します。
簡潔にするために編集されたコードスニペット:
private Digester createDigester() {
Digester digester = new Digester();
digester.addObjectCreate("GeocodeResponse/result", GoogleGeocoderResult.class);
digester.addObjectCreate("GeocodeResponse/result/address_component", GoogleAddressComponent.class);
digester.addCallMethod("GeocodeResponse/result/address_component/long_name", "setLongName", 0);
...
digester.addSetNext("GeocodeResponse/result/address_component", "addAddressComponent");
Class<?>[] dType = {Double.class};
digester.addCallMethod("GeocodeResponse/result/formatted_address", "setFormattedAddress", 0);
...
digester.addSetNext("GeocodeResponse/result", "add");
return digester;
}
}
ただし、これから呼び出す API は JSON のみをサポートします。JSON を XML に変換し、それを Digester で実行することを含む可能性のある解決策を見つけましたが、それは信じられないほどハックのようです。
public JsonDigester(final String customRootElementName) {
super(new JsonXMLReader(customRootElementName));
}
これを行うより良い方法はありますか?