2011-03-08 10 views
1

SOAPメッセージのヘッダーから値を取得する必要があり、JAX-WSを使用しています。ヘッダからデータをつかむことは容易ではありませんが、ここで私がこれまで持っているものです: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表現に変換する最も簡単な方法は何ですか?

+0

ハンドラ内のSOAPMessageオブジェクト自体から、writeToメソッドを使用して簡単に取得できます。しかし、それはあなたがハンドラの外でそれを必要とするなら、あなたにはあまり効果がありません。 –

答えて

0
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; 
} 
関連する問題