Я пишу класс, который расширяет класс, использующий Digester для анализа XML-ответа от API (пример существующий класс, фрагмент кода ниже). После получения ответа код создает объект и добавляет к нему определенные методы.
Фрагмент кода отредактирован для краткости:
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. Я нашел вероятный solution, которое включает в себя преобразование JSON в XML и последующий запуск его через Digester, но это кажется невероятно хакерским.
public JsonDigester(final String customRootElementName) {
super(new JsonXMLReader(customRootElementName));
}
Есть лучший способ сделать это?