public void writeTo(SOAPMessage saaj) throws SOAPException { SOAPHeader header = saaj.getSOAPHeader(); SOAPHeaderElement she = header.addHeaderElement(new QName(getNamespaceURI(), getLocalPart())); she.addChildElement(actionLocalName); she.addTextNode(action); if (soapAction != null) { she.addChildElement(soapActionLocalName); she.addTextNode(soapAction); } }
@Validated @Test public void testHeaders() { try { // Create message factory and SOAP factory MessageFactory messageFactory = MessageFactory.newInstance(); SOAPFactory soapFactory = SOAPFactory.newInstance(); // Create a message SOAPMessage message = messageFactory.createMessage(); // Get the SOAP header from the message and // add headers to it SOAPHeader header = message.getSOAPHeader(); String nameSpace = "ns"; String nameSpaceURI = "http://gizmos.com/NSURI"; Name order = soapFactory.createName("orderDesk", nameSpace, nameSpaceURI); SOAPHeaderElement orderHeader = header.addHeaderElement(order); orderHeader.setActor("http://gizmos.com/orders"); Name shipping = soapFactory.createName("shippingDesk", nameSpace, nameSpaceURI); SOAPHeaderElement shippingHeader = header.addHeaderElement(shipping); shippingHeader.setActor("http://gizmos.com/shipping"); Name confirmation = soapFactory.createName("confirmationDesk", nameSpace, nameSpaceURI); SOAPHeaderElement confirmationHeader = header.addHeaderElement(confirmation); confirmationHeader.setActor("http://gizmos.com/confirmations"); Name billing = soapFactory.createName("billingDesk", nameSpace, nameSpaceURI); SOAPHeaderElement billingHeader = header.addHeaderElement(billing); billingHeader.setActor("http://gizmos.com/billing"); // Add header with mustUnderstand attribute Name tName = soapFactory.createName("Transaction", "t", "http://gizmos.com/orders"); SOAPHeaderElement transaction = header.addHeaderElement(tName); transaction.setMustUnderstand(true); transaction.addTextNode("5"); // Get the SOAP body from the message but leave // it empty SOAPBody body = message.getSOAPBody(); message.saveChanges(); // Display the message that would be sent // System.out.println("\n----- Request Message ----\n"); // message.writeTo(System.out); // Look at the headers Iterator allHeaders = header.examineAllHeaderElements(); while (allHeaders.hasNext()) { SOAPHeaderElement headerElement = (SOAPHeaderElement) allHeaders.next(); Name headerName = headerElement.getElementName(); // System.out.println("\nHeader name is " + // headerName.getQualifiedName()); // System.out.println("Actor is " + headerElement.getActor()); // System.out.println("mustUnderstand is " + // headerElement.getMustUnderstand()); } } catch (Exception e) { fail("Enexpected Exception " + e); } }
public boolean handleMessage(SOAPMessageContext smc) { Boolean outbound = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (outbound) { // outbound message // *** #8 *** // get token from response context String propertyValue = (String) smc.get(RESPONSE_PROPERTY); System.out.printf("%s received '%s'%n", CLASS_NAME, propertyValue); // put token in response SOAP header try { // get SOAP envelope SOAPMessage msg = smc.getMessage(); SOAPPart sp = msg.getSOAPPart(); SOAPEnvelope se = sp.getEnvelope(); // add header SOAPHeader sh = se.getHeader(); if (sh == null) sh = se.addHeader(); // add header element (name, namespace prefix, namespace) Name name = se.createName(RESPONSE_HEADER, "e", RESPONSE_NS); SOAPHeaderElement element = sh.addHeaderElement(name); // *** #9 *** // add header element value String newValue = propertyValue + "," + TOKEN; element.addTextNode(newValue); System.out.printf("%s put token '%s' on response message header%n", CLASS_NAME, TOKEN); } catch (SOAPException e) { System.out.printf("Failed to add SOAP header because of %s%n", e); } } else { // inbound message // get token from request SOAP header try { // get SOAP envelope header SOAPMessage msg = smc.getMessage(); SOAPPart sp = msg.getSOAPPart(); SOAPEnvelope se = sp.getEnvelope(); SOAPHeader sh = se.getHeader(); // check header if (sh == null) { System.out.println("Header not found."); return true; } // get Ticket header element Name nameTicket = se.createName(REQUEST_TICKET_HEADER, "e", REQUEST_NS); Iterator it = sh.getChildElements(nameTicket); // check header element if (!it.hasNext()) { System.out.printf("Header element %s not found.%n", REQUEST_TICKET_HEADER); return true; } SOAPElement elementTicket = (SOAPElement) it.next(); // *** #4 *** // get header element value String headerTicketValue = elementTicket.getValue(); System.out.printf("%s got '%s'%n", CLASS_NAME, headerTicketValue); // *** #5 *** // put Ticket token in request context System.out.printf("%s put token '%s' on request context%n", CLASS_NAME, headerTicketValue); smc.put(REQUEST_TICKET_PROPERTY, headerTicketValue); // set property scope to application so that server class can access property smc.setScope(REQUEST_TICKET_PROPERTY, Scope.APPLICATION); // get Author header element Name nameAuthor = se.createName(REQUEST_AUTHOR_HEADER, "e", REQUEST_NS); Iterator itAuthor = sh.getChildElements(nameAuthor); // check header element if (!itAuthor.hasNext()) { System.out.printf("Header element %s not found.%n", REQUEST_AUTHOR_HEADER); return true; } SOAPElement elementAuthor = (SOAPElement) itAuthor.next(); // *** #4 *** // get Author header element value String headerAuthorValue = elementAuthor.getValue(); System.out.printf("%s got '%s'%n", CLASS_NAME, headerAuthorValue); // *** #5 *** // put Author token in request context System.out.printf("%s put token '%s' on request context%n", CLASS_NAME, headerAuthorValue); smc.put(REQUEST_AUTHOR_PROPERTY, headerAuthorValue); // set property scope to application so that server class can access property smc.setScope(REQUEST_AUTHOR_PROPERTY, Scope.APPLICATION); // MAC // get MAC header element Name nameMac = se.createName(REQUEST_MAC_HEADER, "e", REQUEST_NS); Iterator itMac = sh.getChildElements(nameAuthor); // check header element if (!itMac.hasNext()) { System.out.printf("Header element %s not found.%n", REQUEST_MAC_HEADER); return true; } SOAPElement elementMac = (SOAPElement) itMac.next(); // *** #4 *** // get MAC header element value String headerMacValue = elementMac.getTextContent(); System.out.printf("%s got '%s'%n", CLASS_NAME, headerMacValue); // *** #5 *** // put MAC token in request context System.out.printf("%s put token '%s' on request context%n", CLASS_NAME, headerMacValue); smc.put(REQUEST_MAC_PROPERTY, headerMacValue); // set property scope to application so that server class can access property smc.setScope(REQUEST_MAC_PROPERTY, Scope.APPLICATION); String bodyValue = se.getBody().getTextContent(); // *** #5 *** // put Body token in request context System.out.printf("%s put token '%s' on request context%n", CLASS_NAME, bodyValue); smc.put(REQUEST_BODY_PROPERTY, bodyValue); // set property scope to application so that server class can access property smc.setScope(REQUEST_BODY_PROPERTY, Scope.APPLICATION); msg.writeTo(System.out); } catch (SOAPException e) { System.out.printf("Failed to get SOAP header because of %s%n", e); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return true; }