2015-06-11 98 views
1

我有一個代碼,執行正確的網絡服務調用。並且它還記錄返回的SOAP Header。現在我需要在UI上顯示相同的XML,因爲我需要從駝峯上下文中檢索輸出。從駱駝上下文檢索輸出

代碼:

DefaultCamelContext context = new DefaultCamelContext(); 

    // append the routes to the context 
    String myString = "<route id=\"my_Sample_Camel_Route_with_CXF\" xmlns=\"http://camel.apache.org/schema/spring\">" 
      + "  <from uri=\"file:///home/viral/Projects/camel/cxfJavaTest/src/data?noop=true\"/>" 
      + " <log loggingLevel=\"INFO\" message=\"&gt;&gt;&gt; ${body}\"/>" 
      + " <to uri=\"cxf://http://www.webservicex.net/stockquote.asmx?wsdlURL=src/wsdl/stockquote.wsdl&amp;serviceName={http://www.webserviceX.NET/}StockQuote&amp;portName={http://www.webserviceX.NET/}StockQuoteSoap&amp;dataFormat=MESSAGE\"/>" 
      + " <log loggingLevel=\"INFO\" message=\"&gt;&gt;&gt; ${body}\"/>" 
      + " </route>"; 
    ; 

    InputStream is = new ByteArrayInputStream(myString.getBytes()); 
    RoutesDefinition routes = context.loadRoutesDefinition(is); 
    context.addRouteDefinitions(routes.getRoutes()); 
    context.setTracing(true); 

    context.start(); 

    Thread.sleep(3000);  

    System.out.println("Done"); 
    context.stop(); 

有沒有辦法使用上下文變量或任何其他方式來獲取,其使用日誌語句打印Web服務的響應讓Web服務輸出?

如果您提供的代碼比對我非常有幫助。

在此先感謝。

回答

2

您可以創建一個自定義處理器來訪問您的路由中的數據。

class MyProcessor extends Processor { 

    public void process(Exchange exchange) throws Exception { 
    String body = exchange.getIn().getBody(String.class); //Maybe you need some other type. 
    //do your logic here 
    } 

} 

然後你就可以像(你需要把它添加到您的駱駝背景下的註冊表),將其添加到您的路線:

<process id="myProcessor"> 

而且,你爲什麼用你的代碼中的XML標記。使用Java DSL符號應該更容易。

+1

我需要在相同的地方從我開始駝峯不是另一個類(處理器)的響應。實際上我需要在UI上顯示響應。這就是爲什麼我需要在調用者程序中的響應。 – Viral