我对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");
}
}
});
答案 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