当前位置: 代码迷 >> Web前端 >> Grails+Xfire 筹建Web Service环境
  详细解决方案

Grails+Xfire 筹建Web Service环境

热度:863   发布时间:2012-11-09 10:18:48.0
Grails+Xfire 搭建Web Service环境

Grails?加上Xfire plugin?搭建web Service?环境.总体上来说还是比较方便的.没有直接使用j2ee+xfire那么多的繁琐xml配置.Grails再一次体现了敏捷开发的便捷性.

????首先要给自己的Grails Application?应用工程装上Xfire?的插件.可以选择先下载zip包再安装也可以直接由网络安装.

Type this command in your Grail application directory

//在你的应用程序目录下执行

$> grails install-plugin xfire

or if you have a plugin archive locally.

//如果插件已经下载到了本地,就用这个方法

$> grails install-plugin /path/to/grails-xfire-0.7.3.zip

?

?

?

OK只要正确执行完上面的方法,那么在你的Grails Applications目录下面就会多出一个Plugins?目录.

如图:

?

?

然后到?%GRAILS_APPLICATION%/conf目录下面去修改一下UrlMappings.groovy文件,记得一定要改.

static mappings = {

??????????"/$controller/$action?/$id?"{

??????????????constraints {

????????????????????????controller(matches:/.*[^(services)].*/)

??????????????????}

??????????}

}

//红色字体为新添加的部分

?

????接下来就是直接写属于你自己需要的业务服务类了,这里我假设我的服务类名为Test,CMD模式下输入:

%GRAILS_HOME%$>?grails create-service Test

?

????那么在%GRAILS_APPLICATION%/grails-app\services?目录下就会生成一个TestService.groovy?文件,这就是我们要的服务文件.?我们要做的就是修改这个文件变成我们的业务逻辑服务即可.加上Groovy语法特有的闭类性质.Spring的注入(POGO)特性,这个服务类将会显得很强大嘿嘿

这里我先做个测试:?文件内容如下

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebResult;

import javax.jws.WebService;

?

@WebService(name="Test",serviceName="Test",

??targetNamespace="http://www.oksonic.cn/xfire")

class TestService {

?

static expose=['xfire']

?

String otherMethod2(@WebParam String name)

{

????return "Hello! ${name}";

}

?

?

@WebMethod

@WebResult

int add(@WebParam int intOne,@WebParam int intTwo)

{

????return intOne+intTwo;

}

?

?

}

?

这里定义了2个方法otherMethod2?根据用户传入的姓名对用户说hello,以及一个

简单的加法?add

?

好了!当你写完这个方法的时候,那么这个服务也就写完了.接着就是直接启动服务来验证了.CMD中输入

%GRAILS_HOME%$>?grails run-app

等待?1?分钟没办法,这是我目前觉得Grails??Ruby?相比唯一不足的地方,就是启动太慢,但是想想,Grails在启动的时候把文件直接编译成java class ,Ruby却没有.

或许编译时的等待正式为了换取运行时的效率吧.

?

?

OK!打开浏览器查看Test服务的wsdl,如过你能看到,就证明你已经成功一半了.IE看吧,我试过用K-Meleon查看居然什么都看不到~.

http://localhost:8080/%Grails_Application%/services/Test?wsdl

如图:

?

?

?

?

,这样环境就搭建好了,是不是很简单?如果你还觉得繁琐,你可以去查查一半xfire+java web程序的搭建方案.保管光xml配置你就看的不爽了.

?

?

环境达好了,那服务怎么访问呢? MS?为他们的程序员准备的VS可以很方便的根据wsdl自动生成访问类.java fans欧斯搞列(怎么办呢).

我想到了Apache,翻倒一番终于看到了Axis这个webService?服务器,这是一个服务器我晕,居然还可以在运行的时候动态替换服务类文件.呵呵~可惜的是这只是一个单独的服务器,而不同与Grails是一个框架解决方案. Axis?可以根据?wsdl?自动生成调用webServicejava类文件.

我们可以先到Axis/lib目录下面,CMD执行

java -classpath ".;commons-logging-1.0.4.jar;axis.jar;commons-discovery-0.2.jar;jaxrpc.jar;wsdl4j-1.5.1.jar; " org.apache.axis.wsdl.WSDL2Java -o "abcdefg"?http://localhost:8080/DerbyDemo/services/Test?wsdl

?

这些都是在一行里面 千万不要分行要不会报错的

-o?指定输出目录

后面跟上服务地址的?wsdl地址即可

?

这个在Axis/lib目录下就会多出abcdefg?目录?,下面变是为这个Test服务生成的调用java类文件.我们只要把这个类文件直接复制到java IDE,

然后写一个简单的测试类:

??public static void main(String[] args) {

????????try {

????????????Test_Service adcInterface = new Test_ServiceLocator();

????????????Test_PortType test = adcInterface.getTestHttpPort();

?

????????????//以下就要调用的方法

????????????System.out.println(test.otherMethod2("asd"));

????????????System.out.println(test.add(33,11));

?

????????} catch (Exception e) {

????????????e.printStackTrace();

????????}

?

OK就会看到结果了.当然把这些类直接放到Grails中的?%Grails_Application%\src\java目录下,那么在Groovy脚本中也就能这么调用了.

  相关解决方案