沒有簡單的方法來簡單地代理肥皂和休息。 REST服務,全部關於資源和CRUD - 創建/讀取/更新/刪除。負載可以是任何東西,通常是JSON,但XML,純文本或任何其他格式都是有效的。 SOAP只能通過自定義定義的方法來使用XML。
我瞭解所有的駱駝與此相關的組件的混亂。
有你需要有一點,同時艇員選拔你的方法的幾個方面。
你真的需要多少SOAP協議棧?最有可能你只想要的基本featuers,如接收一個簡單的肥皂信封和提取有效載荷沒有WS-addressing,ws-security等。
你有合同第一或代碼優先的方法嗎?也就是說,您是否已經通過java類/接口定義了您的soap服務,或者您是否擁有WSDL?
你已經部署了駱駝實例的servlet容器內(這是很常見的),如Tomcat,Jetty的或的JavaEE應用服務器?如果你,你可能需要使用該servlet容器來處理請求(由於某些原因,例如Web服務器虛擬主機,防火牆等,從同一個端口/服務器/域名獲得所有請求)。然後CXF可能會有點棘手。否則,駱駝可以用內置的碼頭核心提供聽衆。
所以: 合同第一和駱駝裏面serverletcontainer - 我更喜歡春天-WS,因爲它很容易上手。 spring-ws component。只是做春季初始wireing,你甚至都不需要從WSDL生成的東西,只是簡單地指出哪肥皂行動,URI或rootq名得到消息:
from("spring-ws:soapaction:http://example.com/GetFoo?endpointMapping=#endpointMapping")
那麼你有XML 。
如果您需要承載來自駱駝的Web服務,CXF在有效負載模式下是相當不錯的,並且行爲幾乎相同。
from("cxf:somename:http://localhost:8765?wsdl=somewsdlfile.wsdl&dataFormat=PAYLOAD")
如果你有definied在Java中已經是服務,你可以使用SOAP dataformat與碼頭成分得到一個非常輕量級的解決方案。
SoapJaxbDataFormat soap = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
from("jetty:http://localhost:9832/soapsrv")
.marshal(soap) // and other transforms here
.to("http://somerestservicehost/srv");
或者。使用CXF或CXF bean完整的CXF解決方案。駱駝網站上有很多例子。但是這個組件相當龐大,可能有點棘手。
休息時,也有選擇,但那部分更直接。 Rest很重要的是創建一些內容(通過從soap消息中提取它,也許將xml映射到json),這可能是一些簡單的舊Java代碼最容易實現的。然後,只需向您的其餘服務器調用HTTP端點即可。 HTTP4或HTTP組件將爲你做很多事情。
CXFRS是好的,如果你喜歡CXF,並能提供一些幫助,特別是如果你想你的休息與服務類模型
謝謝! SpringWS看起來很有希望。如果它可以偵聽來自外部(非常外部:)的SOAP服務的請求。 – JohnGray 2012-07-14 11:28:48