If you are posting a String content then you may want to calculate the hash and set it as a header directly on WebClient. If you prefer doing it in the interceptor then you can get the original Object (such as String) like this: Object str = message.getContent(List.class).get(0);
Cheers, Sergey On Wed, Jun 8, 2011 at 10:09 PM, Humagain, Himal <[email protected]> wrote: > 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:[email protected]] > Sent: Friday, June 03, 2011 10:56 AM > To: [email protected]; 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:[email protected]] >> Sent: Thursday, June 02, 2011 4:43 PM >> To: Humagain, Himal >> Cc: Fabio souza; [email protected] >> 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 >> >> <[email protected]> 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 > [email protected] > http://dankulp.com/blog > Talend - http://www.talend.com > -- Sergey Beryozkin Application Integration Division of Talend http://sberyozkin.blogspot.com
