【问题标题】:Camel cxfrs with XML带有 XML 的骆驼 cxfrs
【发布时间】:2014-11-14 03:09:15
【问题描述】:

我尝试访问的网站仅发送 xml。使用 Camel 的 XML DSL,我试图获取该 XML 并通过 cxrfs 将其发送到另一个站点。现在我可以接受它去一个 bean 并且仅仅能够访问数据。

当我执行我的路线时,我不一定会遇到任何错误。它只是没有对 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 org.apache.cxf.bus.spring.BusApplicationContext@3fd43e1d: startup date [Fri Sep 19 09:33:45 EDT 2014]; parent: org.springframework.context.support.FileSystemXmlApplicationContext@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());
    }

【问题讨论】:

    标签: xml apache-camel cxfrs


    【解决方案1】:

    您需要指定多个方法标头。这是一个例子

    @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找到更多关于如何使用camel-cxfrs producer的信息。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多