Hi
On 24/07/12 17:23, bcarlson wrote:
Hello,

I've been using CXF WebClient for a few months now on a project, and I've
not had any issues. Today is different. I'm working on doing a
WebClient.post() to a server that I don't have access to, and I'm getting
the error below. The only info I've seen on this was a JIRA ticket saying
that the response status code should change from a 500 to a 406. I dug on
Google as well, but didn't find a definitive solution.

My code that calls this is as follows:


WebClient client =
WebClient.create(URLTools.generateURL(getEndpointGetAccessToken(),grantType,authCode,clientId,clientSecret,redirectURL));
                Response res = null;
                
                try {
                        if(client != null) {
                        
//client.replaceHeader("Content-Type","application/x-www-form-urlencoded");
                                
//client.type("application/x-www-form-urlencoded");
                                
client.type(MediaType.APPLICATION_FORM_URLENCODED);
                                res = 
(Response)client.post(null,Response.class);
                                
                                logDebug("response: " + new
java.util.Scanner((InputStream)res.getEntity()).useDelimiter("\\A").next());






**** Error      Tue Jul 24 10:24:05 CDT 2012    1343143445236
/company/oauth/OAuthService    java.lang.IllegalArgumentException: Media
type separator is missing
org.apache.cxf.jaxrs.client.ClientWebApplicationException:
java.lang.IllegalArgumentException: Media type separator is missing

Hmm, it it 2nd time this issue has been reported recently.
I've done a test to reproduce the issue reported few days ago and I could only see the code working as expected, but something is obviously wrong there....

On the server side, sometimes we can get

Accept: text/html, *;q=0.6

etc and the code specifically manages values like '*'.

Can you please capture the actual Accept or Content-Type value that may be causing it ? I think I'll just do a simpler check for values like '*;q=0.6' and also introduce a contextual property to optionally ignore values like 'a'.

Thanks, Sergey



         at
org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:796)
         at
org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:766)
         at
org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:696)
         at org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:324)
         at org.apache.cxf.jaxrs.client.WebClient.post(WebClient.java:336)
         at
com.company.oauth.OAuthService.getAccessToken(OAuthService.java:36)
         at
com.company.oauth.OMASLoginRedirectServlet.service(OMASLoginRedirectServlet.java:62)
         at atg.servlet.DynamoServlet.service(DynamoServlet.java:166)
         at
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
         at
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
         at
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
         at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
         at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
         at
atg.servlet.pipeline.TailPipelineServlet.service(TailPipelineServlet.java:161)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.servlet.pipeline.DispatcherPipelineServletImpl.service(DispatcherPipelineServletImpl.java:253)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.servlet.http.CookieBufferServlet.service(CookieBufferServlet.java:97)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.userprofiling.ExpiredPasswordServlet.service(ExpiredPasswordServlet.java:356)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.servlet.pipeline.MimeTyperPipelineServlet.service(MimeTyperPipelineServlet.java:206)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.droplet.DropletEventServlet.service(DropletEventServlet.java:565)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
com.company.oauth.OMASLoginAccessServlet.service(OMASLoginAccessServlet.java:52)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.commerce.order.CommerceCommandServlet.service(CommerceCommandServlet.java:128)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.commerce.promotion.PromotionServlet.service(PromotionServlet.java:191)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.userprofiling.AccessControlServlet.service(AccessControlServlet.java:655)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.servlet.sessionsaver.SessionSaverServlet.service(SessionSaverServlet.java:2425)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.userprofiling.PageEventTriggerPipelineServlet.service(PageEventTriggerPipelineServlet.java:169)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.multisite.SiteSessionEventTriggerPipelineServlet.service(SiteSessionEventTriggerPipelineServlet.java:139)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.userprofiling.SessionEventTrigger.service(SessionEventTrigger.java:477)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.userprofiling.ProfilePropertyServlet.service(ProfilePropertyServlet.java:208)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.userprofiling.ProfileRequestServlet.service(ProfileRequestServlet.java:437)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.servlet.pipeline.DynamoPipelineServlet.service(DynamoPipelineServlet.java:469)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.servlet.pipeline.URLArgumentPipelineServlet.service(URLArgumentPipelineServlet.java:280)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.servlet.pipeline.PathAuthenticationPipelineServlet.service(PathAuthenticationPipelineServlet.java:370)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.userprofiling.sso.PassportServlet.service(PassportServlet.java:554)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.servlet.security.ThreadUserBinderServlet.service(ThreadUserBinderServlet.java:91)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.dtm.TransactionPipelineServlet.service(TransactionPipelineServlet.java:212)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.multisite.SiteContextPipelineServlet.service(SiteContextPipelineServlet.java:348)
         at
atg.servlet.pipeline.PipelineableServletImpl.passRequest(PipelineableServletImpl.java:135)
         at
atg.servlet.pipeline.HeadPipelineServlet.passRequest(HeadPipelineServlet.java:1174)
         at
atg.servlet.pipeline.HeadPipelineServlet.service(HeadPipelineServlet.java:857)
         at
atg.servlet.pipeline.PipelineableServletImpl.service(PipelineableServletImpl.java:250)
         at atg.filter.dspjsp.PageFilter.doFilter(PageFilter.java:263)
         at
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
         at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)
         at
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
         at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
         at
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
         at
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
         at
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
         at
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
Caused by: java.lang.IllegalArgumentException: Media type separator is
missing
         at
org.apache.cxf.jaxrs.impl.MediaTypeHeaderProvider.fromString(MediaTypeHeaderProvider.java:53)
         at
org.apache.cxf.jaxrs.impl.MediaTypeHeaderProvider.fromString(MediaTypeHeaderProvider.java:33)
         at javax.ws.rs.core.MediaType.valueOf(MediaType.java:119)
         at
org.apache.cxf.jaxrs.client.AbstractClient.getResponseContentType(AbstractClient.java:620)
         at
org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:439)
         at
org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:782)
         ... 72 more


Any suggestions on tracking this down are appreciated!

Thanks in advance,

-Ben




--
View this message in context: 
http://cxf.547215.n5.nabble.com/Media-type-separator-is-missing-how-to-troubleshoot-tp5711524.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to