没有简单的方法来简单地代理肥皂和休息。 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