Hi,

When in a Unit Test I use template.requestBody() with a WebService (which
is working perfectly using by example SOAP UI), I get the following error :

- Is it because the SOAP Acton is not defined ?
- As my code is similar to this one (
https://code.google.com/p/camelinaction/source/browse/trunk/chapter6/dataset/src/test/java/camelinaction/AcmeDataSetTest.java?r=47)
what could be the problem ?


org.apache.camel.CamelExecutionException: Exception occurred during
execution on the exchange: Exchange[Message:
org.fusesource.example.GetCustomerByName@4da3dc1d]
at
org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1335)
at
org.apache.camel.util.ExchangeHelper.extractResultBody(ExchangeHelper.java:618)
at
org.apache.camel.impl.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:454)
at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:120)
at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:136)
at
org.apache.camel.impl.DefaultProducerTemplate.requestBody(DefaultProducerTemplate.java:284)
at
org.apache.camel.impl.DefaultProducerTemplate.requestBody(DefaultProducerTemplate.java:314)
at
org.fusesource.example.camel.webservice.CustomerWebServiceTest.testCustomerFuse(CustomerWebServiceTest.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
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.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:47)
at org.junit.rules.RunRules.evaluate(RunRules.java:18)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
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.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:76)
at
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.IllegalArgumentException: Get the wrong parameter size
to invoke the out service, Expect size 0, Parameter size 1. Please check if
the message body matches the CXFEndpoint POJO Dataformat request.
at
org.apache.camel.component.cxf.CxfProducer.checkParameterSize(CxfProducer.java:262)
at
org.apache.camel.component.cxf.CxfProducer.getParams(CxfProducer.java:301)
at org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:112)
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:366)
at
org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:337)
at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:233)
at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:337)
at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:192)
at
org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:115)
at
org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:119)
... 35 more

Code

public class CustomerWebServiceTest extends CamelSpringTestSupport {

   ....

    @Override
    protected AbstractXmlApplicationContext createApplicationContext() {
        return new
ClassPathXmlApplicationContext("META-INF/spring/camelContext.xml");
    }

    @Test
    public void testCustomerFuse() throws Exception {

        GetCustomerByName searchCustomer = new GetCustomerByName();
        searchCustomer.setName("Fuse");

        GetCustomerByNameResponse reply =
template.requestBody("cxf:bean:WS", searchCustomer,
GetCustomerByNameResponse.class);
        assertEquals(searchCustomer.getName(),"Fuse");

    }
}

    <route id="customers-webservice">
      <from uri="cxf:bean:WS"/>
      <choice>
        <when>
          <simple>${in.header.SOAPAction} contains
'getCustomerByName'</simple>
          <log message="&gt;&gt;&gt; We will search a Customer"/>
          <bean method="getCustomerByName" ref="customerServiceBean"/>
        </when>
        <when>
          <simple>${in.header.SOAPAction} contains 'saveCustomer'</simple>
          <log message="&gt;&gt;&gt; We will save a Customer"/>
          <bean method="saveCustomer" ref="customerServiceBean"/>
        </when>
        <when>
          <simple>${in.header.SOAPAction} contains
'getAllCustomers'</simple>
          <log message="&gt;&gt;&gt; We will get all Customers"/>
          <bean method="getCustomers" ref="customerServiceBean"/>
        </when>
      </choice>
    </route>


Regards,

-- 
Charles Moulliard
Apache Committer / Sr. Enterprise Architect (RedHat)
Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com

Reply via email to