2015-06-04 75 views
1

如果我們提供了所需的對象結構,Apache Camel是否會自動生成SOAP消息?駱駝是否自動生成SOAP消息?

如果不是,我爲什麼要使用駱駝來調用Web服務?

請給我提供具體的理由,幫助它調用任何SOAP Web服務。

我的駱駝配置是

camelContext.addRoutes(new RouteBuilder() { 
      @Override 
      public void configure() throws Exception { 
       from("direct:start") 
         .process(new Processor() { 

          @Override 
          public void process(Exchange exchange) throws Exception { 
           System.out.println("In ........"); 
           exchange.getIn().setBody("<country>india</country>"); 
           System.out.println("in process method"); 
           System.out.println(exchange.getExchangeId() + " : " + exchange.getFromRouteId() + " : " + exchange.isFailed()); 
          } 
         }). 
         to("cxf://http://www.webservicex.net/airport.asmx?" + "wsdlURL=http://www.webservicex.net/airport.asmx?wsdl&" 
           + "serviceName={http://www.webserviceX.NET}airport&" + "portName={http://www.webserviceX.NET}airportSoap&" 
           + "defaultOperationName=GetAirportInformationByCountry&" + "dataFormat=MESSAGE") 
         .to("file:/home/viral?fileName=output.txt"); 

      } 
     }); 

感謝。

+0

你能分享你的駱駝配置嗎? –

+0

從駱駝/ CXF提供的3種方法('Message','Payload','Pojo')我猜Pojo就是你所追求的。您是否已閱讀[documentation](http://camel.apache.org/cxf.html)?接下來,誰強迫你首先使用駱駝?對於簡單地發送和接收SOAP消息,您也可以使用CXF或任何其他SOAP框架 - 其中大多數提供某種POJO <--> SOAP功能(通常基於JAXB) –

+0

我有Pojo的搜索示例,但我無法找出來。請爲我提供示例代碼。因爲我是駱駝新人。提前致謝。 – Viral

回答

2

如果我們提供所需的對象結構,Apache Camel是否會自動生成SOAP消息?

整體YES,

你並不需要通過自己進行SOAP信封。您只需編寫您定義SOAP消息的自定義Processor。另外在camelContext中,您需要定義您的endpointroute。如果發生錯誤,它還會處理soapfault,或者您可以編寫自己的自定義錯誤SOAP響應。

更新在你的回覆意見:

,如果你想使你的通用駱駝處理器,那麼你可以在XML文件中每次添加您的郵件正文和設置的SOAPBody這樣

... 
@Override 
public void process(Exchange exchange) throws Exception { 
    System.out.println("In ........"); 

    try { 
    File file = new File("soapbody.xml"); // generic body in separate XML file for every time 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    Document doc = db.parse(file); 
    String body = doc.toString(); 
    exchange.getIn().setBody(body); 

    } 
    catch (Exception e) { 
    e.printStackTrace(); 
    } 
    System.out.println("in process method"); 
    System.out.println(exchange.getExchangeId() + " : " + exchange.getFromRouteId() + " : " + exchange.isFailed()); 
} 
... 
+0

任何我們需要在處理器中編寫一些邏輯的權利? – Viral

+0

是的,這是顯而易見的,這取決於您的業務需求 –

+0

其實我需要開發的通用實用工具,它接受對象形式的Web服務的輸入,現在我需要創建消息給肥皂。我如何能夠以通用的方式在處理器中創建肥皂,以便能夠使用駱駝調用任何類型的Web服務。根據您的要求,我已經添加了駱駝配置問題本身。我需要通過國家在網絡服務。請建議我該怎麼做,以便我能夠調用任何種類的基於SOAP的Web服務 – Viral