Hi
On 26/07/12 18:10, java kurious wrote:
Hi Sergey,

I continue to see the problem with status 406. Is there a way to
intercept this request before JAXRSInInterceptor, and change the ACCEPT
header ?

I've missed your earlier email. I think the fact MediaTypeHeaderProvider is not called indicates you see Jersey libraries loaded (given it's Glassfish).
Can you check in Debugger, use Display view, the stacktrace ?

Please also check this email on the changes to do with checking malformed types:
http://cxf.547215.n5.nabble.com/Media-type-separator-is-missing-how-to-troubleshoot-tt5711524.html

However, please verify first if Jersey is loaded and if yes then we'll find the way to bypass

Sergey

Thanks for your help.


On Thu, Jul 19, 2012 at 6:35 PM, java kurious <javakuri...@gmail.com
<mailto:javakuri...@gmail.com>> wrote:

    Ok, I have the source code downloaded, and I have the glassfish
    running from NetBeans. As you mentioned, I have left both cxf-bundle
    and cxf-rt-frontend-jaxrs as dependencies. When both libraries are
    present, /JAXRSInInterceptor.java/ from cxf-rt-frontend-jaxrs gets
    called. I also put breakpoints in MediaTypeHeaderProvider.java, but
    it does not seem to get called. Here are the steps I followed to
    start debugging.

     1.

        Started the Glassfish in Debug mode.

     2.

        Issued a request to the REST service.

     3.

        The code stops at /JAXRSInInterceptor.java's
        //*processRequest*//(Message msg) /method at following line://

        /try {/

    /acceptContentTypes = JAXRSUtils.sortMediaTypes(acceptTypes);/

    /} catch (IllegalArgumentException ex) {/

    /throw new WebApplicationException(406);/

    /}/


    The Accept header was [text/html, image/gif, image/jpeg, *; q=.2,
    */*; q=.2].


    Let me know what specifically you want me to test.

    Thanks
    Vineet.


    On Thu, Jul 19, 2012 at 2:08 PM, Sergey Beryozkin
    <sberyoz...@gmail.com <mailto:sberyoz...@gmail.com>> wrote:

        I can see the test (based on the embedded jetty) working just fine:

        ID: 1
        Address: http://localhost:9002/__bookstore/books/123
        <http://localhost:9002/bookstore/books/123>
        Http-Method: GET
        Content-Type: */*
        Headers: {Accept=[text/html, image/gif, image/jpeg, *; q=.2,
        */*; q=.2], Cache-Control=[no-cache], connection=[keep-alive],
        content-type=[*/*], Host=[localhost:9002], Pragma=[no-cache],
        User-Agent=[Apache CXF ${project.version}]}

        and the response is getting is back...
        I wonder if Tomcat/Glassfish actually transforms the Accept
        values somehow afterwards, something subtle is causing the issue.

        Can you please help a bit with debugging it ?
        For a start you can probably drop either bundle or jaxrs
        frontend dependency, actually, do it after we sort out this
        issue :-)

        Can you download CXF 2.6.1 source:

        
http://search.maven.org/__remotecontent?filepath=org/__apache/cxf/cxf-bundle/2.6.1/__cxf-bundle-2.6.1-sources.jar
        
<http://search.maven.org/remotecontent?filepath=org/apache/cxf/cxf-bundle/2.6.1/cxf-bundle-2.6.1-sources.jar>

        and set a breakpoint in
        org.apache.cxf.jaxrs.impl.__MediaTypeHeaderProvider, after the
        endpoint starts and then invoke on it ?
        I wonder what woukd actually happen...

        Thanks, Sergey




        On 19/07/12 18:38, Sergey Beryozkin wrote:

            Hi,

            Yes, I see now...
            I have a few tests which seem to confirm it's been fixed,
            but I guess
            the code dealing with this case is a bit brittle.

            I'll experiment a bit more and will get back to you

            Thanks, Sergey

            On 19/07/12 18:22, java kurious wrote:

                Hi Sergey,

                I am implementing a REST web service using Camel and
                CXF. Following is
                the signature of the method.

                @GET
                @Path("/getCustomer")
                @Produces({"text/xml","text/__html","application/xml"})
                public Customer getCustomer(
                @PathParam("name") String name) {
                }

                Now, I could test the interface with Firefotx with
                success. But when a

                different WebClient connected to the same interface, It
                got a Status 406
                error. After looking at the log files, I noticed
                following in the
                server.log of glassfish.

                Accept=[text/html, image/gif, image/jpeg,*; q=.2, */*;
                q=.2],

                The single '*' is causing the problem. It is not an
                acceptable type to
                be specified as per the CXF user forum,
                
http://cxf.547215.n5.nabble.__com/Jersey-CXF-compatibility-__td5437938.html
                
<http://cxf.547215.n5.nabble.com/Jersey-CXF-compatibility-td5437938.html>
                . To recreate this problem with Firefox browser, I
                changed the header
                that Firefox was sending to match the above header, and
                Firefox also
                failed with the same error. Once I changed* to */* in
                Firefox,
                everything started working again. Unfortunately, I can't
                do that with
                the WebClient connecting to my interface, as the code is
                not available.

                In the same forum,
                
http://cxf.547215.n5.nabble.__com/Jersey-CXF-compatibility-__td5437938.html
                
<http://cxf.547215.n5.nabble.com/Jersey-CXF-compatibility-td5437938.html>,
                you had mentioned that this '*' issue should be fixed.
                So, my question
                was if this was indeed fixed.


                _Following is the trace I have from Glassfish Server log. _

                INFO: DEBUG [http-thread-pool-8080(1)]
                (ServletController.java:209) -
                Service http request on thread:
                Thread[http-thread-pool-8080(__1),5,grizzly-kernel]

                INFO: DEBUG [http-thread-pool-8080(1)]
                (AbstractHTTPDestination.java:__192) - Create a new
                message for processing

                INFO: DEBUG [http-thread-pool-8080(1)]
                (Headers.java:347) - Request
                Headers: {Accept=[text/html, image/gif, image/jpeg, *;
                q=.2, */*; q=.2],
                accept-charset=[ISO-8859-1,__utf-8;q=0.7,*;q=0.7],
                accept-encoding=[gzip,deflate]__,
                accept-language=[en,en-gb;q=0.__7,en-us;q=0.3],
                cache-control=[max-age=0],
                connection=[keep-alive], Content-Type=[null],
                host=[localhost:8080],
                keep-alive=[115], user-agent=[Mozilla/5.0 (X11; U; Linux
                i686; en-US;
                rv:1.9.2.16) Gecko/20110323 Ubuntu/10.04 (lucid)
                Firefox/3.6.16]}

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__205)
                - Adding interceptor
                
org.apache.cxf.transport.__https.__CertConstraintsInterceptor@__f6c321
                to
                phase pre-stream

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__674)
                - Chain
                org.apache.cxf.phase.__PhaseInterceptorChain@10a516f was
                created.
                Current flow:
                receive [PolicyInInterceptor]
                pre-stream [CertConstraintsInterceptor]
                unmarshal [JAXRSInInterceptor]
                pre-logical [OneWayProcessorInterceptor]
                invoke [ServiceInvokerInterceptor]
                post-invoke [OutgoingChainInterceptor]

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                org.apache.cxf.ws.policy.__PolicyInInterceptor@1b7aa8e

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                
org.apache.cxf.transport.__https.__CertConstraintsInterceptor@__f6c321

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                org.apache.cxf.jaxrs.__interceptor.__JAXRSInInterceptor@2bc9ae

                INFO: DEBUG [http-thread-pool-8080(1)]
                (__WebApplicationExceptionMapper.__java:62) -
                WebApplicationException has
                been caught, status: 406
                javax.ws.rs <http://javax.ws.rs>.__WebApplicationException
                at
                
org.apache.cxf.jaxrs.__interceptor.__JAXRSInInterceptor.__processRequest(__JAXRSInInterceptor.java:139)

                at
                
org.apache.cxf.jaxrs.__interceptor.__JAXRSInInterceptor.__handleMessage(__JAXRSInInterceptor.java:89)

                at
                
org.apache.cxf.phase.__PhaseInterceptorChain.__doIntercept(__PhaseInterceptorChain.java:__262)

                at
                
org.apache.cxf.transport.__ChainInitiationObserver.__onMessage(__ChainInitiationObserver.java:__123)

                at
                
org.apache.cxf.transport.http.__AbstractHTTPDestination.__invoke(__AbstractHTTPDestination.java:__211)

                at
                
org.apache.cxf.transport.__servlet.ServletController.__invokeDestination(__ServletController.java:213)

                at
                
org.apache.cxf.transport.__servlet.ServletController.__invoke(ServletController.java:__154)

                at
                
org.apache.cxf.transport.__servlet.CXFNonSpringServlet.__invoke(CXFNonSpringServlet.__java:129)

                at
                
org.apache.cxf.transport.__servlet.AbstractHTTPServlet.__handleRequest(__AbstractHTTPServlet.java:187)

                at
                
org.apache.cxf.transport.__servlet.AbstractHTTPServlet.__doGet(AbstractHTTPServlet.__java:115)

                at
                javax.servlet.http.__HttpServlet.service(__HttpServlet.java:668)
                at
                
org.apache.cxf.transport.__servlet.AbstractHTTPServlet.__service(AbstractHTTPServlet.__java:166)

                at
                
org.apache.catalina.core.__StandardWrapper.service(__StandardWrapper.java:1542)

                at
                
org.apache.catalina.core.__StandardWrapperValve.invoke(__StandardWrapperValve.java:281)

                at
                
org.apache.catalina.core.__StandardContextValve.invoke(__StandardContextValve.java:175)

                at
                
org.apache.catalina.core.__StandardPipeline.doInvoke(__StandardPipeline.java:655)

                at
                
org.apache.catalina.core.__StandardPipeline.invoke(__StandardPipeline.java:595)

                at
                
org.apache.catalina.core.__StandardHostValve.invoke(__StandardHostValve.java:161)

                at
                
org.apache.catalina.connector.__CoyoteAdapter.doService(__CoyoteAdapter.java:331)

                at
                
org.apache.catalina.connector.__CoyoteAdapter.service(__CoyoteAdapter.java:231)

                at
                
com.sun.enterprise.v3.__services.impl.ContainerMapper$__AdapterCallable.call(__ContainerMapper.java:317)

                at
                
com.sun.enterprise.v3.__services.impl.ContainerMapper.__service(ContainerMapper.java:__195)

                at
                
com.sun.grizzly.http.__ProcessorTask.invokeAdapter(__ProcessorTask.java:849)
                at
                
com.sun.grizzly.http.__ProcessorTask.doProcess(__ProcessorTask.java:746)
                at
                
com.sun.grizzly.http.__ProcessorTask.process(__ProcessorTask.java:1045)
                at
                
com.sun.grizzly.http.__DefaultProtocolFilter.execute(__DefaultProtocolFilter.java:__228)

                at
                
com.sun.grizzly.__DefaultProtocolChain.__executeProtocolFilter(__DefaultProtocolChain.java:137)

                at
                
com.sun.grizzly.__DefaultProtocolChain.execute(__DefaultProtocolChain.java:104)

                at
                
com.sun.grizzly.__DefaultProtocolChain.execute(__DefaultProtocolChain.java:90)

                at
                
com.sun.grizzly.http.__HttpProtocolChain.execute(__HttpProtocolChain.java:79)
                at
                
com.sun.grizzly.__ProtocolChainContextTask.__doCall(__ProtocolChainContextTask.java:__54)

                at
                
com.sun.grizzly.__SelectionKeyContextTask.call(__SelectionKeyContextTask.java:__59)

                at com.sun.grizzly.ContextTask.__run(ContextTask.java:71)
                at
                
com.sun.grizzly.util.__AbstractThreadPool$Worker.__doWork(AbstractThreadPool.__java:532)

                at
                
com.sun.grizzly.util.__AbstractThreadPool$Worker.run(__AbstractThreadPool.java:513)

                at java.lang.Thread.run(Thread.__java:722)

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                
org.apache.cxf.interceptor.__OneWayProcessorInterceptor@__1823fd1

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                org.apache.cxf.interceptor.__ServiceInvokerInterceptor@__11e787e

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                org.apache.cxf.interceptor.__OutgoingChainInterceptor@__178c3da

                INFO: DEBUG [http-thread-pool-8080(1)]
                (OutgoingChainInterceptor.__java:176) - Interceptors
                contributed by bus:
                [org.apache.cxf.ws.policy.__PolicyOutInterceptor@1351523]

                INFO: DEBUG [http-thread-pool-8080(1)]
                (OutgoingChainInterceptor.__java:180) - Interceptors
                contributed by
                service: []

                INFO: DEBUG [http-thread-pool-8080(1)]
                (OutgoingChainInterceptor.__java:184) - Interceptors
                contributed by
                endpoint:
                
[org.apache.cxf.interceptor.__MessageSenderInterceptor@__1fec925]

                INFO: DEBUG [http-thread-pool-8080(1)]
                (OutgoingChainInterceptor.__java:190) - Interceptors
                contributed by
                binding:
                
[org.apache.cxf.jaxrs.__interceptor.__JAXRSOutInterceptor@47dcc2]

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__674)
                - Chain
                org.apache.cxf.phase.__PhaseInterceptorChain@90d38 was
                created.
                Current flow:
                setup [PolicyOutInterceptor]
                prepare-send [MessageSenderInterceptor]
                marshal [JAXRSOutInterceptor]

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                org.apache.cxf.ws.policy.__PolicyOutInterceptor@1351523

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PolicyOutInterceptor.java:63) -
                No binding operation info.

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                org.apache.cxf.interceptor.__MessageSenderInterceptor@__1fec925

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__205)
                - Adding interceptor
                
org.apache.cxf.interceptor.__MessageSenderInterceptor$__MessageSenderEndingInterceptor__@9e362f

                to phase prepare-send-ending

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__672)
                - Chain
                org.apache.cxf.phase.__PhaseInterceptorChain@90d38 was
                modified.
                Current flow:
                setup [PolicyOutInterceptor]
                prepare-send [MessageSenderInterceptor]
                marshal [JAXRSOutInterceptor]
                prepare-send-ending [__MessageSenderEndingInterceptor__]

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                org.apache.cxf.jaxrs.__interceptor.__JAXRSOutInterceptor@47dcc2

                INFO: DEBUG [http-thread-pool-8080(1)]
                (PhaseInterceptorChain.java:__259)
                - Invoking handleMessage on interceptor
                
org.apache.cxf.interceptor.__MessageSenderInterceptor$__MessageSenderEndingInterceptor__@9e362f


                INFO: DEBUG [http-thread-pool-8080(1)]
                (ServletController.java:218) -
                Finished servicing http request on thread:
                Thread[http-thread-pool-8080(__1),5,grizzly-kernel]


                Thanks again for your help.





                On Thu, Jul 19, 2012 at 12:54 PM, Sergey Beryozkin
                <sberyoz...@gmail.com <mailto:sberyoz...@gmail.com>
                <mailto:sberyoz...@gmail.com
                <mailto:sberyoz...@gmail.com>>> wrote:

                Hi,

                On 19/07/12 17:37, java kurious wrote:

                I am getting following 406 error when sending a request to a
                REST service.

                
[#|2012-07-19T11:00:50.226-____0400|INFO|glassfish3.1.1|____javax.enterprise.system.std.____com.sun.enterprise.server.____logging|_ThreadID=128;_____ThreadName=Thread-2;|DEBUG

                [http-thread-pool-28181(4)]
                (____WebApplicationExceptionMapper.____java:62) -
                *WebApplicationException
                has been caught, status: 406*

                javax.ws.rs <http://javax.ws.rs>
                <http://javax.ws.rs>.____WebApplicationException
                at
                
org.apache.cxf.jaxrs.____interceptor.____JAXRSInInterceptor.____processRequest(____JAXRSInInterceptor.java:139)

                at
                
org.apache.cxf.jaxrs.____interceptor.____JAXRSInInterceptor.____handleMessage(____JAXRSInInterceptor.java:89)




                INFO: DEBUG [http-thread-pool-8080(5)]
                (Headers.java:347) - Request
                Headers: {*Accept=[text/html, image/gif, image/jpeg, *;
                q=.2,
                */*; q=.2*],

                accept-charset=[ISO-8859-1,____utf-8;q=0.7,*;q=0.7],
                accept-encoding=[gzip,deflate]____,
                accept-language=[en,en-gb;q=0.____7,en-us;q=0.3],
                cache-control=[max-age=0],
                connection=[keep-alive], Content-Type=[null],
                host=[localhost:8080],
                keep-alive=[115], user-agent=[Mozilla/5.0 (X11; U; Linux
                i686;
                en-US;
                rv:1.9.2.16) Gecko/20110323 Ubuntu/10.04 (lucid)
                Firefox/3.6.16]}


                Can you provide a bit more info please ?
                There has to be some more debug statements showing which
                resource
                methods have been checked.

                How does the resource method signature look like ? I can
                see a
                wilcard (*/*) available in Accept, but what may happen
                for example
                is that some bean is returned but say it can not be
                handled by JAXB, etc

                Cheers, Sergey




                I saw the discussion on following link:

                
http://cxf.547215.n5.nabble.____com/Jersey-CXF-compatibility-____td5437938.html

                
<http://cxf.547215.n5.nabble.__com/Jersey-CXF-compatibility-__td5437938.html
                
<http://cxf.547215.n5.nabble.com/Jersey-CXF-compatibility-td5437938.html>>

                I am wondering if the fix has been made and if so, which jar
                file do I need
                to upgrade. Following are the direct dependencies I have
                declared related
                to cxf:

                <dependency>
                <groupId>org.apache.camel</____groupId>
                <artifactId>camel-cxf</____artifactId>
                <version>2.9.1</version>
                </dependency>
                <dependency>
                <groupId>org.apache.camel</____groupId>
                <artifactId>camel-cxf-____transport</artifactId>
                <version>2.9.1</version>
                </dependency>
                <dependency>
                <groupId>org.apache.cxf</____groupId>
                <artifactId>cxf-rt-frontend-____jaxrs</artifactId>
                <version>2.6.1</version>
                </dependency>
                <dependency>
                <groupId>org.apache.cxf</____groupId>
                <artifactId>cxf-bundle</____artifactId>
                <version>2.6.1</version>
                </dependency>


                Thanks for any help.








--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to