将Camel路由使用Beanshell来执行的话:将需要编译 的路由部分,很轻松的延迟到执行期 才解析。
很简单的一步,提供了一种思路:以一种更动态的形式构造路由 。
进而,可以编写一个动态解析"由Java DSL编写的Camel路由脚本 "并展示为图形的Eclipse插件..........
route.bsh脚本内容:
class MockRouteBuilder extends org.apache.camel.builder.RouteBuilder{ public void configure() { // START SNIPPET: example from("direct:start").setBody(body().append(" World!")).to("mock:result"); // END SNIPPET: example } } context.addRoutes(new MockRouteBuilder());
TestCase:
public class TransformViaDSLTest extends ContextTestSupport { protected MockEndpoint resultEndpoint; public void testSendingAMessageUsingMulticastReceivesItsOwnExchange() throws Exception { Interpreter interpreter = new Interpreter(); interpreter.set("context", context); interpreter.eval("e:\\route.bsh"); startCamelContext(); resultEndpoint.expectedBodiesReceived("Hello World!"); sendBody("direct:start", "Hello");resultEndpoint.assertIsSatisfied(); } @Override protected void setUp() throws Exception { super.setUp(); resultEndpoint = getMockEndpoint("mock:result"); } }
------------------------------------------------------------------------------------------------------------------------------
这样也行:
Interpreter interpreter = new Interpreter(); interpreter.set("context", context); String test = "class MockRouteBuilder extends org.apache.camel.builder.RouteBuilder{" + "\n" + "public void configure() {" + "\n" + "from(\"direct:start\").setBody(body().append(\" World!\")).to(\"mock:result\");" + "\n" + "}" + "\n" + "}" + "\n" + "context.addRoutes(new MockRouteBuilder());"; System.out.println(test); BufferedReader bufferedreader = new BufferedReader(new StringReader( test)); interpreter.eval(bufferedreader);