Ok, thanks for this info. You've found the workaround which is good, another option is to register a custom CXF out interceptor which would reset Content-Type to the required value, it can be registered with JAXRSClientFactoryBean:
JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); bean.setAddress(address); bean.getOutInterceptors().add(new CustomOutInterceptor()); bean.createWebClient(); I'll try fix it as well Sergey On Sun, Jul 31, 2011 at 10:17 PM, Jeff Wang <[email protected]> wrote: > We're trying to use Amazon's query string authentication. We can set > Content-Type to "", or heck, to any other string. It's just that the server > uses the content type as part of its signature calculation. So when we > generate the signature, we expected to set it with some content type (tried > it with either "" or an actual type, it doesn't matter.) If it gets > overridden, like what happens with webClient.get(), then the signatures will > be wrong and auth will get rejected. The actual header has no meaning in a > GET, but we do need to control what it is so that the signatures match. > > Jeff > > > -----Original Message----- > From: Sergey Beryozkin [mailto:[email protected]] > Sent: Sun 7/31/2011 11:00 AM > To: [email protected] > Subject: Re: WebClient - Content-Type Override? > > Hi, > > Does the server expect Content-Type being set even in case of GET requests ? > > Cheers, Sergey > On 28/07/11 22:45, Jeff Wang wrote: >> Looking through the code, it seems that if the body is null (which has >> to be the case considering it's a get, then the content type is >> overwritten with wildcards. >> Using client.invoke("GET",""); solved the problem for me. >> >> Jeff >> >> -----Original Message----- >> From: Jeff Wang [mailto:[email protected]] >> Sent: Wednesday, July 27, 2011 5:29 PM >> To: [email protected] >> Subject: WebClient - Content-Type Override? >> >> I'm trying to act as a proxy to a third party webservice, and need to >> transform a REST request. One issue that I have is that the >> Content-Type header seems to get overridden no matter what I do. The >> code is actually very simple (context is an @Context MessageContext >> variable): >> >> WebClient client = WebClient.create(url) >> .header("real-header-removed", >> "auth-string-removed") >> // .header("Content-Type", >> context.getHttpHeaders().getMediaType().toString()); >> .type(context.getHttpHeaders().getMediaType()); >> >> Response resp = client.get(); >> return (InputStream)resp.getEntity(); >> >> Neither the .header nor the .type worked. The tcpmon output of the >> request is: >> Content-Type: */* >> real-header-removed: auth-string-removed >> Accept: application/xml >> User-Agent: Apache CXF 2.3.5 >> Cache-Control: no-cache >> Pragma: no-cache >> >> How do I avoid the content Type override (or rather, why is it >> happening?) >> Btw, while looking for answers, I found my CXF server side answers >> relatively easily either via google or the archive. But client >> questions seems to be rather rare, and mostly on the SOAP calls. Are >> most people using other packages? >> >> thanks >> Jeff > > > -- Sergey Beryozkin http://sberyozkin.blogspot.com Talend - http://www.talend.com
