跟大家分享一下我对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
第一个类 负责 与服务端的代码交互,传递接口信息,第二个类中封装了我们服务器端已经发布的接口的方法。
具体的代码事例 可以在附件中查看,可能我的表述 不够清楚,请见谅。