Hi Glen,
I think the router's code snippet should be
from("test-jms:queue:test.queue").process(new Processor() {
public void process(Exchange e) {
final List<String> params = new ArrayList<String>();
System.out.println("This was called!"); // never gets called
e.getIn().setHeader(CxfConstants.OPERATION_NAME,"DoubleIt");
params.add(e.getIn().getBody(String.class));
e.getIn().setBody(params);
}
}).to(CXF_URI).to("file://test").process(new Processor() {
public void process(Exchange e) {
System.out.println("Received exchange: " + e.getIn());
}
});
You need put the processor which deals with the CXF producer(client) invocation
parameter before the CXF producer.
The dsl from(CXF_URI) will create a CXF consumer(server) which will listen to
the JAXWS_SERVER_ADDRESS that you specified in the CXF_URI.
Willem.
Glen Mazza wrote:
OK, this is what I have so far. It is not working (doesn't raise an
error, just doesn't give any output), but before I do much more
troubleshooting, I want to make sure that I am not doing anything
obviously wrong.
To review, what I am trying to do with Camel is:
1.) Send ten numbers into a queue, 1-10.
2.) For each number, call a "doubleit" web service that will double the
number. (The wsdl is here[1] and it is running on Tomcat)
3.) Write the doubled number out to a file.
To do this, I am modifying the walk-through example[2] (which works fine
on my machine), which goes directly from queue to file, and inserting
the web service call in the middle. Here are the only real changes from
[2]:
private static final String JAXWS_SERVER_ADDRESS =
"http://localhost:8080/doubleit/services/doubleit";
private static final String SERVICE_CLASS =
"com.mycompany.webservice.service.DoubleItPortTypeImpl";
private static final String CXF_URI = "cxf://" + JAXWS_SERVER_ADDRESS
+ "?serviceClass=" + SERVICE_CLASS;
context.addRoutes(new RouteBuilder() {
public void configure() {
from("test-jms:queue:test.queue").to(CXF_URI).to("file://test");
from(CXF_URI).process(new Processor() {
public void process(Exchange e) {
final List<String> params = new ArrayList<String>();
System.out.println("This was called!"); // never gets called
e.getIn().setHeader(CxfConstants.OPERATION_NAME,"DoubleIt");
params.add(e.getIn().getBody(String.class));
e.getIn().setBody(params);
}
});
from("file://test").process(new Processor() {
public void process(Exchange e) {
System.out.println("Received exchange: " + e.getIn());
}
});
}
});
Does anyone see anything I am doing wrong here? Note debugging is
showing that the process() attached to CXF_URI is never being called--so
I may not be attaching things correctly. BTW, if it matters, my
DoubleItPortTypeImpl is here[3].
Thanks for any help,
Glen
[1] http://www.jroller.com/gmazza/date/20080417#WFstep5
[2] http://tinyurl.com/4dn6c6
[3] http://www.jroller.com/gmazza/date/20080417#WFstep6
2008-04-09 Willem Jiang wrote:
Hi Glen,
From your requirement , you need to start a "DoubleIt" web service your
self, maybe the same time that Camel context start.
Here is the code snippet for setting up the router.
from("test-jms:queue:test.queue").to("cxf://http://SERVICEADDRES?SEI=yourSEI...").to("file://test");
If you just feed the queue with a series of numbers, you need to change
the message for the "DoubleIt" web service in a processer first.
Here is an example[1] to show you how to make a web service call by
setting the message header with the Web service operation name , and
message body with the parameters. You can get the result from the
exchange.getOut().getBody(), which is a list.
[1]https://svn.apache.org/repos/asf/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerTest.java
Willem.
Glen Mazza wrote:
Hello,
I'm trying to create a Camel example so I can learn more about the
product. What I'd like to do is feed a queue a series of numbers, which
would automatically be fed as the lone parameter to a "DoubleIt" web
service, the output of which (i.e., the input number doubled in value)
would then be fed to a file.
I understand how to write from a message queue to a file from this
example[1], and also, the camel-cxf example[2] gives me a pretty good
idea of how web service calls are made, but I'm not sure how to have a
web service automatically activated based on what is fed through a
queue; further, how to have the number that is fed into the queue serve
as the lone parameter to that web service call (which component, if any,
must occur between the queue and the web service so the number off the
queue is put into the SOAP request.) Any guidance or known samples
would be appreciated.
Thanks,
Glen
[1] http://activemq.apache.org/camel/walk-through-an-example.html
[2] http://activemq.apache.org/camel/cxf-example.html