是否有gSOAP的轻量级替代品?

时间:2010-03-25 18:00:01

标签: c soap soap-client gsoap

我尝试使用gSOAP访问Web服务(例如,使用提供的WSDL生成C存根,然后在应用程序中使用它们)。但是,我发现生成的.c和目标文件非常大(几兆字节),这是我工作的嵌入式环境中的一个问题。

您是否知道任何更简单的SOAP库,或者我是否必须回归到ezXML等通用XML生成器和解析器?

4 个答案:

答案 0 :(得分:5)

我最近也研究了这个问题,我找到的最好的选择是gSOAP,它非常成熟且经过了充分的测试。但是,我决定采用非SOAP路由,这是一个选项,因为我在客户端和服务器端。在使用gSOAP之前,请确保您可以使用他们的许可证,您可能有义务根据您的使用方式发布您的代码或付款。

另一个选项是Apache Axis2/C,虽然我没有使用它的经验(我猜它有与gSOAP类似的大小)。他们的客户端API是here。客户端API的教程是here

如果您决定使用已解析的XML路线,您可能会对this SO问题感兴趣(请参阅答案)。

您也可以检查解析路线的boost :: spirit。它有能力制作小型,快速,专业(和通用)解析器,如果你对C ++感到满意(它们可以被编写为可重入的,那么通过带有extern“C”接口的静态对象调用它们就是kosher )。我可以在一般意义上保证它(不是特定于XML)。陡峭的学习曲线,但收益很大。

答案 1 :(得分:2)

这是您正在创建的网络服务吗?如果是这样,请考虑使用REST而不是SOAP。 REST要简单得多,您可以使用现有的,经过测试的,现在正在使用的HTTP处理程序,而不是通过庞大的HTTP - XML - SOAP转换层。

如果您正在使用其他人的Web服务,请检查SOAP架构和/或响应示例。我无法相信我提倡​​这一点,但如果架构不可扩展或递归,那么最好在原始HTTP响应中使用简单的LALR解析器甚至字符串匹配,而不是尝试解析SOAP或XML。这在嵌入式C中实现起来要简单得多。

答案 2 :(得分:1)

通常我们会直接创建XML(主要是通过字符串连接),而不能使用好的SOAP库。

另一个解决方案可能是您切换到JSON,它通常具有较小的开销和请求/响应大小,因此在嵌入式程序中可能更好。如果您只有SOAP WebService可用,则可以在服务器上使用代理脚本,该代理脚本将JSON请求转换为SOAP请求,并将SOAP响应转换为JSON响应。

答案 3 :(得分:1)

你看过Apache CXF了吗?它有几个代码生成功能

* Java to WSDL
* WSDL to Java
* XSD to WSDL
* WSDL to XML
* WSDL to SOAP
* WSDL to service

构建消费者的更有用的指南是here