2011-03-08 4 views
1

SOAP 메시지의 헤더에서 값을 가져와야하고 JAX-WS를 사용하고 있습니다.JAX-WS 헤더를 String으로 변환하려면 어떻게해야합니까?

@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 (스트림이나 판독기가 아닌)를 반환하고 Iterator 나 Enumeration 또는 DOM API와 비슷한 인터페이스로 작업하는 것과 같습니다.

이 헤더를 XML 표현으로 변환 할 수있는 가장 쉬운 방법은 무엇입니까?

+0

처리기 내에서 writeTo 메소드를 통해 SOAPMessage 객체에서 쉽게 가져올 수 있습니다. 그러나 핸들러 외부에서 필요하다면 그렇게하지 않을 것입니다. –

답변

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; 
} 
관련 문제