9.1WebService-Xfire

Xfire在2007年就不在更新了,最后版本是1.2.6,为什么不更新了呢,因为被CXF合并了,CXF里面的X就是指Xfire。

这个WebService发布和调用框架相对简单一些,主要原因就是依赖的jar包不多。在企业开发中,涉及的jar包会非常非常多,如果WebService的依赖jar包也很多,两个混合到一起,就会产生致命的影响,jar包冲突,这是多数人的噩梦,经常搞几天也搞不定。

现在有一些项目如果必须用到WebService,我也是推荐xfire,主要原因就是简单无影响。

下面来看一下具体实现

添加依赖pom.xml

 
     org.codehaus.xfire
     xfire-all
     1.2.6

这里面简单引入xfire-all,实际应用中,应该把不相关的都去掉,比如xfire-spring等等。

配置web.xml


    
        XFireServlet
        org.codehaus.xfire.transport.http.XFireConfigurableServlet
    
    
        XFireServlet
        /servlet/XFireServlet/*
    
    
        XFireServlet
        /services/*
    

xfire的服务发布本质上还是一个servlet,在服务发布后,通过http://localhost:8080/service可以查看服务的发布情况。

定义服务配置META-INF/xfire/services.xml


    
        FirstService
        http://smallnest.googlepages.com/FirstService
        com.critc.xfire.FirstService
        com.critc.xfire.FirstServiceImpl
    

这个文件的路径一定要准确。

这是一个服务的配置,里面需要定义namenamespace,对应的class,即接口类 serviceClass,接口的具体实现implementationClass

服务接口定义FirstService

public interface FirstService {
    public String sayHello(String name);
}

服务接口实现FirstServiceImpl

public class FirstServiceImpl implements FirstService {
    public String sayHello(String name) {
        return "hello:" + name;
    }
}

上面都比较简单。

启动整个工程,在地址栏输入:http://localhost:8080/services

9.1WebService-Xfire_第1张图片
查看service定义

点击services链接:

9.1WebService-Xfire_第2张图片
查看对应的wsdl

客户端调用代码

public class TestXfire {

    public static void main(String[] args) {
        try {
            Client client = new Client(new URL("http://localhost:8080/services/FirstService?wsdl"));
            Object[] results = client.invoke("sayHello", new Object[] { "张三" });
            System.out.println((String) results[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端调用还是非常容易的,定义url,指定方法名sayHello,指定参数,传入Object[]数组,通过invoke调用就可以获取返回值了。

当然xfire的功能远不止于此,比如和spring整合,调用的权限校验,客户端通过逆向工程生成对应的方法和类型等等。但是简单的基于xfire的WebService的发布及调用就这么多。

源码下载

本工程详细源码

你可能感兴趣的:(9.1WebService-Xfire)