public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException { String retval = "<html> <H4>"; try { // Create a message factory. MessageFactory mf = MessageFactory.newInstance(); // Create a message from the message factory. SOAPMessage msg = mf.createMessage(); // Message creation takes care of creating the SOAPPart - a // required part of the message as per the SOAP 1.1 // specification. SOAPPart sp = msg.getSOAPPart(); // Retrieve the envelope from the soap part to start building // the soap message. SOAPEnvelope envelope = sp.getEnvelope(); // Create a soap header from the envelope. SOAPHeader hdr = envelope.getHeader(); // Create a soap body from the envelope. SOAPBody bdy = envelope.getBody(); // Add a soap body element to the soap body SOAPBodyElement gltp = bdy.addBodyElement( envelope.createName("GetLastTradePrice", "ztrade", "http://wombat.ztrade.com")); gltp.addChildElement(envelope.createName("symbol", "ztrade", "http://wombat.ztrade.com")) .addTextNode("SUNW"); StringBuffer urlSB = new StringBuffer(); urlSB.append(req.getScheme()).append("://").append(req.getServerName()); urlSB.append(":").append(req.getServerPort()).append(req.getContextPath()); String reqBase = urlSB.toString(); if (data == null) { data = reqBase + "/index.html"; } // Want to set an attachment from the following url. // Get context URL url = new URL(data); AttachmentPart ap = msg.createAttachmentPart(new DataHandler(url)); ap.setContentType("text/html"); // Add the attachment part to the message. msg.addAttachmentPart(ap); // Create an endpoint for the recipient of the message. if (to == null) { to = reqBase + "/receiver"; } URL urlEndpoint = new URL(to); System.err.println("Sending message to URL: " + urlEndpoint); System.err.println("Sent message is logged in \"sent.msg\""); retval += " Sent message (check \"sent.msg\") and "; FileOutputStream sentFile = new FileOutputStream("sent.msg"); msg.writeTo(sentFile); sentFile.close(); // Send the message to the provider using the connection. SOAPMessage reply = con.call(msg, urlEndpoint); if (reply != null) { FileOutputStream replyFile = new FileOutputStream("reply.msg"); reply.writeTo(replyFile); replyFile.close(); System.err.println("Reply logged in \"reply.msg\""); retval += " received reply (check \"reply.msg\").</H4> </html>"; } else { System.err.println("No reply"); retval += " no reply was received. </H4> </html>"; } } catch (Throwable e) { e.printStackTrace(); logger.severe("Error in constructing or sending message " + e.getMessage()); retval += " There was an error " + "in constructing or sending message. </H4> </html>"; } try { OutputStream os = resp.getOutputStream(); os.write(retval.getBytes()); os.flush(); os.close(); } catch (IOException e) { e.printStackTrace(); logger.severe("Error in outputting servlet response " + e.getMessage()); } }
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; }