/ 闲敲棋子 / Openfire发布webservice接口

Openfire发布webservice接口

2014-05-15 posted in [学习笔记]

之前碰到有人问怎么把openfire的接口发布成webservice,由于我们项目中采用的是Dubbo形式,还真就没实际操作过。不过估计原理差不多,得空研究一下。

首先还是注册插件:XMPPServer类里的loadModules方法中加入

//加载数据集成模块。该模块为外部扩展模块,可能会不存在。
loadModule("com.dylanvivi.openfire.common.DylanModule");

新建xmpp-plugin项目,通过jetty搭建webservice服务,参考文章

DylanModule类核心代码:

@Override
public void start() {
	XFire xfire = XFireFactory.newInstance().getXFire();
	ObjectServiceFactory serviceFactory = new ObjectServiceFactory(xfire.getTransportManager());
	Service service = serviceFactory.create(OpenfireWebService.class);
	//设置发布接口的实现类
	service.setProperty(ObjectInvoker.SERVICE_IMPL_CLASS, OpenfireWebServiceImpl.class);
	//接口注入到webservice中,发布该接口
	xfire.getServiceRegistry().register(service);
	//新建服务器
	XFireHttpServer server = new XFireHttpServer();
	//设置监听端口
	server.setPort(8190);
	try {
		server.start();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

运行结果:

image

openfire启动…init plugin…

image

webservice服务

image

服务发布成功

测试代码

public class TestXFire {
  public static void main(String[] args) {
  	TestXFire tMain = new TestXFire();
  	tMain.testWebservice();
  }
  public void testWebservice() {
  	Client client;
  	try {
  		client = new Client(new URL("http://127.0.0.1:8190/OpenfireWebService?wsdl"));
  		Object[] hello = client.invoke("sayHello", new Object[] { new String("dylan") });
  		System.out.println(hello[0]);
  	} catch (MalformedURLException e) {
  		e.printStackTrace();
  	} catch (Exception e) {
  		e.printStackTrace();
  	}
  }
}

输出:

image