创建服务器端:
1:加载的jar如下:
备注:
包的来源可以从这里去下载:http://xfire.codehaus.org/Download
解压后将lib里面所以的包以及xfire-all-1.2.6.jar导入到项目中去。
2:新建一个web project,然后创建一个接口类和一个实现该接口的类
结构图如下所示:
演示代码如下:
IBasic.java
package org.baicai.ws.basic;
public interface IBasic {
publicint saveNumber(int i,int j);
}
BasicImpl.java
package org.baicai.ws.basic;
publicclass BasicImpl implements IBasic {
@Override
publicint saveNumber(int i, int j) {
return i+j;
}
}
3:创建一个service.xml文件,并对其进行设置
3.1:在src目录下新建一个WETA-INF文件
3.2:在WETA-INF文件中再新建一个xfire文件夹
3.3:在xfire文件夹中创建一个service.xml文件
目录结构如下:
3.4:对services.xml文件进行配置
文件配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>TestService</name>
<namespace>http://org/baicai/ws/basic/IBasic</namespace>
<serviceClass>org.baicai.ws.basic.IBasic</serviceClass>
<implementationClass>org.baicai.ws.basic.BasicImpl</implementationClass>
</service>
</beans>
4:对web.xml文件进行配置
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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
5:服务器端部署
5.1:部署你的应用。
5.2:访问http://ip:port/projectName /services
5.3: 点击查看wsdl,能看到一串xml代码就表示服务程序有及部署通过
结果如下:
创建客户端:
1:将服务端的应用打包成jar:
打包方式可见:http://blog.csdn.net/christine_ruan/article/details/7491559
2:加载的jar:服务端应用所用的jar和新打的服务端jar包
3:新建一个客户端项目
4:测试服务端提供的接口
4.1:新建一个测试类
4.2:调用服务端提供的接口
4.3:测试是否调用成功
客户端项目结构如下:
测试类如下:
package org.baicai.ws.test;
import java.net.MalformedURLException;
import org.baicai.ws.basic.IBasic;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
publicclass MyClient {
publicstaticvoid main(String[] args) {
//参数说明:调用接口类,服务端项目名称(service.xml文件中的name),表空间
Service serviceModel=new ObjectServiceFactory().create (IBasic.class,"TestService","http://org/baicai/ws/basic/IBasic",null);
try {
//参数说明:服务对象,访问路径(http://ip:port/projectName/services/服务端项目名称)
IBasic service=(IBasic) new XFireProxyFactory().create (serviceModel, "http://192.168.104.35:8088/TestXFire/services/TestService");
System.out.println(service.saveNumber(2,3));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
附录:可能会遇到的问题以及解决方案
服务端:
1:java.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened because it does not exist
原因:services.xml文件不存在或者是services.xml文件存放路径错误。
解决方案:见创建服务端第三步
客户端:
1:404 错误。
Caused by: org.codehaus.xfire.XFireRuntimeException: Server returned error code = 404 for URI :……
原因:提供代理类的URL不正确
解决方案:给代理类正确的URL。这里是没有指定服务端名称……/services/ TestService
2:无法连接,导致信息不能发送。
Caused by: org.codehaus.xfire.XFireException: Couldn't send message.
Caused by: java.net.ConnectException: Connection refused: connect
原因:服务端没有部署
解决方案:部署服务端,也就是可以正常的访问http://ip:port/projectName /services 。