代码之家  ›  专栏  ›  技术社区  ›  che

GSOAP有轻量级的替代品吗?

  •  11
  • che  · 技术社区  · 14 年前

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

    你知道有没有更简单的soap库,或者我必须回到像ezxml这样的通用xml生成器和解析器上来?

    4 回复  |  直到 14 年前
        1
  •  5
  •   Community dbr    7 年前

    我最近也研究过这个问题,我发现最好的选择是gsoap,它非常成熟,经过了很好的测试。但是,我决定使用非soap路由,这是一个选项,因为我同时在客户端和服务器端。在使用gsoap之前,请确保您可以使用他们的许可证,您可能不得不发布您的代码或支付他们,这取决于您如何使用它。

    另一个选择是apache Axis2/C ,尽管我没有经验(我猜它的足迹大小与gsoap相似)。他们的客户端api是 here . 关于客户端api的教程是 here .

    如果您决定使用解析的xml路径,您可能会对 this 所以问(见答案)。

    您还可以检查boost::spirit以获取解析的路径。它有能力制作小的、快速的、专业化的(和一般的)解析器,如果您对C++感到满意(它们可以被写入可重入的,那么通过一个带有外部的C对象的静态对象调用它们是KOSEER)。我可以从一般意义上担保(不是特定于xml)。学习曲线陡峭,但回报巨大。

        2
  •  2
  •   Dour High Arch    14 年前

    这是您正在创建的Web服务吗?如果是,考虑使用 REST 而不是肥皂。rest要简单得多,您可以使用现有的、经过测试的、正在工作的http处理程序,而不是经过一个巨大的http-xml-soap转换层。

    如果您正在使用其他人的web服务,请检查soap模式和/或响应示例。我不敢相信我提倡这样做,但如果模式不可扩展或递归,那么最好使用简单的lalr解析器,甚至在原始http响应中使用字符串匹配,而不是尝试解析soap或xml。这在嵌入式C中实现起来要简单得多。

        3
  •  1
  •   Morfildur    14 年前

    通常我们会回到直接创建xml(主要是通过字符串连接)的过程中,在这里不能使用好的soap库。

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

        4
  •  1
  •   Srikar Doddi    14 年前

    你看过吗 Apache CXF . 它有几个代码生成器特性

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

    一个更有用的建立消费者的指南是 here .