cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Humagain, Himal" <himal.humag...@jpmchase.com>
Subject RE: Getting payload in the client side.
Date Wed, 08 Jun 2011 21:09:29 GMT
Thank you very much Dan for your reply. I am able to hit the interceptor and set headers there
and get it in the server. I still cannot get hold of content of the post in the interceptor
level. This is what I have: 

//in my main method 
	String payload = "This is what I want in ICOutBoundInterceptor";
      WebClient xmlClient2 = WebClient.create(BASE_URI);    
  
      WebClient.getConfig(xmlClient2).getOutInterceptors().add(new ICOutBoundInterceptor(Phase.WRITE));
      String cResponse = xmlClient2.post(payload, String.class);              

//I want to get only the payload (content) part (The value of string payload (value: "This
is what I want in ICOutBoundInterceptor") from main method) in //the handleMessage method
of my interceptor (ICOutBoundInterceptor)

I want to create hash of only the payload not the output stream. It is because I found the
output stream changes along the way until it reaches the server side. I tried that but the
hash is never equal in the client side and server side. 

I will appreciate your help. 

Thanks, 


-----Original Message-----
From: Daniel Kulp [mailto:dkulp@apache.org] 
Sent: Friday, June 03, 2011 10:56 AM
To: users@cxf.apache.org; Fabio souza
Cc: Humagain, Himal
Subject: Re: Getting payload in the client side.

On Thursday, June 02, 2011 5:05:30 PM Humagain, Himal wrote:
> Thanks a lot for your reply. I am trying the logging option but will not
> fulfill my need. I need to get hold of the payload (content) in the client
> side then I want to include it in my MD5 hashing of the content, then the
> generated signature will be added to the header section of the post. If I
> can get the payload in the form of a String in handleMessage method that
> will be ideal. Is it possible to do that? If yes, Which interceptor should
> I use and in which phase.

You could grab the source for the Logging interceptors and use that as a 
starting point.

That said, I'd suggest an alternative approach.   Stick an interceptor that 
runs prior to the StaxOutInterceptor that would do:


OutputStream out = message.getContent(OutputStream.class);
DigestOutputStream dos = new DigestOutputStream(out, 
MessageDigest.getInstance("MD5"))
message.setContent(dos, OutputStream.class);
message.put("digest.stream", dos);


That will calculate the digest while writing.    A second interceptor that 
runs later can do:


DigestOutputStream dos = message.get("digest.stream");
dos.getMessageDigest().digest();

to compute the digest and then do whatever it is you need to do with it.


Actually, instead of the second interceptor, you could override the close 
method on the stream to do it:


DigestOutputStream dos = new DigestOutputStream(out, 
MessageDigest.getInstance("MD5"))   {

public void close() {
   byte digest[] = getMessageDigest().digest();
   //do something with it
   super.close();
}
}

Dan






> 
> I will really appreciate your response.
> 
> Thanks,
> Himal
> 
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
> Sent: Thursday, June 02, 2011 4:43 PM
> To: Humagain, Himal
> Cc: Fabio souza; users@cxf.apache.org
> Subject: Re: Getting payload in the client side.
> 
> Hi, Please use a logging feature
> 
> Cheers, Sergey
> 
> On Thu, Jun 2, 2011 at 6:55 PM, Humagain, Himal
> 
> <himal.humagain@jpmchase.com> wrote:
> > Hi,
> > 
> > How can I print the CXF generated payload (content) in the client side
> > before sending it to the web service? My web service takes an object and
> > gives me an object back. But I would like to get the CXF generated
> > payload before it is posted to the webservie.
> > 
> > I have tried using interceptors and I was trying to get to the payload
> > using the Message under "handleMessage" method.
> > 
> > I will appreciate any help.
> > 
> > Thanks,
> > Himal.
> > This communication is for informational purposes only. It is not
> > intended as an offer or solicitation for the purchase or sale of
> > any financial instrument or as an official confirmation of any
> > transaction. All market prices, data and other information are not
> > warranted as to completeness or accuracy and are subject to change
> > without notice. Any comments or statements made herein do not
> > necessarily reflect those of JPMorgan Chase & Co., its subsidiaries
> > and affiliates.
> > 
> > This transmission may contain information that is privileged,
> > confidential, legally privileged, and/or exempt from disclosure
> > under applicable law. If you are not the intended recipient, you
> > are hereby notified that any disclosure, copying, distribution, or
> > use of the information contained herein (including any reliance
> > thereon) is STRICTLY PROHIBITED. Although this transmission and any
> > attachments are believed to be free of any virus or other defect
> > that might affect any computer system into which it is received and
> > opened, it is the responsibility of the recipient to ensure that it
> > is virus free and no responsibility is accepted by JPMorgan Chase &
> > Co., its subsidiaries and affiliates, as applicable, for any loss
> > or damage arising in any way from its use. If you received this
> > transmission in error, please immediately contact the sender and
> > destroy the material in its entirety, whether in electronic or hard
> > copy format. Thank you.
> > 
> > Please refer to http://www.jpmorgan.com/pages/disclosures for
> > disclosures relating to European legal entities.

-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

Mime
View raw message