2014-02-25 51 views
2

我想要動態創建流或模型,而不使用遠程計算機的tcp的mule-config.xml。以編程方式創建流程或模型

應該是這樣的:

MuleContext context = new DefaultMuleContextFactory().createMuleContext(); 
MuleRegistry registry = context.getRegistry(); 

EndpointBuilder testEndpointBuilder = new EndpointURIEndpointBuilder("vm://testFlow.in", 
    context); 
testEndpointBuilder.setExchangePattern(MessageExchangePattern.REQUEST_RESPONSE); 
registry.registerEndpointBuilder("testFlow.in", testEndpointBuilder); 

InboundEndpoint vmInboundEndpoint = testEndpointBuilder.buildInboundEndpoint(); 
registry.registerEndpoint(vmInboundEndpoint); 

StringAppendTransformer stringAppendTransformer = new StringAppendTransformer(" world"); 
stringAppendTransformer.setMuleContext(context); 

Flow testFlow = new Flow("testFlow", context); 
testFlow.setMessageSource(vmInboundEndpoint); 
testFlow.setMessageProcessors(Arrays.asList((MessageProcessor) stringAppendTransformer)); 
registry.registerFlowConstruct(testFlow); 

context.start(); 

MuleClient muleClient = new MuleClient(context); 
MuleMessage response = muleClient.send("vm://testFlow.in", "hello", null); 
Validate.isTrue(response.getPayloadAsString().equals("hello world")); 

muleClient.dispose(); 
context.stop(); 
+0

您遇到的問題是什麼? – Seba

+0

嗨,我不想使用mule-config.xml,我想以編程方式進行入站和出站 – user3292902

+0

仍然:有什麼問題?我只看到一小段代碼,但沒有錯誤或實際問題。你需要清楚。 – Seba

回答

1

不知道如果我理解你的問題,但如果你需要在你流的TCP出站端點,您只需創建它同樣像入VM端點在例如,但是您將其添加到流中的某個點上,並將其與所有帶有setMessageProcessors的處理器相關聯,如在stringAppendTransformer包裝在列表中並添加到流中的示例中。

代碼來創建您的TCP出站會是這樣的:

String address = "tcp://localhost:1234"; 
EndpointURIEndpointBuilder builder = new 
    EndpointURIEndpointBuilder(new URIBuilder(address), context); 
builder.setExchangePattern(MessageExchangePattern.REQUEST_RESPONSE); 
registry.registerEndpointBuilder("testFlow.out", builder); 

OutboundEndpoint tcpOutboundEndpoint = builder.buildOutboundEndpoint(); 
registry.registerEndpoint(tcpOutboundEndpoint); 

更新關於您的新評論:

使用Java組件:

//object factory for your Java class 
PrototypeObjectFactory objectFactory = new PrototypeObjectFactory(MyClass.class); 
objectFactory.initialise(); 
//the actual component 
DefaultJavaComponent component = new DefaultJavaComponent(objectFactory); 
//entry point resolver to determine the called method 
EntryPointResolver resolver = new ExplicitMethodEntryPointResolver(); 
((ExplicitMethodEntryPointResolver)resolver).addMethod("myMethod"); 
component.setEntryPointResolvers(Arrays.asList(resolver)); 

然後添加成分在列表中像添加所有其他處理器一樣

+0

它不是調用我的java組件,你有任何想法將java的組件添加到流程 – user3292902

+0

這超出了你原來的tcp問題,但我更新了我的答案。 –

+0

親愛的安東,感謝您的輸入,正如您所建議的我添加了它正在正常工作的更改 – user3292902