In this case you need to use a WebClient.create() variant which accepts a classpath location of Spring config, ex, WebClient.create(address, "classpath:/config/beans.xml"). WebClient.getConfig(client).getOutInterceptors().add(new LoggingOutInterceptor());
Sergey On Fri, Jun 3, 2011 at 4:17 PM, Humagain, Himal <[email protected]> wrote: > Thanks a lot Dan. I am very close to getting it done. I have one question. > This is what I am doing now: > > // in spring config > > <bean id="loggingOutInterceptor" > class="org.apache.cxf.interceptor.LoggingOutInterceptor"> > <constructor-arg value="write"/> > </bean> > > <cxf:bus> > <cxf:outInterceptors> > <ref bean="loggingOutInterceptor"/> > </cxf:outInterceptors> > </cxf:bus> > > I found that is it logging only out bound messages from the server. I want to > log the outbound message from the client. How would I do that? > > I am using cxf's WebClient class as follows for sending post: > > //in my main method of test class. > WebClient xmlClient2 = WebClient.create("http://..."); > String cResponse = xmlClient2.post(request, String.class); > > I see my interceptors are getting called when I run my test program. > > Thanks a lot for your help. > > Himal. > > -----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
