xfire webservice

跟大家分享一下我对xfire的初步了解,我想可以帮助刚刚接触 开发借口的朋友们。

先说服务器端:我们正常写我们的接口、实现类,如何发布我们的接口:在src目录下新建META-INF包,在这个包下建立xfire包,在xfire包下新建一个services.xml,这个xml 可以从xfire 的事例包中找到。

这个xml 是配置我们即将发布的接口、实现类和webservices的名字,被外部访问到的那个名字。

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
    <service>

         <!-- 发布的webservices的名字-->
        <name>calculator</name>   

         <!--接口 -->
        <serviceClass>com.test.service.CalculatorService</serviceClass>

         <!-- 实现类,这里我其实可以不发布接口,但是实现类必须要有-->
        <implementationClass>com.test.service.impl.CalculatorServiceImpl</implementationClass>
    </service>   
</beans>


web.xml 中的配置如下,如果你才用到 是myeclipse自动生成的话,这个配置已经帮你做好了

    <servlet>
        <servlet-name>XFireServlet</servlet-name>
        <display-name>XFire Servlet</display-name>
        <servlet-class>
            org.codehaus.xfire.transport.http.XFireConfigurableServlet
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/servlet/XFireServlet/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>XFireServlet</servlet-name>
        <url-pattern>/services/* </url-pattern>
    </servlet-mapping>

这里面需要配置我们xfire用到的servlet,我用到的xfire 的版本是1.26,这样启动你的项目,通过地址连访问你的services路径机会看到你的发布的webservices接口的名字,点击进去就会看到schema式的xml。

---------------------------

再来介绍一下客户端:

客户端我们可以用命令也可以用ant 工具来为我们生成客户端的代码。我采用的是ant,这个是从网上拔下来的一个build.xml文件,为了省事。

build.xml要建在工程目录下,也就是和src平级:

<?xml version="1.0" encoding="UTF-8"?>

<project name="WebService" basedir="." default="gen-webservice">
    <!--引入的properties文件,里面配置了我的wsdl 的路径 -->
    <property file="build.properties"></property>

   <!-- xfire 的lib 路径 -->
    <path id="project-classpath">
        <fileset dir="${lib.dir}">
            <include name="**/*.jar"/>
        </fileset>
    </path>   
   
    <target name="gen-webservice">
        <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"

                       classpathref="project-classpath" />

         <!-- wsdl是我们要访问的服务端路径,package是我们的客户端代码生成的位置-->
        <wsgen outputDirectory="${src.dir}"
               wsdl="${wsdl.dir}" package="com.test.axis2" overwrite="true"/>
    </target>
</project>

build.properties 文件同样也要建在 工程根目录下,和src同级,内容如下:

src.dir = ${basedir}/src
lib.dir = D:/xfire/xfire-1.2.6/lib
wsdl.dir=http\://localhost/myxfire/services/calculator?wsdl
###wsdl.dir=http\://localhost/axis/services/myService?wsdl

这样右键ranas build.xml 文件 ,用ant 编译就可以了,

在生成的代码中有一些 根本就没有用,我们用到的是这个目录

那些没有用的可以删掉,随你的意思。

来让我们 编写客户的测试例子吧,

        calculatorClient client = new calculatorClient();
       
        calculatorPortType portType = client.getcalculatorHttpPort();
       
        System.out.println(portType.add(1, 3));

从这里我们看到我们用到的客户端生成的类 就两个,calculatorClient 、 calculatorPortType

第一个类 负责 与服务端的代码交互,传递接口信息,第二个类中封装了我们服务器端已经发布的接口的方法。

具体的代码事例 可以在附件中查看,可能我的表述 不够清楚,请见谅。

猜你喜欢

转载自kaobian.iteye.com/blog/1123994