骆驼:如何检查响应http响应

时间:2014-06-01 19:35:41

标签: java apache-camel

我对Camel很新。我一直在尝试将数据(来自文件的Json)提交给Web服务。这是我的代码:

    public static void main(String args[]) throws Exception {
        // create CamelContext
        CamelContext context = new DefaultCamelContext();

        // add our route to the CamelContext
        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() {
                from("file:data/inbox?noop=true")
                    .marshal()
                    .string()
                    .setHeader(Exchange.CONTENT_TYPE,constant("application/json"))
                    .to("http://www.a-service.com");
            }
        });

        // start the route and let it do its work
        context.start();
        Thread.sleep(10000);

        // stop the CamelContext
        context.stop();
    }

然后web服务将响应Json,它可以    {结果:OK}  要么    {结果:FAIL}

现在,如果响应的responseCode为200,Camel将认为是成功的。

我的问题是,我怎样才能对响应的JSon进行验证过程,以便如果它失败,Camel不应该认为是成功的?

解决方案 Credit @Namphibian:

通过添加处理器和结束。此代码已经过测试:

    from("file:data/inbox?noop=true")
        .marshal()
        .string("UTF-8")
        .setHeader(Exchange.CONTENT_TYPE,constant("application/json"))
    .to("http://monrif-test.userspike.com/monrif/rss/monrif_-all-global")
        .process(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception {
                Message in = exchange.getIn();
                String msg = in.getBody(String.class);
                System.out.println("Response: " + msg);
                if(msg.contains("OK")){
                    // go to party
                }else{
                    throw new Exception("test exception");
                }
            }
        });

2 个答案:

答案 0 :(得分:2)

您可以使用两种广泛的策略来实现这一目标。

基于处理器:

将处理器添加到路径的末尾。在此处理器中,检查webservice是否以true或false值响应。

处理器看起来像这样:

    package com.example;

    import java.util.Map;

    import org.apache.camel.Body;
    import org.apache.camel.Exchange;
    import org.apache.camel.Handler;
    import org.apache.camel.Headers;
    import org.apache.camel.Message;

    public class GeneralProcessor {
        @Handler

        public void PrepapreErrorImportReport
        (

                @Headers Map hdr
                , Exchange exch
        )
        {

            //todo: Get the message as a string;

            Message in = exch.getIn();
            String msg = (String)in.getBody();
            // Now check if body contains failed or ok.
            if(msg.contains("OK")){
                //todo: go party the message was OK
            }
            else{
               //todo: Oh Oh! Houston we have a problem
            }


        }

    }

然后,您可以修改路线以使用此处理器。

简单表达语言

这是另一种使用简单表达式语言的方法。请参阅下面的示例,了解如何使用它。

 from("file:data/inbox?noop=true")
                .marshal()
                .string()
                .setHeader(Exchange.CONTENT_TYPE,constant("application/json"))
                .to("http://www.a-service.com")
                .choice()
                .when(simple("${body} contains 'OK'")).to("activemq:okqueue")
                .otherwise().to("activemq:queue:other");

注意simple("${body} contains 'OK'")段代码。这就是简单的力量。

这两种方法都有用途。

答案 1 :(得分:1)

var spans = list.getElementsByTagName("SPAN"), count = spans.length, filtered_spans = '', i = 0; for(; i < count; i++) { if (!spans[i].innerHTML.match(/X-Men\s(2|3)/gi)) filtered_spans += spans[i]; } 方法中,您可以使用以下方法,它可以正常工作

Process