camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gramanero <graman...@gmail.com>
Subject HOW-TO: Jetty, JSON, and Restful Services
Date Tue, 29 May 2012 16:01:58 GMT
I am "very" new to FuseESB and the underlying technology stack, so I
apologize up front if I am not using the correct terminology when trying to
describe the issues we are running into. We are working on a proof of
concept to determine if FuseESB is the direction we want to go for some
internal projects. We are very excited about the various capabilities that
are readily available and can envision how these pre-built pieces will allow
us to build solutions quickly. Having said that, we have having some
difficulty in getting a particular route to work and could use some
assistance.

There are two problems that we are running in to.

1) Routing XML based messages from a jetty or ActiveMQ endpoint to a .NET
restful service without going through a file endpoint.
2) Routing JSON based messages from jetty or ActiveMQ endpoint to a .NET
restful svc

The route that we are trying to, ideally, get up and running is as follows:

(client application) --> jetty:http --> ActiveMQ --> .NET Restful Service
(JSON)

We are able to send a JSON or XML message to the jetty endpoint; however
trying to get the body of the message routed directly to the restul svc has
been a bit of a challenge. Even attempting to route the body of the JSON or
XML message to a queue, and then to the restful svc is showing similar
problems as well. What have been able to get working is the following:

(client application) --> jetty:http --> ActiveMQ --> File --> .NET Restful
Service (XML)

We want to get rid of the use of the file system as it slows up the process
and is an unnecessary hop. With respect to trying to get the message from
jetty to the restul svc or from ActiveMQ to the restful svc, it "feels" like
there is data coming out of the "from" endpoint that is negatively colliding
with our attempts to forward the message to the restful svc. In the case of
jetty:http directly to the restul svc, here is the route:

    <route>
        <from uri="jetty:http://localhost:8888/MetricsEndpoint"/>
	<convertBodyTo type="String" />
	<removeHeader headerName="Host" />
	<removeHeader headerName="Connection" />
	<removeHeader headerName="Accept" />
	<removeHeader headerName="Accept-Language" />
	<removeHeader headerName="Accept-Encoding" />
	<removeHeader headerName="UA-CPU" />
	<removeHeader headerName="User-Agent" />
	<removeHeader headerName="Cache-Control" />
	<removeHeader headerName="Content-Length" />
	<removeHeader headerName="Content-Type" />
	<removeHeader headerName="CamelHttpQuery" />
	<removeHeader headerName="CamelHttpPath" />
	<removeHeader headerName="CamelHttpUri" />
	<removeHeader headerName="CamelHttpUrl" />
	<removeHeader headerName="CamelHttpServletRequest" />
	<removeHeader headerName="CamelHttpServletResponse" />
        
        <to uri="cxfrs:http://localhost:5477/MetricsService/Create/"
pattern="InOnly"/>
    </route>

The reason for all of the "removeHeader" elements is that it appears as
though the output message from jetty is adding in all of the input message
headers, so this is my attempt at clearing them out. I suspect that
something similar is happening when routing directly from ActiveMQ to the
restful svc. I also suspect that this is why routing through the file system
works, because the only information in the file that gets written to disk is
the body of the message minus any header information from jetty or ActiveMQ.
I attempted to use the Jackson library as a data format for
marshalling/unmarshalling, but I'm not quite sure I need it since we are
really trying to transform the data between JSON and XML (nor do we really
want to). We really want to keep the messages as JSON al the way through the
route.

I'm not exactly how much information to provide with post, so I'll give you
the current error that we are running into and see where the thread goes
from there.

When the restful svc is NOT up and running then I get an error that I would
expect:

Caused by: java.net.ConnectException: ConnectException invoking
http://localhost:5477/MetricsService/Create/: Connection refused: connect

This tells me (I think) that I am getting to the jetty endpoint and that
camel is routing something to the restful svc, but just cannot connect to
it.

When I start the restful svc, I get the following:

org.apache.camel.component.cxf.CxfOperationException: JAXRS operation failed
invoking http://localhost:8888/MetricsEndpoint with statusCode: 404

I uploaded the service mix log file, so I'm hoping that provided more
context.
http://camel.465427.n5.nabble.com/file/n5713702/servicemix.log
servicemix.log 

ServiceMix Version: 4.4.1-fuse-03-06 (standard out of the box configuration)

One last piece of information is that while we have Java development
experience in-house, we are mostly an MS shop. We are trying to get these
routes to work with no java development, but rather through the use of
Spring.

Any help would be greatly appreciated and obviously if I can provide more
information please let me know.

Thanks!






--
View this message in context: http://camel.465427.n5.nabble.com/HOW-TO-Jetty-JSON-and-Restful-Services-tp5713702.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Mime
View raw message