Grails+Xfire 搭建Web Service环境

Posted zhangjianying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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脚本中也就能这么调用了.

 

 

以上是关于Grails+Xfire 搭建Web Service环境的主要内容,如果未能解决你的问题,请参考以下文章

XFire WebService demo

java程序调用xfire发布的webService服务

JDK1.7+Tomcat7+Eclipse+XFire开发WebService

XFire构建web service客户端的五种方式

使用XFire方式发布WebService实例说明

使用XFire方式发布WebService实例说明