camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Charles Moulliard (JIRA)" <j...@apache.org>
Subject [jira] Issue Comment Edited: (CAMEL-2224) Response received is of type java.lang.String instead of javax.ws.rs.core.Response
Date Wed, 25 Nov 2009 16:35:52 GMT

    [ https://issues.apache.org/activemq/browse/CAMEL-2224?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=56106#action_56106
] 

Charles Moulliard edited comment on CAMEL-2224 at 11/25/09 8:35 AM:
--------------------------------------------------------------------

THE REQUEST SEND WAS NOT CORRECT :

If I use the following, everything works fine (-d has been added) 

{code}
curl -i  -H "Accept: application/xml" -H "Content-Type: application/xml" -d "<Incident><incidentId>555</incidentId><givenName>chm</givenName></Incident>"
-X POST http://localhost:8181/cxf/camel-rest-example/reportservice/incidents

HTTP/1.1 200 OK
Content-Type: application/xml
Date: Wed, 25 Nov 2009 16:27:02 GMT
Content-Length: 130
Server: Jetty(6.1.x)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Incident><incidentId>126</incidentId><givenName>chm</givenName></Incident>
{code}

Here is the trace from camel / cxfrs / apache karaf

{code}
ID: 46
Address: /cxf/camel-rest-example/reportservice/incidents
Encoding: UTF-8
Content-Type: application/xml; charset=UTF-8
Headers: {content-type=[application/xml; charset=UTF-8], connection=[keep-alive], Host=[localhost:8181],
Content-Length=[78], User-Agent=[Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3)
Gecko/20090824 Firefox/3.5.3], Pragma=[no-cache], Cache-Control=[no-cache], Accept-Language=[en-us,en;q=0.5],
Accept-Charset=[ISO-8859-1,utf-8;q=0.7,*;q=0.7], Keep-Alive=[300], accept-encoding=[gzip,deflate],
Accept=[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8], Content-Type=[application/xml;
charset=UTF-8]}
Payload: <Incident>
<incidentId>555</incidentId>
<givenName>chm</givenName>
</Incident>
--------------------------------------
17:23:37,882 | INFO  | 1979395@qtp0-3   | LoggingOutInterceptor            | ngOutInterceptor$LoggingCallback
 160 | Outbound Message
---------------------------
ID: 46
Encoding: 
Content-Type: application/xhtml+xml
Headers: {Date=[Wed, 25 Nov 2009 16:23:37 GMT]}
Payload: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Incident><incidentId>125</incidentId><givenName>chm</givenName></Incident>
{code}

QUESTION : WHY DO WE HAVE TO SEND PARAMETER (<Incident><incidentId>555</incidentId><givenName>chm</givenName></Incident>)
AS NORMALY A NEW OBJECT WILL BE CREATED BY THE SERVICE HEREAFTER ?

{code}
    @POST
    @Path("/incidents/")
    @Consumes("application/xml")
    public Response addIncident(Incident incident) {
        incident.setIncidentId(++currentId);

        incidents.put(incident.getIncidentId(), incident);
        
        return Response.ok(incident).build();
    }
{code}

If I compare with the test example, no parameters are send : 

{code}
    @Test
    public void testPostConsumer() throws Exception {
        PostMethod post = new PostMethod("http://localhost:9000/customerservice/customers");
        post.addRequestHeader("Accept" , "text/xml");
        RequestEntity entity = new StringRequestEntity(POST_REQUEST, "text/xml", "ISO-8859-1");
        post.setRequestEntity(entity);
        HttpClient httpclient = new HttpClient();

        try {
            assertEquals(200, httpclient.executeMethod(post));
            assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Customer><id>124</id><name>Jack</name></Customer>",
                    post.getResponseBodyAsString());
        } finally {
            post.releaseConnection();
        }

    } 
{code}


      was (Author: cmoulliard):
    THE REQUEST SEND WAS NOT CORRECT :

If I use the following, everything works fine (-d has been added) 

curl -i  -H "Accept: application/xml" -H "Content-Type: application/xml" -d "<Incident><incidentId>555</incidentId><givenName>chm</givenName></Incident>"
-X POST http://localhost:8181/cxf/camel-rest-example/reportservice/incidents

HTTP/1.1 200 OK
Content-Type: application/xml
Date: Wed, 25 Nov 2009 16:27:02 GMT
Content-Length: 130
Server: Jetty(6.1.x)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Incident><incidentId>126</incidentId><givenName>chm</givenName></Incident>

Here is the trace

ID: 46
Address: /cxf/camel-rest-example/reportservice/incidents
Encoding: UTF-8
Content-Type: application/xml; charset=UTF-8
Headers: {content-type=[application/xml; charset=UTF-8], connection=[keep-alive], Host=[localhost:8181],
Content-Length=[78], User-Agent=[Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3)
Gecko/20090824 Firefox/3.5.3], Pragma=[no-cache], Cache-Control=[no-cache], Accept-Language=[en-us,en;q=0.5],
Accept-Charset=[ISO-8859-1,utf-8;q=0.7,*;q=0.7], Keep-Alive=[300], accept-encoding=[gzip,deflate],
Accept=[text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8], Content-Type=[application/xml;
charset=UTF-8]}
Payload: <Incident>
<incidentId>555</incidentId>
<givenName>chm</givenName>
</Incident>
--------------------------------------
17:23:37,882 | INFO  | 1979395@qtp0-3   | LoggingOutInterceptor            | ngOutInterceptor$LoggingCallback
 160 | Outbound Message
---------------------------
ID: 46
Encoding: 
Content-Type: application/xhtml+xml
Headers: {Date=[Wed, 25 Nov 2009 16:23:37 GMT]}
Payload: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Incident><incidentId>125</incidentId><givenName>chm</givenName></Incident>


QUESTION : WHY DO WE HAVE TO SEND PARAMETER (<Incident><incidentId>555</incidentId><givenName>chm</givenName></Incident>)
AS NORMALY A NEW OBJECT WILL BE CREATED BY THE SERVICE HEREAFTER ?

    @POST
    @Path("/incidents/")
    @Consumes("application/xml")
    public Response addIncident(Incident incident) {
        incident.setIncidentId(++currentId);

        incidents.put(incident.getIncidentId(), incident);
        
        return Response.ok(incident).build();
    }

If I compare with the test example, no parameters are send : 

    @Test
    public void testPostConsumer() throws Exception {
        PostMethod post = new PostMethod("http://localhost:9000/customerservice/customers");
        post.addRequestHeader("Accept" , "text/xml");
        RequestEntity entity = new StringRequestEntity(POST_REQUEST, "text/xml", "ISO-8859-1");
        post.setRequestEntity(entity);
        HttpClient httpclient = new HttpClient();

        try {
            assertEquals(200, httpclient.executeMethod(post));
            assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Customer><id>124</id><name>Jack</name></Customer>",
                    post.getResponseBodyAsString());
        } finally {
            post.releaseConnection();
        }

    } 
--------------------------------------

  
> Response received is of type java.lang.String instead of javax.ws.rs.core.Response
> ----------------------------------------------------------------------------------
>
>                 Key: CAMEL-2224
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-2224
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-cxf
>    Affects Versions: 2.1.0
>            Reporter: Charles Moulliard
>            Assignee: Willem Jiang
>         Attachments: camel-context.xml, camel-cxf-rest-issue.zip
>
>
> {code}
> D:\Soft\opensource\curl-7.19.5-win32-nossl>curl -i -H "Accept: application/xml" http://localhost:8080/cxf/camel-rest-example/reportservice/incidents/1
> 11/
> HTTP/1.1 500 Internal Server Error
> Content-Type: text/xml; charset=iso-8859-1
> Content-Length: 256
> Server: Jetty(6.1.x)
> <ns1:XMLFault xmlns:ns1="http://cxf.apache.org/bindings/xformat"><ns1:faultstring
xmlns:ns1="http://cxf.apache.org/bindings/xformat">java.lang.ClassCa
> stException: java.lang.String cannot be cast to javax.ws.rs.core.Response</ns1:faultstring></ns1:XMLFault>
> {code}
> See the code in attachment
> Here is the config of apache karaf feature 
> {code}
> #
> # Comma separated list of features repositories to register by default
> #
> featuresRepositories=mvn:org.apache.felix.karaf/apache-felix-karaf/1.0.0/xml/features,mvn:org.apache.camel.karaf/features/2.1-SNAPSHOT/xml/features,jar:mvn:org.apache.camel.example/reportincident.restful.features/1.0-SNAPSHOT!/reportincident.features-1.0-SNAPSHOT-features.xml
> #
> # Comma separated list of features to install at startup
> # 
> featuresBoot=spring,spring-dm,camel,http-reportingincident,spring-web,camel-cxf,reportincident
> {code}
> camel + code is present in the zip. They are three bundles 
> - one generating the feature file of the project
> - another containing the REST service
> - and the last camel route
> here is the log on camel
> {code}
> 17:34:22,155 | INFO  | xtenderThread-37 | ContextLoaderListener            | BundleApplicationContextListener
  45 | Application context successfully refreshed (OsgiBundleXmlApplicationContext(bundle=org.apache.camel.example.reportincident.restful.routing,
config=osgibundle:/META-INF/spring/*.xml))
> 17:34:27,701 | INFO  | 14218728@qtp1-1  | Tracer                           | rg.apache.camel.processor.Logger
  88 | 970d2b95-93d9-4319-a5fd-4906ec9a9a9a >>> from(/camel-rest-example/) -->
setHeader[CamelCxfRsUsingHttpAPI], Pattern:InOut, Headers:{CamelCxfRsOperationResourceInfoStack=[org.apache.cxf.jaxrs.model.MethodInvocationInfo@82fd0f],

> CamelHttpMethod=GET, CamelHttpPath=/camel-rest-example/reportservice/incidents/111/,
CamelCxfRsResponseClass=class org.apache.camel.example.reportincident.restful.Incident, operationName=getIncident,

> CamelHttpUri=/cxf/camel-rest-example/reportservice/incidents/111/, CamelAcceptContentType=application/xml,
CamelHttpCharacterEncoding=ISO-8859-1}, BodyType:Object[], Body:[Ljava.lang.Object;@16237fd
> 17:34:27,701 | INFO  | 14218728@qtp1-1  | Tracer                           | rg.apache.camel.processor.Logger
  88 | 970d2b95-93d9-4319-a5fd-4906ec9a9a9a >>> setHeader[CamelCxfRsUsingHttpAPI]
--> log://org.apache.camel.example.reportIncident?level=INFO, Pattern:InOut, Headers:{CamelHttpPath=/camel-rest-example/reportservice/incidents/111/,
CamelHttpUri=/cxf/camel-rest-example/reportservice/incidents/111/, 
> CamelCxfRsOperationResourceInfoStack=[org.apache.cxf.jaxrs.model.MethodInvocationInfo@82fd0f],
CamelCxfRsUsingHttpAPI=True, CamelCxfRsResponseClass=class org.apache.camel.example.reportincident.restful.Incident,

> CamelHttpCharacterEncoding=ISO-8859-1, CamelHttpMethod=GET, operationName=getIncident,
CamelAcceptContentType=application/xml}, BodyType:Object[], Body:[Ljava.lang.Object;@16237fd
> 17:34:27,717 | INFO  | 14218728@qtp1-1  | reportIncident                   | rg.apache.camel.processor.Logger
  88 | Exchange[BodyType:Object[], Body:[Ljava.lang.Object;@16237fd]
> 17:34:27,717 | WARN  | 14218728@qtp1-1  | PhaseInterceptorChain            | ache.cxf.common.logging.LogUtils
 361 | Interceptor has thrown exception, unwinding now
> java.lang.ClassCastException: java.lang.String cannot be cast to javax.ws.rs.core.Response
> 	at org.apache.camel.example.reportincident.restful.OverrideResponseHandler.handleResponse(OverrideResponseHandler.java:22)
> 	at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:131)
> 	at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:77)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
> 	at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:76)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:109)
> 	at org.apache.cxf.transport.http_osgi.OsgiDestination.doMessage(OsgiDestination.java:79)
> 	at org.apache.cxf.transport.http_osgi.OsgiServletController.invokeDestination(OsgiServletController.java:324)
> 	at org.apache.cxf.transport.http_osgi.OsgiServletController.invoke(OsgiServletController.java:112)
> 	at org.apache.cxf.transport.http_osgi.OsgiServlet.invoke(OsgiServlet.java:53)
> 	at org.apache.cxf.transport.http_osgi.SpringOsgiServlet.invoke(SpringOsgiServlet.java:48)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
> 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
> 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:363)
> 	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.handle(HttpServiceServletHandler.java:64)
> 	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> 	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
> 	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.handle(HttpServiceContext.java:111)
> 	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:64)
> 	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> 	at org.mortbay.jetty.Server.handle(Server.java:324)
> 	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534)
> 	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:864)
> 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:533)
> 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:207)
> 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403)
> 	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
> 	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522)
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message