XFire的使用小结
以前就开始看过一些XFire的资料,但是每一次都是按照书写的例子才能写出一些基本的例子,根本不理解,目前又做了一种发布webservice的方式 通过继承XFireServlet的方式,这种方式的好处就是简单 不需要配置services.xml文件?
??? 最简单的两个方法
<mappings>??? <mapping>
??? ??? <method name="findAllUser">
??? ??? ??? <return-type componentType="com.soap.User"/>
??? ??? </method>
??? </mapping>
</mappings>
相信大家一看就知道这个文件的意思了,但是为了帮助跟我一样的菜鸟? 我稍微解释下这个文件的意思:
第一行不用说,xml的固定写法:
<mappings>下的mapping映射的<method>就是我们接口中的方法,为什么要这个配置文件呢,因为XFire只支持八种基本类型,有时候我都忘了八种基本类型有char和short了(char byte short? int long double float boolean 呵呵 这里补充下,真是太菜了,要不说出去都丢人了),好了 也就是说不是这八种类型 不管是参数 和 返回值? XFire都不知道,就需要我们手动配置了
<method name="findAllUser"> //name属性 方法名为findAllUser?
?????????? //如果你的方法里面有参数也不是这八种基本类型 比如有个参数是 User user ,String str
????????? //配置
<parameter index="0" keyType="com.soap.User" componentType="com.soap.User" mappedName="user"/>?? //名称就知道了 我就 不解释了
? <parameter index="1" keyType="java.lang.String" componentType="java.lang.String" mappedName="str"/>
??? ??? ??? <return-type componentType="com.soap.User"/> //返回类型的List中封装的是什么 看来泛型真是个好东西,可惜为了兼容1.4只能忍了
</method>
好了不使用泛型的方式也行了 部署测试下。
可能还有需求我不想用web方式? 用j2se方式 能发布xfire吗,答案是肯定的,XFire为我们提供了一个XFireHttpServer ,在上面那个基础上我写了一个文件:
public class ServiceStarter {
???
??? XFireHttpServer server;
???
??? public void start() throws Exception {
??? ??? //创建service
??? ??? ObjectServiceFactory serviceFactory = new ObjectServiceFactory();
??? ??? Service endpoint = serviceFactory.create(UserManager.class);
??? ??? Service endpoint1 = serviceFactory.create(WebserviceInterface.class);
??? ???
??? ??? endpoint.setInvoker(new BeanInvoker(new UserManagerImpl()));
??? ??? endpoint1.setInvoker(new BeanInvoker(new Webservicehandler()));
??? ???
??? ??? //我这里注册了两个服务? 就是为了验证下看能否注册多个接口? 上面XFire的例子也是一样的
?????? //这里就必须手动建立xfire了
??? ??? XFire xfire = XFireFactory.newInstance().getXFire();
??? ??? xfire.getServiceRegistry().register(endpoint);
??? ??? xfire.getServiceRegistry().register(endpoint1);
??? ???
??? ??? //建立对象
??? ??? server = new XFireHttpServer();
?????? //设置监听端口
??? ??? server.setPort(8081);
???? //开启服务
??? ??? server.start();
??? }
??? public void stop() throws Exception {
??? ??? server.stop();
??? }
???
??? public static void main(String[] args) {
??? ??? ServiceStarter starter = new ServiceStarter();
??? ??? try {
??? ??? ??? starter.start();
??? ??? } catch (Exception e) {
??? ??? ??? e.printStackTrace();
??? ??? }
??? }
}
这里写的很简单,直接运行下这个方法?? 然后访问:
http://127.0.0.1:8081/UserManager?wsdl????? 这种情况估计不常见 知道下就可以了????
还有配置service.xml方式的例子 我就不介绍了,那种例子别人给的太多了 。。。。
?
?
?