Are you sure you have no exception raised ? Because the exception cathing block uses "System.out.println" instead of "log", perhaps you didn't take a look at your servlet's console or it's corresponding file...

Steve Smith wrote:

I have a simple servlet which reads in a soap message, parses the
XML payload and attempts to add a single element to the existing
(soap message just read in)soap message. I receive the soap message
(from client) and display the elements to log file - no problem.
However, when I add an element to the soap message and return the
message the change does not take place. It's as if I never changed
the message. Can I modify the soap message I just read? Do I have to
recreate a new message from scratch or is there something I'm missing?
The servlet code is below. Thanks for any help.

SLS

------------------

//
// ModifySoapMsgService.java
//
// This program reads a SOAP message and returns a modify version of
// the same
// message back to the client application (requester).
//
//
// Build Instructions:
// o set classpath= <tomcat path>\common\lib\servlet.jar
// o javac ModifySoapMsgService.java
// o Copy ModifySoapMsgService.class file to
// <your web apps path>\MyWsApps\WEB-INF\classes
// o Call from client application (ModifySoapMsgClient).
//



/* Servlet related packages. */
import javax.servlet.*;         // Generic servlet package.
import javax.servlet.http.*;    // Web server extensions to encapsulate HTTP
communication.

/* SOAP related packages. */
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;

/* Other needed packages. */
import java.io.*;
import java.util.Iterator;


public class ModifySoapMsgService extends HttpServlet{ private static MessageFactory myMsgFactory;

        /* Create static instance of message factory. */
        static{
       try {
           /* Create a new message factory. */
           myMsgFactory = MessageFactory.newInstance();

       }catch(SOAPException e){
            System.out.println("Caught Exception: " + e.getMessage());
       }
   }


public void init(ServletConfig servletConfig) throws ServletException{ super.init(servletConfig); // Initialize servlet w/config info passed by Tomcat. }

   public void doPost(HttpServletRequest request,
                                HttpServletResponse response) throws IOException, 
ServletException{
       SOAPMessage mySoapMsg;

       System.out.println("\n\nModifySoapMsgSerice.doPost() - Received SOAP
message...");
       log("doPost() ...");
       try{
           InputStream myInputStream = request.getInputStream();
           OutputStream myOutputStream = response.getOutputStream();

                    log("o Reading SOAP message ...");
           /* Create SOAP message from SOAP content (sent by client) of
input stream. */
           mySoapMsg = myMsgFactory.createMessage(new
MimeHeaders(),myInputStream);

           /* Process SOAP message. */
           SOAPMessage reply=null;
           reply = onMessage(mySoapMsg);

           /* Return modified SOAP message. */
           System.out.println("ModifySoapMsgSerice.doPost() - Return
results...");
           reply.saveChanges();
           reply.writeTo(myOutputStream);
           myOutputStream.flush();
       }catch(Exception e){
           throw new ServletException("doPost failed: " + e.getMessage());
       }
   }


public SOAPMessage onMessage(SOAPMessage inSoapMsg){ SOAPPart mySoapPart; SOAPEnvelope mySoapEnvelope; SOAPHeader mySoapHeader; SOAPBody mySoapBody; SOAPBodyElement myAppFormElement; SOAPElement myApplicantElement; SOAPElement myNameElement; SOAPElement myAddressElement; SOAPElement myPhoneNoElement; SOAPElement myAgeElement; SOAPElement myBeneficiaryElement; Iterator myElementIterator; // Create iterator for child elements. Name myElementName; String nsUri = "http://ltree.com/app";; String nsPrefix = "lt"; ByteArrayOutputStream myByteArray = new ByteArrayOutputStream();


System.out.println("ModifySoapMsgSerice.onMessage() - Processing SOAP message..."); log("doMessage() ...");

       try{
           /* Log SOAP message just read in. */
           inSoapMsg.writeTo(myByteArray);
           log("o inSoapMsg: " + myByteArray.toString());

           /* Get SOAP part from message. */
           mySoapPart = inSoapMsg.getSOAPPart();

           /* Get envelope from SOAP part. */
           mySoapEnvelope = mySoapPart.getEnvelope();

           /* Get header from SOAP envelope. */
           mySoapHeader = mySoapEnvelope.getHeader();

           /* Get body from envelope. */
           mySoapBody = mySoapEnvelope.getBody();

           /*
            * Parse message body.
                 *
            * <lt:AppForm term="life" xmlns:lt="http://ltree.com/app";>
            *      <lt:Applicant>
            *          <lt:Name>Pat Brown</lt:Name>
            *          <lt:Address>123 Main St</lt:Address>
            *          <lt:PhoneNo>123-4567</lt:PhoneNo>
            *      </lt:Applicant>
            *      <lt:Beneficiary>Dale Brown</lt:Beneficiary>
            * </lt:AppForm>
            */
           /* - Get <AppForm> element. */
           myElementName =
mySoapEnvelope.createName("AppForm",nsPrefix,nsUri);    // Creates element
name.
           myElementIterator = mySoapBody.getChildElements(myElementName);
// Get child element iterator.
           myAppFormElement = (SOAPBodyElement)myElementIterator.next(); //
Get <AppForm> element.
                log("o Read <" + myAppFormElement.getElementName().getLocalName() + ">
element");

           /* - Get <Applicant> element of <AppForm>. */
           myElementName =
mySoapEnvelope.createName("Applicant",nsPrefix,nsUri);
           myElementIterator =
myAppFormElement.getChildElements(myElementName);   // Get child element
iterator.
           myApplicantElement = (SOAPElement)myElementIterator.next(); //
Get <Applicant> element.
                        log("o Read <" + myApplicantElement.getElementName().getLocalName() + 
">
element");

           /* - Get <Name> element of <Applicant>. */
           myElementName =
mySoapEnvelope.createName("Name",nsPrefix,nsUri);
           myElementIterator =
myApplicantElement.getChildElements(myElementName); // Get child element
iterator.
           myNameElement = (SOAPElement)myElementIterator.next(); // Get
<Name> element.
                        log("o Read <" + myNameElement.getElementName().getLocalName() + 
">
element");
           log("  - <Name> value: " + myNameElement.getValue());

           /* - Get <Address> element of <Applicant>. */
           myElementName =
mySoapEnvelope.createName("Address",nsPrefix,nsUri);
           myElementIterator =
myApplicantElement.getChildElements(myElementName); // Get child element
iterator.
           myAddressElement = (SOAPElement)myElementIterator.next(); // Get
<Address> element.
                        log("o Read <" + myAddressElement.getElementName().getLocalName() + 
">
element");
           log("  - <Address> value: " + myAddressElement.getValue());

           /* - Get <PhoneNo> element of <Applicant>. */
           myElementName =
mySoapEnvelope.createName("PhoneNo",nsPrefix,nsUri);
           myElementIterator =
myApplicantElement.getChildElements(myElementName); // Get child element
iterator.
           myPhoneNoElement = (SOAPElement)myElementIterator.next(); // Get
<PhoneNo> element.
                        log("o Read <" + myPhoneNoElement.getElementName().getLocalName() + 
">
element");
           log("  - <PhoneNo> value: " + myPhoneNoElement.getValue());

           /* - Get <Beneficiary> element of <AppForm>. */
           myElementName =
mySoapEnvelope.createName("Beneficiary",nsPrefix,nsUri);
           myElementIterator =
myAppFormElement.getChildElements(myElementName);   // Get child element
iterator.
           myBeneficiaryElement = (SOAPElement)myElementIterator.next(); //
Get <Beneficiary> element.
                        log("o Read <" + 
myBeneficiaryElement.getElementName().getLocalName() +
"> element");
           log("  - <Beneficiary> value: " +
myBeneficiaryElement.getValue());



           /*
            * Modify message body.
            */
           /* - Add <Age> sub-element "<lt:Age>32</lt:Age>" to <Applicant>.
*/
           myElementName = mySoapEnvelope.createName("Age",nsPrefix,nsUri);
           myAgeElement =
myApplicantElement.addChildElement(myElementName);
           myAgeElement.addTextNode("32");

inSoapMsg.saveChanges();

           log("o <Age> element: " + myAgeElement.getValue());
           myByteArray.reset();
           inSoapMsg.writeTo(myByteArray);
           log("o inSoapMsg: " + myByteArray.toString());

      }catch(Exception e){
           System.out.println("Caught Exception: " + e.getMessage());
       }

       return inSoapMsg;
   }

}






Reply via email to