1 package demo.ws_addressing.common; 2 3 4 import java.util.Iterator ; 5 import java.util.Map ; 6 import java.util.Set ; 7 8 import javax.xml.namespace.QName ; 9 import javax.xml.soap.Name ; 10 import javax.xml.soap.Node ; 11 import javax.xml.soap.SOAPException ; 12 import javax.xml.soap.SOAPHeader ; 13 import javax.xml.soap.SOAPHeaderElement ; 14 import javax.xml.ws.handler.MessageContext; 15 import javax.xml.ws.handler.soap.SOAPHandler; 16 import javax.xml.ws.handler.soap.SOAPMessageContext; 17 import static javax.xml.ws.handler.MessageContext.MESSAGE_OUTBOUND_PROPERTY; 18 19 import org.objectweb.celtix.ws.addressing.AddressingBuilder; 20 import org.objectweb.celtix.ws.addressing.AddressingConstants; 21 22 23 26 public class HeaderSnooper implements SOAPHandler<SOAPMessageContext> { 27 28 private static final AddressingConstants ADDRESSING_CONSTANTS = 29 AddressingBuilder.getAddressingBuilder().newAddressingConstants(); 30 private static final String WSA_NAMESPACE_URI = 31 ADDRESSING_CONSTANTS.getNamespaceURI(); 32 33 public void init(Map <String , Object > map) { 34 } 35 36 public Set <QName > getHeaders() { 37 return null; 38 } 39 40 public boolean handleMessage(SOAPMessageContext context) { 41 snoop(context); 42 return true; 43 } 44 45 public boolean handleFault(SOAPMessageContext context) { 46 snoop(context); 47 return true; 48 } 49 50 public void close(MessageContext context) { 51 } 52 53 public void destroy() { 54 } 55 56 private void snoop(SOAPMessageContext context) { 57 try { 58 SOAPHeader header = 59 context.getMessage().getSOAPPart().getEnvelope().getHeader(); 60 if (header != null) { 61 System.out.println(getDirection(context) 62 + " WS-Addressing headers"); 63 Iterator headerElements = header.examineAllHeaderElements(); 64 while (headerElements.hasNext()) { 65 SOAPHeaderElement headerElement = 66 (SOAPHeaderElement )headerElements.next(); 67 Name headerName = headerElement.getElementName(); 68 if (WSA_NAMESPACE_URI.equals(headerName.getURI())) { 69 System.out.println(headerName.getLocalName() 70 + getText(headerElement)); 71 } 72 } 73 System.out.println(); 74 } 75 } catch (SOAPException se) { 76 System.out.println("SOAP header snoop failed: " + se); 77 } 78 } 79 80 private String getDirection(SOAPMessageContext context) { 81 Boolean outbound = (Boolean )context.get(MESSAGE_OUTBOUND_PROPERTY); 82 return outbound != null && outbound.booleanValue() 83 ? "Outbound" 84 : "Inbound"; 85 } 86 87 private String getText(SOAPHeaderElement headerElement) { 88 String text = " : "; 89 Iterator children = headerElement.getChildElements(); 90 if (children.hasNext()) { 91 text += ((Node )children.next()).getValue(); 92 } 93 return text; 94 } 95 96 } 97 98 | Popular Tags |