Hi,
You can not use the rsServer bean to send the reqeuest to CXFRS server.
You need to define a client rsClient for CXFRS endpoint to use.
Just like this
<cxf:rsServer id="rsServer"
address="http://localhost:${CXFTestSupport.port1}/CxfRsRouterTest/route"
serviceClass="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService"
loggingFeatureEnabled="true" loggingSizeLimit="20"/>
<!-- Defined the client endpoint to create the cxf-rs producer -->
<cxf:rsClient id="rsClient"
address="http://localhost:${CXFTestSupport.port2}/CxfRsRouterTest/rest"
serviceClass="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService"
loggingFeatureEnabled="true" />
On Fri Mar 9 07:17:15 2012, GPRSLyons wrote:
Gents-
I am trying to test a camel CXFRS endpoint route and getting the following
*trace*...
org.apache.camel.CamelExecutionException: Exception occurred during
execution on the exchange: Exchange[Message: Hello World]
at
org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1212)
at
org.apache.camel.util.ExchangeHelper.extractResultBody(ExchangeHelper.java:509)
at
org.apache.camel.impl.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:442)
at
org.apache.camel.impl.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:438)
at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:126)
at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:342)
at
com.akqa.audi.service.product.ProductDataRouteTest.testMoveFile(ProductDataRouteTest.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at
org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
at
org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at
org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at
org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.IllegalArgumentException: The configure bean is not the
instance of org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean
at
org.apache.camel.component.cxf.jaxrs.CxfRsEndpoint.checkBeanType(CxfRsEndpoint.java:131)
at
org.apache.camel.component.cxf.jaxrs.CxfRsSpringEndpoint.newJAXRSClientFactoryBean(CxfRsSpringEndpoint.java:75)
at
org.apache.camel.component.cxf.jaxrs.CxfRsEndpoint.createJAXRSClientFactoryBean(CxfRsEndpoint.java:204)
at
org.apache.camel.component.cxf.jaxrs.CxfRsProducer$ClientFactoryBeanCache.get(CxfRsProducer.java:358)
at
org.apache.camel.component.cxf.jaxrs.CxfRsProducer.invokeHttpClient(CxfRsProducer.java:96)
at
org.apache.camel.component.cxf.jaxrs.CxfRsProducer.process(CxfRsProducer.java:87)
at
org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at
org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)
at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)
at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:99)
at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:86)
at
org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:63)
at
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:352)
at
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:324)
at
org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:223)
at
org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:324)
at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:169)
at
org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:111)
at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:124)
... 30 more
*
Here is my test:*
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfig.class})
public class Test {
@Autowired
protected CamelContext context;
@Produce(uri = "file://target/inbox")
protected ProducerTemplate inbox;
@EndpointInject(uri = "cxfrs:bean:rsServer")
protected ProducerTemplate rsServer;
...
*Here are my routes:*
@Component
public class TestRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file://target/inbox")
.to("file://target/outbox");
from("cxfrs:bean:rsServer")
.setBody(constant("HI"))
.setHeader(Exchange.HTTP_PATH, constant(""))
.to("http://www.google.com?bridgeEndpoint=true")
.unmarshal().gzip();
...
*Here is my Config:*
<cxf:rsServer id="rsServer" address="/">
<cxf:serviceBeans>
<ref bean="productService"/>
</cxf:serviceBeans>
<cxf:extensionMappings>
<entry key="json" value="application/json"/>
<entry key="xml" value="application/xml"/>
</cxf:extensionMappings>
</cxf:rsServer>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<routeBuilder ref="testRouter"/>
</camelContext>
I can test the File transfer routes just fine and can access the proxied
page when running this on the server. How can I send a message to the CXFRS
route in a test?
Thanks!
--
View this message in context:
http://camel.465427.n5.nabble.com/Testing-Camel-CXFRS-Routes-tp5549188p5549188.html
Sent from the Camel - Users mailing list archive at Nabble.com.
--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.javaeye.com (Chinese)
Twitter: willemjiang
Weibo: willemjiang