【问题标题】:Scaffolding Web Services in Grails在 Grails 中搭建 Web 服务
【发布时间】:2010-03-29 22:00:15
【问题描述】:

我需要实现一个 Web 应用程序,但我需要使用不同的 SOAP Web 服务作为后端,而不是使用关系数据库。应用程序的一个重要部分只调用 Web 服务并显示结果。由于 Web 服务以 Operation: In parameters 和 Return Type 的形式明确定义,在我看来,基本的 GUI 可以很容易地构建,就像基于域实体的脚手架的情况一样。

例如,在 SearchProducts 网络服务操作的情况下,我需要输入搜索参数作为输入,这样才能构建搜索页面。操作会返回一个产品列表,所以我需要一个在某种表格中显示这个列表的页面。

grails 中是否已经有一些库可以让您实现这一目标。如果没有,您将如何创建一个?

【问题讨论】:

    标签: grails groovy scaffolding


    【解决方案1】:

    可能最简单的方法是在 WSDL 文件上使用 wsimport 来生成客户端存根。然后,您可以从 Groovy 调用存根中的方法,就像在 Java 中调用它们一样。

    例如,考虑 Microsoft 的 TerraServer 的 WSDL 文件,它位于 http://terraservice.net/TerraService.asmx?wsdl 。然后你运行类似

    wsimport -d src -keep http://terraservice.net/TerraService.asmx?WSDL
    

    将所有已编译的存根放在 src 目录中。然后你可以像这样编写 Groovy 代码

    import com.terraserver_usa.terraserver.*;
    
    TerraServiceSoap sei = new TerraService().getTerraServiceSoap()
    Place home = new Place(city:'Boston',state:'MA',country:'US')
    def pt = sei.convertPlaceToLonLatPt(home)
    println "$pt.lat, $pt.lon"
    assert Math.abs(pt.lat - 42.360000) < 0.001
    assert Math.abs(pt.lon - -71.05000) < 0.001
    

    如果您想访问大量 Web 服务,请为所有这些服务生成存根。或者您可以改用动态代理。

    不过,底线是让 Java 做它已经做得很好的事情,并使用 Groovy 让您的生活更轻松。

    【讨论】:

      【解决方案2】:

      您应该能够使用XFire 或CXF 插件。对于自动脚手架,请修改脚手架模板中的 Controller.groovy 模板,以便它自动生成您需要的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多