我来自.NET和Java世界,我对SOAP的印象是它总是涉及大量生成的样板代码。这是先验必要的吗?或者让其他语言或图书馆找到解决这个问题的方法?
答案 0 :(得分:0)
我认为很多垃圾都是SOAP所必需的,但是RESTFul看起来很有前途。我认为WCF Web API值得一看,因为它实现了很多标准的http内容,但WCF数据服务方面的东西看起来很酷(OData?)。
http://wcf.codeplex.com/wikipage?title=WCF%20HTTP
http://msdn.microsoft.com/en-us/data/bb931106
希望有所帮助
答案 1 :(得分:0)
使用Spring WebServices,您最终只能使用JAXB生成的类(来自XSD)并使用您自己的实现,它只使用这些类作为方法参数和端点类型。
SOAP本身可被视为繁琐的协议,需要昂贵/重量级的工具。它也可以看作是XML有效负载的一个薄包装器,它具有很大的优势 - WSDL作为描述操作和参数的描述语言(也可以看作是沉重的或无处不在的)。
返回Spring Web Services,这是路线图:
这是样本端点:
@PayloadRoot(localPart = "myMethod", namespace = "http://example.com")
@ResponsePayload
public MyResult myMethod(@RequestPayload MyRequest req)
{
}
我已经编写了许多大型 Web服务并手工编写了〜50种这样的方法比依赖生成的代码更加愉快和有效。
答案 2 :(得分:0)
如果您要实现或使用简单的WEB服务,并且不生成大量DTO对象,对其进行验证等,则可以使用groovy-wslite。它是Groovy的主要用途,这使它变得更加容易和吸引人,并且您当然可以在Java应用程序中使用它。
客户WEB服务消费的简单示例:
import wslite.soap.*
def client = new SOAPClient('http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx')
def response = client.send(SOAPAction:'http://www.27seconds.com/Holidays/US/Dates/GetMothersDay') {
body {
GetMothersDay('xmlns':'http://www.27seconds.com/Holidays/US/Dates/') {
year(2011)
}
}
}
assert "2011-05-08T00:00:00" == response.GetMothersDayResponse.GetMothersDayResult.text()
assert 200 == response.httpResponse.statusCode
assert "ASP.NET" == response.httpResponse.headers['X-Powered-By']