研究xfire也差不多有一个星期了,之前公司让我搞工作流,因为客户提出了一些新的需求,而且项目时间赶的很紧.所以工作流也是只研究了一个星期便草草的集成到项目中去了,虽然能够实现功能需求,但总感觉还有很多不妥之处,因为只是研究了一个星期,却又不知不妥之处在哪儿.
1.在使用xfire之前,首先我们应该去[url=http://xfire.codehaus.org/Download]xfire官网[/url]去下载xfire(我用的是xfire1.2.6,现在xfire已经改为CXF).
2.创建一个web项目,加入依赖包
[quote]
* Xfire_HOME/xfire-all-1.2.6.jar
* Xfire_HOME/lib/*.jar
[/quote]
3.编写service
4.在你项目的src目录下创建META-INF/xfire目录,并在该目录下创建一个services.xml文件
5.修改web.xml文件
6.发布并启动服务器.访问http://localhost/xfire/services/HelloService?wsdl
止此基于xfire的webservice服务器端已经写好了.
-------------------------------NB分割先--------------------------------------
现在开始写一个客户端并且调用我们上面已经写好的webservice
这里先介绍两种方式:
1.通过动态的方式来调用
2.通过创建客户端代码来访问webservice
首先创建一个java项目,并把HelloService.wsdl文件拷贝到项目的根目录下
并在项目的根目录下创建build.xml文件
注意:在你项目的上一级目录下创建一个lib目录,并把上面提到的jar文件全部拷到该目录下.
运行ant并刷性整个项目,便会生成客户端代码.然后我们要自己编写客户端调用webservice
1.在使用xfire之前,首先我们应该去[url=http://xfire.codehaus.org/Download]xfire官网[/url]去下载xfire(我用的是xfire1.2.6,现在xfire已经改为CXF).
2.创建一个web项目,加入依赖包
[quote]
* Xfire_HOME/xfire-all-1.2.6.jar
* Xfire_HOME/lib/*.jar
[/quote]
3.编写service
package com.zzg.service;
public interface HelloService {
public String hello(String name);
}
package com.zzg.service;
public class HelloServiceImpl implements HelloService {
public String hello(String name) {
if (null == name) {
return "hello Guest";
}
return "Hello:" + name;
}
}
4.在你项目的src目录下创建META-INF/xfire目录,并在该目录下创建一个services.xml文件
<beans>
<service xmlns="http://xfire.codehaus.org/config/1.0">
<name>HelloService</name>
<namespace>
http://service.zzg.com/HelloService
</namespace>
<serviceClass>
com.zzg.service.HelloService
</serviceClass>
<implementationClass>
com.zzg.service.HelloServiceImpl
</implementationClass>
</service>
</beans>
5.修改web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
6.发布并启动服务器.访问http://localhost/xfire/services/HelloService?wsdl
止此基于xfire的webservice服务器端已经写好了.
-------------------------------NB分割先--------------------------------------
现在开始写一个客户端并且调用我们上面已经写好的webservice
这里先介绍两种方式:
1.通过动态的方式来调用
Client client =new Client(new URL("http://localhost/xfire/services/HelloService?wsdl"));
Object[] results=client.invoke("hello", new Object[]{"zzg"});
System.out.println((String)results[0]);
2.通过创建客户端代码来访问webservice
首先创建一个java项目,并把HelloService.wsdl文件拷贝到项目的根目录下
并在项目的根目录下创建build.xml文件
<?xml version="1.0" encoding="gb2312"?>
<project name="xfire" default="help" basedir=".">
<!-- =================================================================== -->
<!-- 设置属性 -->
<!-- =================================================================== -->
<property name="optimize" value="false" />
<property name="debug" value="on" />
<property name="deprecation" value="false" />
<property name="build.lib" value="${basedir}/../lib" />
<property name="sources" value="${basedir}/src" />
<property name="build.classes" value="${basedir}/bin" />
<!-- =================================================================== -->
<!-- 设置类路径 -->
<!-- =================================================================== -->
<path id="classpath">
<pathelement location="${build.classes}" />
<fileset dir="${build.lib}">
<include name="*.jar" />
</fileset>
</path>
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="classpath" />
<!-- ================================================ -->
<!-- 帮助 -->
<!-- ================================================ -->
<target name="help" description="显示帮助信息">
<echo message="target 描述" />
<echo message="-----------------------------------------------------------------" />
<echo message="compile 编译 " />
<echo message="create_code 创建代码" />
</target>
<!-- =============================================== -->
<!-- 编译代码 -->
<!-- =============================================== -->
<target name="compile" description="编译代码">
<echo>编译程序代码</echo>
<javac srcdir="${sources}" destdir="${build.classes}" classpathref="classpath" debug="${debug}" optimize="${optimize}" deprecation="${deprecation}" />
</target>
<!-- =============================================== -->
<!-- 创建客户端代码 -->
<!-- =============================================== -->
<target name="create_code" description="创建代码">
<echo>创建代码</echo>
<wsgen outputDirectory="${sources}" wsdl="${basedir}/HelloService.wsdl" package="com.zzg.service" overwrite="true" />
</target>
</project>
注意:在你项目的上一级目录下创建一个lib目录,并把上面提到的jar文件全部拷到该目录下.
运行ant并刷性整个项目,便会生成客户端代码.然后我们要自己编写客户端调用webservice
public static void main(String[] args) {
HelloServiceClient client = new HelloServiceClient();
HelloServicePortType helloService = client.getHelloServiceHttpPort();
// 调用服务
String result = helloService.hello("zzg");
System.out.println("结果:" + result);
}