Return-Path: X-Original-To: apmail-cxf-users-archive@www.apache.org Delivered-To: apmail-cxf-users-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id C0DD59B4C for ; Wed, 8 Feb 2012 11:45:54 +0000 (UTC) Received: (qmail 53260 invoked by uid 500); 8 Feb 2012 11:45:54 -0000 Delivered-To: apmail-cxf-users-archive@cxf.apache.org Received: (qmail 52993 invoked by uid 500); 8 Feb 2012 11:45:52 -0000 Mailing-List: contact users-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@cxf.apache.org Delivered-To: mailing list users@cxf.apache.org Received: (qmail 52974 invoked by uid 99); 8 Feb 2012 11:45:52 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 08 Feb 2012 11:45:52 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of sberyozkin@gmail.com designates 209.85.214.41 as permitted sender) Received: from [209.85.214.41] (HELO mail-bk0-f41.google.com) (209.85.214.41) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 08 Feb 2012 11:45:48 +0000 Received: by bkty12 with SMTP id y12so455773bkt.0 for ; Wed, 08 Feb 2012 03:45:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=hk9fen17gSSYq2bFdHjkMExDHDyMYndlkUc8m7V6EH0=; b=aq+nTjbJmS4zasRJ306Jk5EqJ7+HYrFeljpaU8imlMNVDY2xyISOjQF/r6aZnmJwe3 Y+FwIBuEkR7qDuxnvcKAsQn4vKutO/lsic83AwtuZFCEHG0wuuL0EBtlS2LK2gI1DyVj ZipE31bsu57DEg98ItPmKfqSkjb/73cyR55t4= MIME-Version: 1.0 Received: by 10.204.152.88 with SMTP id f24mr11823249bkw.31.1328701526322; Wed, 08 Feb 2012 03:45:26 -0800 (PST) Received: by 10.204.53.206 with HTTP; Wed, 8 Feb 2012 03:45:26 -0800 (PST) In-Reply-To: References: <4F31A7F0.5000805@gmail.com> Date: Wed, 8 Feb 2012 11:45:26 +0000 Message-ID: Subject: Re: JAXRS: RegEx Jersey vs. CXF (2.5.2) From: Sergey Beryozkin To: users@cxf.apache.org Content-Type: text/plain; charset=ISO-8859-1 Hi On 08/02/12 08:59, Klevenz, Stephan wrote: > Hi, > > I could encircle the problem. If having this additional resource class > present then the expected getNavProperty handler is not called. > > @Path("{entitySetName}{optionalParens: (\\(\\))?}") > public class EntitiesRequestResource { > > @GET > @Produces({ ODataConstants.APPLICATION_ATOM_XML_CHARSET_UTF8, > ODataConstants.TEXT_JAVASCRIPT_CHARSET_UTF8, > ODataConstants.APPLICATION_JAVASCRIPT_CHARSET_UTF8 }) > public Response getEntities() { > ... > } > } > > Expected handler mapping: > > http://localhost:8810/test/test.svc/categories(1)/products -> > getNavProperty > http://localhost:8810/test/test.svc/categories() -> > getEntities > http://localhost:8810/test/test.svc/categories -> > getEntities > > Here it seems that the CXF differs from Jersey in its implemented mapping > strategy. Is there any option to get the behavior changed? As far as the mapping strategy is concerned, CXF does select the best matching root resource, but what happens in this specific case is that both root resources are happen to be equal candidates. The above @Path value gets translated to the following in CXF: /([^/]+?)(((\(\))?))(/.*)? where the '(/.*)?' bit is appended to the translated @Path expression. As a result, http://localhost:8810/test/test.svc/categories(1)/products is actually matched by the above expression. The other class is also matched, and their path values both have the same number of literal characters (none), default (1) & non-default (1) capturing groups. I'm wondering, how does Jersey decide that EntitiesRequestResource is not a candidate. is there a possibility there that it basically always starts from EntityRequestResource ? Its path will match 'categories(1)/products' but neither 'categories()' nor 'categories'... Note that CXF has a ResourceComparator extension that can be customize the selection between multiple candidates. But that is an extension... Personally, I'd consider keeping EntityRequestResource's Path as is but would simplify EntitiesRequestResource with having only Path("{entitySetName}") and 2 GET methods, one without @Path and another with @Path"()" - less compact but stays away from explicit regular expressions :-). However, I'm really curious now why Jersey works in this case. Can you please check on it on your side ? Thanks, Sergey > > Regards, > Stephan > > > > > > > -----Original Message----- > From: Sergey Beryozkin > Reply-To: "users@cxf.apache.org" > Date: Tue, 7 Feb 2012 23:38:40 +0100 > To: "users@cxf.apache.org" > Subject: Re: JAXRS: RegEx Jersey vs. CXF (2.5.2) > >> Hi >> On 07/02/12 16:45, Klevenz, Stephan wrote: >>> Hi, >>> >>> I have another issue within compatibility between Jersey and CXF and >>> maybe >>> you can give me a hint. The issue is with the following URL pattern >>> where >>> CXF doesn't dispatch to the expected handler: >>> >>> http://localhost:8810/test/test.svc/categories(1)/products >>> >>> The relevant code snippet is a resource class and a sub resource class: >>> >>> @Path("{entitySetName}{id: \\(.+?\\)}") >>> public class EntityRequestResource { >>> >>> @Path("{navProp: .+}") >>> public PropertyRequestResource getNavProperty() { >>> return new PropertyRequestResource(); >>> } >>> } >>> >>> >>> public class PropertyRequestResource { >>> @GET >>> @Produces({ >>> ODataConstants.APPLICATION_ATOM_XML_CHARSET_UTF8, >>> ODataConstants.TEXT_JAVASCRIPT_CHARSET_UTF8, >>> ODataConstants.APPLICATION_JAVASCRIPT_CHARSET_UTF8 }) >>> public Response getNavProperty() {...} >>> } >>> >> >> This works in my local test, will try your example a bit later >> >> Sergey >> >>> The complete WADL file is checked into a source repository and is >>> accessible at [1]. [2] is the corresponding Jersey generated WADL file >>> of >>> the same code. With Jersey it doesn't fail. [3] is an example maven >>> project with has a failing JUnit test isolating the problem. [4] is the >>> fine trace of CXF that doesn't find a matching method. >>> >>> Any hint how to get this fixed is welcome. Thanks in advance. >>> >>> Regards, >>> Stephan >>> >>> >>> [1] >>> >>> https://bitbucket.org/sklevenz/example/src/ecc3183d5976/org.example.core/ >>> sr >>> c/test/resources/wadl.cxf.xml >>> [2] >>> >>> https://bitbucket.org/sklevenz/example/src/ecc3183d5976/org.example.core/ >>> sr >>> c/test/resources/wadl.jersey.xml >>> [3] https://bitbucket.org/sklevenz/example >>> [4] CXF Trace: >>> 2012-02-07 17:38:09,744 INFO [main] >>> org.example.test.compatibility.OData4JCompatibilityTest: >>> ****************************************************************** >>> 2012-02-07 17:38:09,745 INFO [main] >>> org.example.test.compatibility.OData4JCompatibilityTest: Activated >>> Server >>> Type = CXF >>> 2012-02-07 17:38:09,745 INFO [main] >>> org.example.test.compatibility.OData4JCompatibilityTest: >>> ****************************************************************** >>> 2012-02-07 17:38:09,746 INFO [main] >>> org.example.test.compatibility.OData4JCompatibilityTest: >>> --------------------------------------------------------------- >>> 2012-02-07 17:38:09,746 INFO [main] >>> org.example.test.compatibility.OData4JCompatibilityTest: test class: >>> org.example.test.compatibility.OData4JCompatibilityTest >>> 2012-02-07 17:38:09,746 INFO [main] >>> org.example.test.compatibility.OData4JCompatibilityTest: test method: >>> testNavigationProperty >>> 2012-02-07 17:38:09,746 INFO [main] >>> org.example.test.compatibility.OData4JCompatibilityTest: >>> --------------------------------------------------------------- >>> 2012-02-07 17:38:09,909 DEBUG [main] >>> org.apache.cxf.common.logging.LogUtils: Using >>> org.apache.cxf.common.logging.Slf4jLogger for logging. >>> 2012-02-07 17:38:09,927 DEBUG [main] org.eclipse.jetty.util.log: Logging >>> to org.slf4j.impl.Log4jLoggerAdapter(org.eclipse.jetty.util.log) via >>> org.eclipse.jetty.util.log.Slf4jLog >>> 2012-02-07 17:38:09,959 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: filterNameMap={} >>> 2012-02-07 17:38:09,959 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: pathFilters=null >>> 2012-02-07 17:38:09,959 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: servletFilterMap=null >>> 2012-02-07 17:38:09,959 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: >>> >>> servletPathMap={/test/test.svc/*=org.apache.cxf.jaxrs.servlet.CXFNonSprin >>> gJ >>> axrsServlet-255194190} >>> 2012-02-07 17:38:09,959 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: >>> >>> servletNameMap={org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet-255 >>> 19 >>> 4190=org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet-255194190} >>> 2012-02-07 17:38:09,974 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> org.eclipse.jetty.server.Server@6364cbde + >>> SelectChannelConnector@0.0.0.0:8810 STOPPED as connector >>> 2012-02-07 17:38:09,979 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> org.eclipse.jetty.server.handler.HandlerCollection@767a9224#STOPPED + >>> o.e.j.s.ServletContextHandler{/,null} as handler >>> 2012-02-07 17:38:09,979 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> org.eclipse.jetty.server.Server@6364cbde + >>> org.eclipse.jetty.server.handler.HandlerCollection@767a9224#STOPPED as >>> handler >>> 2012-02-07 17:38:09,979 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> org.eclipse.jetty.server.Server@6364cbde >>> 2012-02-07 17:38:09,979 INFO [main] org.eclipse.jetty.server.Server: >>> jetty-7.5.4.v20111024 >>> 2012-02-07 17:38:09,996 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> org.eclipse.jetty.server.Server@6364cbde + >>> qtp881373670{8<=0<=0/254,-1}#STOPPED as threadpool >>> 2012-02-07 17:38:09,996 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> org.eclipse.jetty.server.handler.HandlerCollection@767a9224#STOPPED >>> 2012-02-07 17:38:09,996 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> o.e.j.s.ServletContextHandler{/,null} >>> 2012-02-07 17:38:10,017 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> org.eclipse.jetty.servlet.ServletHandler@5c5ddd3#STOPPED + >>> org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet-255194190 as >>> servlet >>> 2012-02-07 17:38:10,018 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> org.eclipse.jetty.servlet.ServletHandler@5c5ddd3#STOPPED + >>> >>> [/test/test.svc/*]=>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet >>> -2 >>> 55194190 as servletMapping >>> 2012-02-07 17:38:10,018 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> org.eclipse.jetty.server.session.SessionHandler@1664a9b#STOPPED + >>> org.eclipse.jetty.servlet.ServletHandler@5c5ddd3#STOPPED as handler >>> 2012-02-07 17:38:10,018 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> org.eclipse.jetty.server.session.SessionHandler@1664a9b#STOPPED + >>> org.eclipse.jetty.server.session.HashSessionManager@62ac06d4#STOPPED as >>> sessionManager >>> 2012-02-07 17:38:10,018 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> o.e.j.s.ServletContextHandler{/,null} + >>> org.eclipse.jetty.server.session.SessionHandler@1664a9b#STOPPED as >>> handler >>> 2012-02-07 17:38:10,018 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> org.eclipse.jetty.server.session.SessionHandler@1664a9b#STOPPED >>> 2012-02-07 17:38:10,018 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> org.eclipse.jetty.server.session.HashSessionManager@62ac06d4#STOPPED >>> 2012-02-07 17:38:10,019 DEBUG [main] >>> org.eclipse.jetty.util.component.Container: Container >>> org.eclipse.jetty.server.Server@6364cbde + >>> org.eclipse.jetty.server.session.HashSessionIdManager@2c8c7d6#STOPPED as >>> sessionIdManager >>> 2012-02-07 17:38:10,020 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> org.eclipse.jetty.server.session.HashSessionIdManager@2c8c7d6#STOPPED >>> 2012-02-07 17:38:10,020 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> org.eclipse.jetty.server.session.HashSessionIdManager@2c8c7d6#STARTED >>> 2012-02-07 17:38:10,021 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> org.eclipse.jetty.server.session.HashSessionManager@62ac06d4#STARTED >>> 2012-02-07 17:38:10,021 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> org.eclipse.jetty.servlet.ServletHandler@5c5ddd3#STOPPED >>> 2012-02-07 17:38:10,021 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: filterNameMap={} >>> 2012-02-07 17:38:10,021 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: pathFilters=null >>> 2012-02-07 17:38:10,021 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: servletFilterMap=null >>> 2012-02-07 17:38:10,021 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: >>> >>> servletPathMap={/test/test.svc/*=org.apache.cxf.jaxrs.servlet.CXFNonSprin >>> gJ >>> axrsServlet-255194190} >>> 2012-02-07 17:38:10,022 DEBUG [main] >>> org.eclipse.jetty.servlet.ServletHandler: >>> >>> servletNameMap={org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet-255 >>> 19 >>> 4190=org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet-255194190} >>> 2012-02-07 17:38:10,022 DEBUG [main] >>> org.eclipse.jetty.server.handler.AbstractHandler: starting >>> org.eclipse.jetty.servlet.ServletHandler@5c5ddd3#STARTING >>> 2012-02-07 17:38:10,022 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> org.eclipse.jetty.servlet.ServletHandler@5c5ddd3#STARTED >>> 2012-02-07 17:38:10,022 DEBUG [main] >>> org.eclipse.jetty.server.handler.AbstractHandler: starting >>> org.eclipse.jetty.server.session.SessionHandler@1664a9b#STARTING >>> 2012-02-07 17:38:10,022 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> org.eclipse.jetty.server.session.SessionHandler@1664a9b#STARTED >>> 2012-02-07 17:38:10,022 DEBUG [main] >>> org.eclipse.jetty.server.handler.AbstractHandler: starting >>> o.e.j.s.ServletContextHandler{/,null} >>> 2012-02-07 17:38:10,022 INFO [main] >>> org.eclipse.jetty.server.handler.ContextHandler: started >>> o.e.j.s.ServletContextHandler{/,null} >>> 2012-02-07 17:38:10,022 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet-255194190 >>> 2012-02-07 17:38:10,345 INFO [main] org.apache.cxf.endpoint.ServerImpl: >>> Setting the server's publish address to be / >>> 2012-02-07 17:38:10,399 DEBUG [main] org.apache.cxf.endpoint.ServerImpl: >>> Server is starting. >>> 2012-02-07 17:38:10,400 DEBUG [main] >>> org.apache.cxf.transport.servlet.ServletDestination: registering >>> incoming >>> observer: org.apache.cxf.transport.ChainInitiationObserver@2224ea85 >>> 2012-02-07 17:38:10,400 DEBUG [main] org.apache.cxf.endpoint.ServerImpl: >>> register the server to serverRegistry >>> 2012-02-07 17:38:10,400 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet-255194190 >>> 2012-02-07 17:38:10,400 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> o.e.j.s.ServletContextHandler{/,null} >>> 2012-02-07 17:38:10,400 DEBUG [main] >>> org.eclipse.jetty.server.handler.AbstractHandler: starting >>> org.eclipse.jetty.server.handler.HandlerCollection@767a9224#STARTING >>> 2012-02-07 17:38:10,400 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> org.eclipse.jetty.server.handler.HandlerCollection@767a9224#STARTED >>> 2012-02-07 17:38:10,400 DEBUG [main] >>> org.eclipse.jetty.server.handler.AbstractHandler: starting >>> org.eclipse.jetty.server.Server@6364cbde >>> 2012-02-07 17:38:10,400 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> qtp881373670{8<=0<=0/254,-1}#STOPPED >>> 2012-02-07 17:38:10,404 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> qtp881373670{8<=7<=8/254,0}#STARTED >>> 2012-02-07 17:38:10,405 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> SelectChannelConnector@0.0.0.0:8810 STOPPED >>> 2012-02-07 17:38:10,419 INFO [main] >>> org.eclipse.jetty.server.AbstractConnector: Started >>> SelectChannelConnector@0.0.0.0:8810 STARTING >>> 2012-02-07 17:38:10,419 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: starting >>> >>> org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorMana >>> ge >>> r@1633c3e6#STOPPED >>> 2012-02-07 17:38:10,429 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> >>> org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorMana >>> ge >>> r@1633c3e6#STARTED >>> 2012-02-07 17:38:10,429 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> SelectChannelConnector@0.0.0.0:8810 STARTED >>> 2012-02-07 17:38:10,429 DEBUG [main] >>> org.eclipse.jetty.util.component.AbstractLifeCycle: STARTED >>> org.eclipse.jetty.server.Server@6364cbde >>> 2012-02-07 17:38:10,429 DEBUG [qtp881373670-22 Selector0] >>> org.eclipse.jetty.io.nio: Starting Thread[qtp881373670-22 >>> Selector0,5,main] on org.eclipse.jetty.io.nio.SelectorManager$1@52287b58 >>> 2012-02-07 17:38:10,429 DEBUG [main] >>> org.example.test.compatibility.cxf.CxfTestClient: **** >>> >>> CxfTestClient.getResource(http://localhost:8810/test/test.svc/categories( >>> 1) >>> /products) >>> 2012-02-07 17:38:10,656 DEBUG [main] >>> org.apache.http.impl.conn.SingleClientConnManager: Get connection for >>> route HttpRoute[{}->http://localhost:8810] >>> 2012-02-07 17:38:10,660 DEBUG [main] >>> org.apache.http.impl.conn.DefaultClientConnectionOperator: Connecting to >>> localhost:8810 >>> 2012-02-07 17:38:10,691 DEBUG [main] >>> org.apache.http.client.protocol.RequestAddCookies: CookieSpec selected: >>> best-match >>> 2012-02-07 17:38:10,707 DEBUG [main] >>> org.apache.http.client.protocol.RequestAuthCache: Auth cache not set in >>> the context >>> 2012-02-07 17:38:10,707 DEBUG [main] >>> org.apache.http.impl.client.DefaultHttpClient: Attempt 1 to execute >>> request >>> 2012-02-07 17:38:10,707 DEBUG [main] >>> org.apache.http.impl.conn.DefaultClientConnection: Sending request: GET >>> /test/test.svc/categories(1)/products HTTP/1.1 >>> 2012-02-07 17:38:10,707 DEBUG [main] org.apache.http.wire:>> "GET >>> /test/test.svc/categories(1)/products HTTP/1.1[\r][\n]" >>> 2012-02-07 17:38:10,708 DEBUG [main] org.apache.http.wire:>> "Host: >>> localhost:8810[\r][\n]" >>> 2012-02-07 17:38:10,708 DEBUG [main] org.apache.http.wire:>> >>> "Connection: >>> Keep-Alive[\r][\n]" >>> 2012-02-07 17:38:10,708 DEBUG [main] org.apache.http.wire:>> >>> "User-Agent: >>> Apache-HttpClient/4.1.2 (java 1.5)[\r][\n]" >>> 2012-02-07 17:38:10,708 DEBUG [main] org.apache.http.wire:>> "[\r][\n]" >>> 2012-02-07 17:38:10,708 DEBUG [main] org.apache.http.headers:>> GET >>> /test/test.svc/categories(1)/products HTTP/1.1 >>> 2012-02-07 17:38:10,708 DEBUG [main] org.apache.http.headers:>> Host: >>> localhost:8810 >>> 2012-02-07 17:38:10,709 DEBUG [main] org.apache.http.headers:>> >>> Connection: Keep-Alive >>> 2012-02-07 17:38:10,709 DEBUG [main] org.apache.http.headers:>> >>> User-Agent: Apache-HttpClient/4.1.2 (java 1.5) >>> 2012-02-07 17:38:10,727 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] org.eclipse.jetty.server.Server: >>> REQUEST /test/test.svc/categories(1)/products on >>> >>> org.eclipse.jetty.server.nio.SelectChannelConnector$SelectChannelHttpConn >>> ec >>> tion@1726c5a5@127.0.0.1:8810<->127.0.0.1:51920 >>> 2012-02-07 17:38:10,727 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.eclipse.jetty.server.handler.ContextHandler: scope >>> null||/test/test.svc/categories(1)/products @ >>> o.e.j.s.ServletContextHandler{/,null} >>> 2012-02-07 17:38:10,727 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.eclipse.jetty.server.handler.ContextHandler: >>> context=||/test/test.svc/categories(1)/products @ >>> o.e.j.s.ServletContextHandler{/,null} >>> 2012-02-07 17:38:10,729 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] org.eclipse.jetty.server.session: >>> >>> sessionManager=org.eclipse.jetty.server.session.HashSessionManager@62ac06 >>> d4 >>> #STARTED >>> 2012-02-07 17:38:10,729 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] org.eclipse.jetty.server.session: >>> session=null >>> 2012-02-07 17:38:10,730 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.eclipse.jetty.servlet.ServletHandler: servlet >>> |/test/test.svc|/categories(1)/products -> >>> org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet-255194190 >>> 2012-02-07 17:38:10,730 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.eclipse.jetty.servlet.ServletHandler: chain= >>> 2012-02-07 17:38:10,734 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.transport.servlet.ServletController: Service http request >>> on thread: Thread[qtp881373670-23 - >>> /test/test.svc/categories(1)/products,5,main] >>> 2012-02-07 17:38:10,734 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.transport.http.AbstractHTTPDestination: Create a new >>> message for processing >>> 2012-02-07 17:38:10,739 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.transport.http.Headers: Request Headers: >>> {connection=[keep-alive], Content-Type=[null], Host=[localhost:8810], >>> User-Agent=[Apache-HttpClient/4.1.2 (java 1.5)]} >>> 2012-02-07 17:38:10,754 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.phase.PhaseInterceptorChain: Adding interceptor >>> org.apache.cxf.interceptor.ServiceInvokerInterceptor@6cb101cf to phase >>> invoke >>> 2012-02-07 17:38:10,754 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.phase.PhaseInterceptorChain: Adding interceptor >>> org.apache.cxf.interceptor.OutgoingChainInterceptor@6e61a414 to phase >>> post-invoke >>> 2012-02-07 17:38:10,754 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.phase.PhaseInterceptorChain: Adding interceptor >>> org.apache.cxf.interceptor.OneWayProcessorInterceptor@4c5b55a9 to phase >>> pre-logical >>> 2012-02-07 17:38:10,754 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.phase.PhaseInterceptorChain: Adding interceptor >>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor@54f169 to phase >>> unmarshal >>> 2012-02-07 17:38:10,755 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.phase.PhaseInterceptorChain: Adding interceptor >>> org.apache.cxf.transport.https.CertConstraintsInterceptor@4c825cf3 to >>> phase pre-stream >>> 2012-02-07 17:38:10,755 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.phase.PhaseInterceptorChain: Chain >>> org.apache.cxf.phase.PhaseInterceptorChain@3c789d63 was created. Current >>> flow: >>> pre-stream [CertConstraintsInterceptor] >>> unmarshal [JAXRSInInterceptor] >>> pre-logical [OneWayProcessorInterceptor] >>> invoke [ServiceInvokerInterceptor] >>> post-invoke [OutgoingChainInterceptor] >>> >>> 2012-02-07 17:38:10,755 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.phase.PhaseInterceptorChain: Invoking handleMessage on >>> interceptor >>> org.apache.cxf.transport.https.CertConstraintsInterceptor@4c825cf3 >>> 2012-02-07 17:38:10,756 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.phase.PhaseInterceptorChain: Invoking handleMessage on >>> interceptor org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor@54f169 >>> 2012-02-07 17:38:10,762 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: Trying to select a resource >>> class, >>> request path : /categories(1)/products >>> 2012-02-07 17:38:10,763 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: Resource class >>> >>> org.example.test.compatibility.resource.CompatibilityEntitiesRequestResou >>> rc >>> e may get selected, request path : >>> >>> org.example.test.compatibility.resource.CompatibilityEntitiesRequestResou >>> rc >>> e, resource class @Path : /categories(1)/products >>> 2012-02-07 17:38:10,763 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: Resource class >>> >>> org.example.test.compatibility.resource.CompatibilityEntityRequestResourc >>> e >>> may get selected, request path : >>> >>> org.example.test.compatibility.resource.CompatibilityEntityRequestResourc >>> e, >>> resource class @Path : /categories(1)/products >>> 2012-02-07 17:38:10,763 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: Resource class >>> >>> org.example.test.compatibility.resource.CompatibilityLinksRequestResource >>> may get selected, request path : >>> >>> org.example.test.compatibility.resource.CompatibilityLinksRequestResource >>> , >>> resource class @Path : /categories(1)/products >>> 2012-02-07 17:38:10,763 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: Resource class >>> >>> org.example.test.compatibility.resource.CompatibilityPropertyRequestResou >>> rc >>> e may get selected, request path : >>> >>> org.example.test.compatibility.resource.CompatibilityPropertyRequestResou >>> rc >>> e, resource class @Path : /categories(1)/products >>> 2012-02-07 17:38:10,763 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: No resource class match for >>> org.example.test.compatibility.resource.SimpleCompatibilityResource, >>> request path : /categories(1)/products >>> 2012-02-07 17:38:10,763 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: Resource class >>> >>> org.example.test.compatibility.resource.CompatibilityEntitiesRequestResou >>> rc >>> e has been selected, request path : >>> >>> org.example.test.compatibility.resource.CompatibilityEntitiesRequestResou >>> rc >>> e, resource class @Path : /categories(1)/products >>> 2012-02-07 17:38:10,764 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: Trying to select a resource >>> operation on the resource class >>> >>> org.example.test.compatibility.resource.CompatibilityEntitiesRequestResou >>> rc >>> e >>> 2012-02-07 17:38:10,765 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: No method match, method name : >>> getEntities, request path : /products, method @Path : /, HTTP Method : >>> GET, method HTTP Method : GET, ContentType : */*, method @Consumes : >>> */*,, >>> Accept : */*,, method @Produces : >>> >>> application/atom+xml;charset=utf-8,text/javascript;charset=utf-8,applicat >>> io >>> n/json;charset=utf-8,. >>> 2012-02-07 17:38:10,765 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: No method match, method name : >>> getEntitiesCount, request path : /products, method @Path : /{count: >>> [$]count}, HTTP Method : GET, method HTTP Method : GET, ContentType : >>> */*, >>> method @Consumes : */*,, Accept : */*,, method @Produces : >>> >>> application/atom+xml;charset=utf-8,text/javascript;charset=utf-8,applicat >>> io >>> n/json;charset=utf-8,. >>> 2012-02-07 17:38:10,767 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: Trying to select a resource >>> operation on the resource class >>> >>> org.example.test.compatibility.resource.CompatibilityEntitiesRequestResou >>> rc >>> e >>> 2012-02-07 17:38:10,767 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: No method match, method name : >>> getEntities, request path : /products, method @Path : /, HTTP Method : >>> GET, method HTTP Method : GET, ContentType : */*, method @Consumes : >>> */*,, >>> Accept : */*,, method @Produces : >>> >>> application/atom+xml;charset=utf-8,text/javascript;charset=utf-8,applicat >>> io >>> n/json;charset=utf-8,. >>> 2012-02-07 17:38:10,767 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: No method match, method name : >>> getEntitiesCount, request path : /products, method @Path : /{count: >>> [$]count}, HTTP Method : GET, method HTTP Method : GET, ContentType : >>> */*, >>> method @Consumes : */*,, Accept : */*,, method @Produces : >>> >>> application/atom+xml;charset=utf-8,text/javascript;charset=utf-8,applicat >>> io >>> n/json;charset=utf-8,. >>> 2012-02-07 17:38:10,768 WARN [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.utils.JAXRSUtils: No operation matching request >>> path >>> "/test/test.svc/categories(1)/products" is found, Relative Path: >>> /products, HTTP Method: GET, ContentType: */*, Accept: */*,. Please >>> enable >>> FINE/TRACE log level for more details. >>> 2012-02-07 17:38:10,770 WARN [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper: >>> WebApplicationException has been caught : no cause is available >>> 2012-02-07 17:38:10,771 DEBUG [qtp881373670-23 - >>> /test/test.svc/categories(1)/products] >>> org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper: no cause is >>> available >>> javax.ws.rs.WebApplicationException >>> at >>> >>> org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:41 >>> 5) >>> at >>> >>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSI >>> nI >>> nterceptor.java:212) >>> at >>> >>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSIn >>> In >>> terceptor.java:89) >>> at >>> >>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorCh >>> ai >>> n.java:263) >>> at >>> >>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiatio >>> nO >>> bserver.java:123) >>> at >>> >>> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTP >>> De >>> stination.java:207) >>> at >>> >>> org.apache.cxf.transport.servlet.ServletController.invokeDestination(Serv >>> le >>> tController.java:213) >>> at >>> >>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletControll >>> er >>> .java:154) >>> at >>> >>> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringS >>> er >>> vlet.java:126) >>> at >>> >>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(Abstra >>> ct >>> HTTPServlet.java:185) >>> at >>> >>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPSe >>> rv >>> let.java:113) >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:693) >>> at >>> >>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTP >>> Se >>> rvlet.java:164) >>> at >>> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547) >>> at >>> >>> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:480 >>> ) >>> at >>> >>> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.j >>> av >>> a:225) >>> at >>> >>> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.j >>> av >>> a:941) >>> at >>> >>> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409) >>> at >>> >>> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.ja >>> va >>> :186) >>> at >>> >>> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.ja >>> va >>> :875) >>> at >>> >>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java: >>> 11 >>> 7) >>> at >>> >>> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollecti >>> on >>> .java:149) >>> at >>> >>> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.jav >>> a: >>> 110) >>> at org.eclipse.jetty.server.Server.handle(Server.java:345) >>> at >>> >>> org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java >>> :4 >>> 41) >>> at >>> >>> org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(Htt >>> pC >>> onnection.java:919) >>> at >>> org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582) >>> at >>> org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218) >>> at >>> >>> org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.j >>> av >>> a:51) >>> at >>> >>> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoi >>> nt >>> .java:586) >>> at >>> >>> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoin >>> t. >>> java:44) >>> at >>> >>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.ja >>> va >>> :598) >>> at >>> >>> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.jav >>> a: >>> 533) >>> at java.lang.Thread.run(Thread.java:680) >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >> >> >> -- >> Sergey Beryozkin >> >> Talend Community Coders >> http://coders.talend.com/ >> >> Blog: http://sberyozkin.blogspot.com > -- Sergey Beryozkin Talend Community Coders http://coders.talend.com/ Blog: http://sberyozkin.blogspot.com