Как я могу преобразовать заголовок JAX-WS в строку? - PullRequest
1 голос
/ 09 марта 2011

Мне нужно получить значение из заголовка SOAP-сообщения, и я использую JAX-WS. Вытащить данные из заголовка нелегко, вот что я получил до сих пор:

    @Resource
    private WebServiceContext context;
...

    HeaderList headerList = (HeaderList) context.getMessageContext().get(JAXWSProperties.INBOUND_HEADER_LIST_PROPERTY);
    Header header = headerList.get(0);

Я хочу превратить этот заголовок в его представление XML, но API заголовка не выглядит легким. Я думаю, что я должен сказать header.readHeader (); Это возвращает XMLStreamReader (который не является ни Stream, ни Reader), и оттуда это похоже на работу с интерфейсом, похожим на Iterator, Enumeration или DOM API.

Какой самый простой способ преобразовать этот заголовок в его XML-представление?

1 Ответ

0 голосов
/ 09 марта 2011
    public static String prettyPrintXML(XMLStreamReader xmlStreamReader) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    try {
        Transformer serializer = TransformerFactory.newInstance().newTransformer();
        serializer.setOutputProperty(OutputKeys.INDENT, "yes");
        serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
        serializer.transform(new StAXSource(xmlStreamReader), new StreamResult(baos));
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

    String result = baos.toString();
    try {
        baos.close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    return result;
}
...