2014-09-19 93 views
0

我试图访问的网站只发送xml。使用Camel的XML DSL,我试图获取该XML并通过cxrfs将其发送到另一个站点。现在我可以解决它到一个bean,只能够访问数据。带有XML的骆驼cxfrs

当我执行我的路线时,我不一定会得到任何错误。它只是没有对XML做任何事情,可能是因为它没有存储在正文中。但不知道。

输出

[INFO] Starting Camel ... 
[pache.camel.spring.Main.main()] MainSupport     INFO Apache Camel 2.12.0.redhat-610379 starting 
[pache.camel.spring.Main.main()] SpringCamelContext    INFO Apache Camel 2.12.0.redhat-610379 (CamelContext: camel) is starting 
[pache.camel.spring.Main.main()] ManagedManagementStrategy  INFO JMX is enabled 
[pache.camel.spring.Main.main()] DefaultTypeConverter   INFO Loaded 190 type converters 
[pache.camel.spring.Main.main()] SpringCamelContext    INFO AllowUseOriginalMessage is enabled. If access to the original message is not needed, then its recommended to turn this option off as it may improve performance. 
[pache.camel.spring.Main.main()] SpringCamelContext    INFO StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html 
[pache.camel.spring.Main.main()] SpringCamelContext    INFO Route: route1 started and consuming from: Endpoint[timer://foo?repeatCount=1] 
[pache.camel.spring.Main.main()] SpringCamelContext    INFO Total 1 routes, of which 1 is started. 
[pache.camel.spring.Main.main()] SpringCamelContext    INFO Apache Camel 2.12.0.redhat-610379 (CamelContext: camel) started in 0.335 seconds 
[camel) thread #0 - timer://foo] BusApplicationContext   INFO Refreshing [email protected]: startup date [Fri Sep 19 09:33:45 EDT 2014]; parent: org.[email protected]375d661b 
[camel) thread #0 - timer://foo] idationXmlBeanDefinitionReader INFO Loading XML bean definitions from class path resource [META-INF/cxf/cxf.xml] 
[camel) thread #0 - timer://foo] idationXmlBeanDefinitionReader INFO Loading XML bean definitions from class path resource [META-INF/cxf/camel/cxf-extension-camel.xml] 
My Processor! Get In 
null 
My Processor! Get out 
Message: [Body is null] 

路线

<bean id="proc" class="com.b2bservicep1.httpserv.Proc"/> 

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
     <from uri="timer://foo?repeatCount=1"/> 
     <setHeader headerName="CamelHttpMethod"> 
      <constant>GET</constant> 
     </setHeader> 
     <to uri="cxfrs://http://myxmlsitethatimcalling.com?resourceClasses=com.b2bservicep1.httpserv.Proc"/> 
     <to uri="bean:proc?method=process"/> 
    </route> 
</camelContext> 

</beans> 

处理器,我写

package com.b2bservicep1.httpserv; 

import javax.ws.rs.GET; 

import org.apache.camel.Exchange; 
import org.apache.camel.Processor; 

public class Proc implements Processor{ 

    @Override @GET 
    public void process(Exchange arg0) throws Exception { 
     // TODO Auto-generated method stub 
     System.out.println("My Processor! Get In"); 
     System.out.println(arg0.getIn().getBody()); 
     System.out.println("My Processor! Get out"); 
     System.out.println(arg0.getOut()); 
    } 

回答

0

你需要指定米而不仅仅是一个方法头。下面是一个例子

@Test 
public void testGetCustomerWithCxfRsEndpoint() { 
    Exchange exchange 
     = template.send("cxfrs://http://localhost:" + getPort1() + "/" + getClass().getSimpleName() + "/?httpClientAPI=true", new Processor() { 
      public void process(Exchange exchange) throws Exception { 
       exchange.setPattern(ExchangePattern.InOut); 
       Message inMessage = exchange.getIn(); 
       // set the Http method 
       inMessage.setHeader(Exchange.HTTP_METHOD, "GET"); 
       // set the relative path 
       inMessage.setHeader(Exchange.HTTP_PATH, "/customerservice/customers/123");     
       // Specify the response class , cxfrs will use InputStream as the response object type 
       inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, Customer.class); 
       // since we use the Get method, so we don't need to set the message body 
       inMessage.setBody(null);     
      } 
     }); 

    // get the response message 
    Customer response = (Customer) exchange.getOut().getBody(); 
    assertNotNull("The response should not be null ", response); 
    assertEquals("Get a wrong customer id ", String.valueOf(response.getId()), "123"); 
    assertEquals("Get a wrong customer name", response.getName(), "John"); 
    assertEquals("Get a wrong response code", 200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); 
} 

您可以找到有关如何在this unit test使用骆驼cxfrs制片人的更多信息。