Какой API использовать, если выходные данные могут быть представлены в XML или JSON - PullRequest
1 голос
/ 08 сентября 2011

У нас есть требование извлекать информацию из следующего API http://www.viralheat.com/developer/sentiment_api#method1, который может выдавать выходные данные в формате xml или json.Какой java api мне следует использовать, чтобы я мог написать оболочку для анализа этой информации, которая может использоваться пользовательским интерфейсом в формате JSON и отдельным клиентом в формате XML.

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Примечание: Я EclipseLink JAXB (MOXy) и член JAXB 2 ( JSR-222 ) экспертная группа.

Вы можете сделать это с помощью MOXy, посмотрите мой пост в блоге, где одна модель домена с одним набором метаданных используется с форматами JSON и XML API геокодирования Карт Google V2 :

Адрес

Ниже приведен класс из примера. Он использует MOXy's @XmlPath расширение , в дополнение к аннотациям JAXB:

package blog.geocode.json;

import javax.xml.bind.annotation.XmlType;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlType(propOrder={"country", "state", "city", "street", "postalCode"})
public class Address {

    @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:Locality/ns:Thoroughfare/ns:ThoroughfareName/text()")
    private String street;

    @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:Locality/ns:LocalityName/text()")
    private String city;

    @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:AdministrativeAreaName/text()")
    private String state;

    @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:CountryNameCode/text()")
    private String country;

    @XmlPath("Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:Locality/ns:PostalCode/ns:PostalCodeNumber/text()")
    private String postalCode;

}

Демо

Стандартные API JAXB используются для преобразования в / из JSON и XML:

package blog.geocode.json;

import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Address.class);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        // XML
        XMLInputFactory xif = XMLInputFactory.newFactory();
        StreamSource xml = new StreamSource("http://maps.google.com/maps/geo?q=1600+Amphitheatre+Parkway,+Mountain+View,+CA&output=xml&sensor=false&key=YOUR_KEY_HERE");
        XMLStreamReader xsr = xif.createXMLStreamReader(xml);
        xsr.nextTag(); // Advance to kml tag
        xsr.nextTag(); // Advance to Response tag
        JAXBElement<Address> addressFromXML = unmarshaller.unmarshal(xsr, Address.class);
        marshaller.marshal(addressFromXML, System.out);

        // JSON
        unmarshaller.setProperty("eclipselink.media.type", "application/json");
        StreamSource json = new StreamSource("http://maps.google.com/maps/geo?q=1600+Amphitheatre+Parkway,+Mountain+View,+CA&output=json&sensor=false&key=YOUR_KEY_HERE");
        JAXBElement<Address> addressFromJSON = unmarshaller.unmarshal(json, Address.class);
        marshaller.setProperty("eclipselink.media.type", "application/json");
        marshaller.marshal(addressFromJSON, System.out);
    }

}
2 голосов
/ 08 сентября 2011

Я бы использовал Xstream , который поддерживает XML и JSon с отображением структур данных.

1 голос
/ 15 сентября 2011

Я бы порекомендовал использовать Джексона , поскольку он превосходит другие рекомендуемые альтернативы при создании JSON, а также для XML:

  • Использование реализации JAXB с аннотациями JAXB (Джексон также может дополнительно поддерживать аннотации JAXB, так что очень мало накладных расходов на 2 библиотеки)
  • Используйте модуль Jackson xml-databind для создания XML с использованием самого Джексона (в формате, который обычно идентичен произведенному JAXB) * ​​1010 *

Я НЕ думаю, что вы обязательно должны использовать одну библиотеку или фреймворк, и результат часто будет лучше, если вы просто выберете лучший выбор для каждого отдельно. Например, XStream хорош для XML, но выдает уродливый JSON (и при этом медленно). Переход от XML к JSON подвержен ошибкам из-за импеданса формата, и мне еще предстоит увидеть библиотеку XML-обработки, которая эффективно производит JSON clean JSON (или даже просто очищает или эффективно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...