2016-09-23 40 views
0

我想测试通过cxf端点消耗肥皂消息的路由。服务类是带有2个字符串参数的带有注释的(@WebService)接口。如何使用cxf端点消耗肥皂测试路由

我想测试路由,特别是由cxf创建的MessageContentList的处理。

但是如何测试这样的路线? 我看到2个选项:

  • 直接端点测试替代CXF端点,而是如何创建具有相同的形状真实消息路由contentlist?
  • 使用真实路由并发送一个xml/soap消息给它,但是如何使用定义soap消息的接口创建这样一个方法?

还有其他的选择吗?

回答

0

为什么不使用真正的路由并创建一个使用ProducerTemplate向您的cxf端点发送交换的junit测试(使用CamelTestSupport)?

public class MyTestClass extends CamelTestSupport { 

    @Test 
    public void myTestMethod() { 
     Map<String, Object> headers = new HashMap<String, Object>(); 
     headers.put("content-type","application/xml"; 
     template.sendBodyAndHeaders("<real_cxf_endpoint_url>", "<test_xml_message>", headers); 
    } 
} 

在这里看到更多的信息:http://camel.apache.org/camel-test.html

+0

的问题是什么类型的交流应该有,如何创建一个交换是类似于在实(一个xml SOAP消息不知何故转换为“MessageContentList”) 我不发出交流有一个例子xml。 – dermoritz

+0

上面的代码将创建一个类似于真实消息中发送的交换的交换。但是,如果您想首先手动创建交换,请使用Exchange exchange = new DefaultExchange(new DefaultCamelContext())然后,您可以设置所需的任何标题/属性,并使用template.send(String URI,Exchange exchange)方法覆盖来调用网络服务。 –

+0

请选择我的答案,并加注它,因为它回答了您原来提出的问题。 –

0
@EndpointInject(uri = "direct:source") 
    protected Endpoint source; 

@Produce 
    protected ProducerTemplate producer; 
@Test 
method() { 
    Exchange response = createAndSendMessage(); 
} 

private Exchange createAndSendMessage() { 
    Exchange exchange = source.createExchange(); 
    exchange.getIn().setBody(contentlist); 
    Exchange response = producer.send(source, exchange); 
    return response; 
} 

如果你想使用XML,在资源文件夹中创建XML输入文件,并将其设置为交换体。

exchange.getIn().setBody(requestXML); 
+0

的问题是:如何设置正确的内容列表。同时我只是添加了我用xsd定义的类型的实例。但我不知道订购。我正在使用get(i)访问项目。 – dermoritz

+0

在SOAP UI中导入wsdl,从那里复制请求xml –

+0

有人读过这个问题吗?我没有wsdl。它是代码第一。有一个带注释的Java接口。从这个cxf在运行中生成一个wsdl。 – dermoritz