一、xFire webservices是什么,起什么作用?
此处省略1000字;
我个人理解就是为了满足你的项目项目向外提供一些接口的工具。
这些接口在你的项目里都是有特定实现的,任何一个公网服务器只要通过你暴露的地址访问你这个接口就可以获取接口的实现(或者返回值,返回值类型后面再说)。如果去掉这句话任何一个公网服务器的话不就是同一个工程下调用接口获取接口的实现(spring的ioc吗),xfire就是干了这个事。
二、xFire webservices 的一个超简单案例
1、myeclipse建立web项目
XFire 1.2 Core libraries:核心jar,默认加载了spring的核心文件了的
XFire 1.2 HTTP Client libraries:客户端依赖jar
2、类似于添加struts、spring、hibernate的方式添加xfire支持,加载前面2个所需jar包即可、其它默认设置即可
3、上步完成之后,会添加2个jar文件,并且增加WebServices/services.xml,同时web.xml文件发生了变化,XFIRE基本框架已经搭建完毕
4、建立一个接口,和这个接口的实现分别是Say.java和SayImpl.java;
public interface Say {
public String SaySomeThing(String str);
}
public class SayImpl implements Say {
@Override
public String SaySomeThing(String str) {
System.out.println("服务器响应------------------------>"+str);
return str;
}
}
5、配置WebServices/services.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>sayService</name>
<namespace>http://localhost:2010/xFire</namespace>
<serviceClass>com.resoft.xf.Say</serviceClass>
<implementationClass>com.resoft.xf.impl.SayImpl</implementationClass>
</service>
</beans>
6、启动发布项目,启动tomcat
7、IE浏览器中输入"http://localhost:2010/xFire/services/sayService?wsdl"显示不报错但是你也看不懂的类似xml的东西,恭喜你xfire配置发布成功。
8、模拟客户端或者说是另外一个工程访问我暴露的接口
a)简单实现就是在本项目下建立一个带有main方法的类
public class Snippet {
public static void main(String args[]) {
//webservice的服务地址,常量最好,或者配置文件读取
String serviceURL = "http://localhost:2010/xFire/services/sayService";
//Service serviceModel = new ObjectServiceFactory().create(Say.class,null,"http://localhost:2010/xFire/services",null);
Service serviceModel = new ObjectServiceFactory().create(Say.class);
XFireProxyFactory serviceFactory = new XFireProxyFactory();
try{
Say service = (Say) serviceFactory.create(serviceModel, serviceURL);
Client client = Client.getInstance(service);
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "1");
String rt = service.SaySomeThing("2222");
System.out.println("服务器的返回值是:" + rt );
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
在tomcat启动的情况下运行这个main方法,控制台输出:服务器的返回值是:2222
这里简单模拟了访问webservices,main方法的运行一定要在tomcat启动的情况下,因为你是去访问http://localhost:2010/xFire/services/sayService
b)新建一个java或者web项目,导入XFire 1.2 HTTP Client libraries,将上面的代码拷贝过去,包括接口的java,在保证http://localhost:2010/xFire/services/sayService可以访问的情况下运行main方法也是一样的
三、xFire webservices 返回值类型,aegis配置
接口的返回值可以是简单类型、对象、集合
public interface UserInfo {
public User findUserInfosByUserID(String userUniqueID);
public String test();
public Collection findRoleInfosByUserID(String userUniqueID);
}
简单类型(String int......)不需要加载和修改配置
对象类型:public User findUserInfosByUserID(String userUniqueID);
public class User implements java.io.Serializable {
// Fields
private Integer userId;
private String loginName;
private String userPassword;
private Integer SOrder;
private String userCa;
private String userName;
private String userTel;
private String userEmail;
private String ZNote;
private String userCode;
private DicSystemAuth SDicSystemAuth;
private Set SGroupUsers = new HashSet(0);
private Set SUserDepts = new HashSet(0);
}
在User对象所在包内建立User.aegis.xml
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:my="http://localhost:2010/xFire">
<mapping name="my:User">
<property name="SGroupUsers" componentType="com.test.pojo.GroupUser"/>
<property name="SUserDepts" componentType="com.test.pojo.UserDept"/>
</mapping>
</mappings>