2009-05-29 31 views
0

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

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

Grails中已经有一些库让你实现这个功能。如果不是,你会如何去创建一个?

回答

0

你应该可以使用XFireCXF插件。对于自动脚手架,请在脚手架模板中修改您的Controller.groovy模板,以便自动生成您需要的方法。

1

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

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

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

它将所有编译后的存根放到src目录中。然后,如果你想查阅了大量的Web服务,为所有他们的存根,你可以写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 

。或者您可以使用动态代理。

尽管如此,底线是让Java能够完成它已经做得很好的事情,并使用Groovy来让您的生活更轻松。

+0

非常全面的答案。 – 2012-06-15 09:56:28