Как я могу вернуть XML из службы Apache CXF REST и преобразовать его в json? - PullRequest
0 голосов
/ 31 марта 2011

У меня есть простой сервис REST, созданный с использованием Apache CXF и Spring.Я использую материал сопоставления расширений для возврата json или xml в зависимости от URL (http: //.../hello.json и т. Д.).Это работает очень хорошо, когда возвращаются аннотированные JAXB Java-классы.

Есть ли простой способ заставить Apache CXF автоматически конвертировать созданный вручную XML в json?Что мне нужно будет вернуть из моего сервиса?

Я знаю, что могу вернуть XML следующим образом, но это не приведет к автоматическому преобразованию XML в json:

public Response get() {
    return Response.status(200).type(MediaType.TEXT_XML).entity("<hello>world</hello>").build();
}

Я вернусьстатические XML-документы из файловой системы или другого хранилища.Мне нужно иметь возможность вернуть JSON вместо этого.

1 Ответ

1 голос
/ 01 апреля 2011

Я выбрал другой (лучший) подход в конце.Документы XML обслуживаются сервлетом и преобразуются в json с этим кодом:

public void convertXmlToJson(InputStream in, OutputStream out) throws XMLStreamException {
    XMLEventReader xmlIn = XMLInputFactory.newFactory().createXMLEventReader(in);
    OutputStreamWriter osw;
    try {
        osw = new OutputStreamWriter(out, "UTF8");
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e.toString(), e); // not possible really
    }
    MappedXMLStreamWriter jsonOut = new MappedXMLStreamWriter(new MappedNamespaceConvention(), osw);
    AbstractXMLEventWriter xmlOut = new AbstractXMLEventWriter(jsonOut);
    while (xmlIn.hasNext()) {
        XMLEvent ev = xmlIn.nextEvent();
        if (ev instanceof Characters && ((Characters)ev).isWhiteSpace()) {
            continue;
        }
        xmlOut.add(ev);
    }
    xmlOut.close();
}
...