是否有任何语言或库找到了实现SOAP客户端的方法而没有大量生成的代码?

时间:2012-01-18 19:19:17

标签: web-services soap xml-rpc rpc

我来自.NET和Java世界,我对SOAP的印象是它总是涉及大量生成的样板代码。这是先验必要的吗?或者让其他语言或图书馆找到解决这个问题的方法?

3 个答案:

答案 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,这是路线图:

  • 你只有XSD
  • 您使用XJC(或某些maven插件)来生成类
  • 使用将这些类作为参数的方法编写自己的端点

这是样本端点:

@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']