Hi all,
thanks for all the tips. I've decided to go with a simple Handler.
At first I tried the LogHandler that was supplied with Axis, but for
some reason I did not get it to work like the way I wanted.
My approach was a little different:
public void invoke(MessageContext arg0) throws AxisFault {
Message msg = arg0.getCurrentMessage();
ByteArrayOutputStream out = new ByteArrayOutputStream();
msg.writeTo(out);
System.out.println("Current Message: " + out.toString());
}
Regards,
Jin-Ha Tchoe
Am Freitag, den 08.04.2005, 13:22 -0400 schrieb [EMAIL PROTECTED]:
> I've done similar stuff through handlers both client and service. Here is
> some example client code:
>
> public class ClientSOAPPrintHandler extends BasicHandler
> {
> public void invoke(MessageContext ctx) throws AxisFault
> {
> System.out.println("Inside Handler");
> String message = null;
> try
> {
> Message rmsg = ctx.getRequestMessage();
> SOAPEnvelope se = rmsg.getSOAPEnvelope();
> Document doc = se.getAsDocument();
>
> org.apache.xml.security.utils.XMLUtils.outputDOM(doc.getDocumentElement(),
> System.out);
> }
> catch(Exception e)
> {
> e.printStackTrace();
> }
> }
> }
>
> The service side is a little different, but same concept.
> There is some setup to get Axis to invoke the handlers and you may need to
> change where the output is going.
> Hope this helps,
> Mark A. Malinoski
> AES/PHEAA
> Technical Coordinator/Web Development
> 717-720-2413
> [EMAIL PROTECTED]
>
>
>
>
>
> "Avadhanula,
> Suresh "
> <[EMAIL PROTECTED] To
> do.com> <[email protected]>,
> <[EMAIL PROTECTED]>, "Venkat Reddy"
> 04/08/2005 01:06 <[EMAIL PROTECTED]>
> PM cc
>
> Subject
> Please respond to RE: How to dump the raw SOAP
> [EMAIL PROTECTED] Envelope?
> he.org
>
>
>
>
>
>
>
>
>
> Here is the methods I wrote to marshal SOAPMessages. This would provide
> output similar to what you see in TCPMon.
> I have modified it to take any object and add it as <element
> ...>..</element> in the SOAP.
>
>
>
> /**
> * @param object passed to create SOAPMessage
> */
> public static String marshal(Object msg)
> {
> if (msg == null)
> return null;
>
> RPCElement rpcElement = new
> RPCElement("soapmessage");
>
>
> // Structure of a SOAP Envelope is
> // SOAPEnvelope
> // --> RPCElement
> //
> --->
> RPCParam * n
> // Create RPCParam of each ISMessage param.
> // Serialize. Encapuslate it with RPCElement
> // that contains the dummy method name. Set
> // RPCElement as body in SOAPEnvelope
>
>
> String paramName = "param"
> Class cl = param.getClass();
> Object value = param;
> QName xmlTypeQName = getTypeQName(cl);
> //
> AxisEngine provides implementation of this. I have not shown it here. If
> you need it email me.
> ParameterDesc paramDesc = new
> ParameterDesc();
>
> paramDesc.setQName(new QName("",
> paramName));
> paramDesc.setTypeQName(xmlTypeQName);
> paramDesc.setJavaType(cl);
>
> RPCParam rpcParam = new
> RPCParam(paramName,
> value);
> rpcParam.setParamDesc(paramDesc);
> rpcElement.addParam(rpcParam);
>
> SOAPEnvelope message = new SOAPEnvelope();
> message.addBodyElement(rpcElement);
>
> StringBuffer sb = new StringBuffer();
> String retStr = null;
> try
> {
> // This is Axis Specific code to
> serialize
> SOAPEnvelope
> // MessageContext is used through out
> AxisEngine
> which
> // is used as scratchpad by different
> modules of
> Axis.
> // Hence it is important tha twe set
> the
> SOAPEnvelope in
> // message context
>
> MessageContext mc = new
> MessageContext(aa.getAxisEngine());
> Message soapMsg = new
> Message(message);
> mc.setMessage(soapMsg);
>
> // We need to add content type header
> as it is
> used during
> // deserialization to unmarshal any
> attachements
> present.
> // Content header will specify the
> multipart
> mime header contents
> // along with boundry tags.
>
>
> sb.append(HTTPConstants.HEADER_CONTENT_TYPE).append(": ");
> long contentLength =
> soapMsg.getContentLength();
> if (log.isDebugEnabled())
> log.debug(" ContentLength
> " +
> contentLength);
> // This Call does all the magic of
> analyzing
> soap message and
> // any attachements to form the header
>
> String contentType =
> soapMsg.getContentType(mc.getSOAPConstants());
> sb.append(contentType);
> sb.append("\r\n"); // Required CR for
> Content
> Header
>
> ByteArrayOutputStream bos = new
> ByteArrayOutputStream();
> soapMsg.writeTo(bos); // Serialize the
> actual
> soap message along with attachments
>
> sb.append(bos.toString());
> retStr = sb.toString(); // Combine
> content
> header with body and we are done
>
> if (log.isDebugEnabled())
> log.debug(" Marshalled Msg
> is \n" +
> retStr);
>
> }
> catch (Exception e)
> {
> log.error(" Exception occured while
> dumping
> ISMessage ", e);
> }
> return retStr;
> }
>
>
> -Suresh
>
> -----Original Message-----
> From: Peter Maas [mailto:[EMAIL PROTECTED]
> Sent: Friday, April 08, 2005 6:23 AM
> To: Venkat Reddy
> Cc: [email protected]
> Subject: Re: How to dump the raw SOAP Envelope?
>
>
> Why don't you trace the soap message on TCP level using a tool like
> ngrep or ethereal?
>
>
> On Fri, 2005-04-08 at 16:05 +0530, Venkat Reddy wrote:
> > You can write a tiny logging handler to do something like -
> >
> > Transformer transformer =
> > TransformerFactory.newInstance().newTransformer();
> > StringWriter stringWriter = new StringWriter(128);
> > transformer.transform(new DOMSource(env), new
> > StreamResult(stringWriter)); StringBuffer buffer =
> > stringWriter.getBuffer();
> >
> > - venkat
> >
> > On Apr 8, 2005 3:55 PM, Jin-Ha Tchoe <[EMAIL PROTECTED]> wrote:
> > > Hi,
> > >
> > > we use Axis 1.2 Alpha with Tomcat 4.0.3 and Castor 0.95 for a
> > > SOAP-Service. Sometimes we have customers you are not accustomed to
> > > SOAP and have lots of problems using our Service. The problems range
>
> > > from simple typos and wrong namespaces to forgetting the
> SOAP-Envelope.
> > >
> > > Whenever Axis and Castor are unable to determine the right Service
> > > or (Un-)marshal the message, the most the customers can see (and
> > > therefore
> > > us) is a simple AxisFault. Unfortunately that does not help us see
> > > what exactly is going wrong. So, is there a way for Axis to dump the
>
> > > complete raw SOAP Envelope _before_ doing its work, so that we can
> something?
> > >
> > > Many thanks in advance,
> > >
> > > Jin-Ha Tchoe
> > > --
> > > Jin-Ha Tchoe <[EMAIL PROTECTED]>
> > >
> > >
> >
> >
> --
> Peter Maas
> Application Architect / Streaming
>
> Noterik Multimedia BV
> Prins Hendrikkade 120
> 1011 AM Amsterdam
> The Netherlands
>
> Tel: +31 (0)205929966
> Fax: +31 (0)204688405
> Gsm: +31 (0)616096324
>
> Web: www.noterik.nl
> --------------------------------------
> Take a look at our streaming solutions:
> http://www.streamedit.com/demo.html
>
> Get firefox:
> http://www.mozilla.org/products/firefox/
> ---------------------------------------
>
> :wq!
>
>
--
Jin-Ha Tchoe <[EMAIL PROTECTED]>