在Grails中搭建Web服务

在Grails中搭建Web服务,grails,groovy,scaffolding,Grails,Groovy,Scaffolding,我需要实现一个web应用程序,但我需要使用不同的SOAP web服务作为后端,而不是使用关系数据库。应用程序的一个重要部分只是调用web服务并显示结果。由于Web服务是以操作的形式明确定义的:在参数和返回类型中,在我看来,基本GUI可以很容易地构建,就像基于域实体的脚手架一样 例如,在SearchProducts web服务操作的情况下,我需要输入搜索参数作为输入,以便构建搜索页面。操作将返回一个产品列表,因此我需要一个页面,该页面将在某种表格中显示此列表 grails中已经有一些库可以让您实现

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

例如,在SearchProducts web服务操作的情况下,我需要输入搜索参数作为输入,以便构建搜索页面。操作将返回一个产品列表,因此我需要一个页面,该页面将在某种表格中显示此列表


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

您应该能够使用或插件。对于自动搭建,请在搭建模板中修改Controller.groovy模板,以便它自动生成所需的方法

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

例如,考虑位于微软的TrasaServer的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
导入com.terraserver\u usa.terraserver.*;
TerraServiceSoap sei=新TerraService().getTerraServiceSoap()
Place home=新地点(城市:'Boston',州:'MA',国家:'US')
def pt=sei.CONVERTSPLACETOLONLATPT(主)
println“$pt.lat,$pt.lon”
资产负债表(pt.lat-42.360000)<0.001
断言数学绝对值(pt.lon--71.05000)<0.001
如果您想访问许多web服务,请为它们生成存根。或者您可以使用动态代理

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