JDK6已经内置了webservice支持,使用JDK6开发webservice是一件很方便的事。很不幸的是,由于IDE的支持axis成为使用最广的java webservice库。而且由于的部分应用使用了不兼容的RPC/encoded模式,使得你还不得不用axis。
通常情况下用axis开发webservice服务端,需要挂在tomcat等web服务器下,以servlet的方式提供服务。但有些时候我会想将接口部分以一个单独应用程序的方式进行发布,另外再多带个web服务器似乎有些笨拙。
使用嵌入式的jetty是一个比较简单的解决方式。其中需要注意的是,一定要设置Context的ResourceBase,不然是无法找到webservice配置文件的。我当初就是想当然的认为jetty会默认在当前路径下查找配置文件,导致一直无法正确发布服务。
protected static void runJetty() throws Exception {
Server server = new Server();
SocketConnector connector = new SocketConnector();
connector.setMaxIdleTime(30000);
connector.setPort(8000);//jetty的端口
server.addConnector(connector);
ServletHolder axisServletholder = new ServletHolder(new AxisServlet());
ServletHolder axisAdminServletholder = new ServletHolder(new AdminServlet());
Context root = new Context(server, "/", Context.SESSIONS);
root.setResourceBase("./web/");//WEB资源目录,./web/WEB-INF/server-config.wsdd
root.addServlet(axisServletholder, "/servlet/AxisServlet");
root.addServlet(axisServletholder, "/ws/*");//设置webservice的发布目录
root.addServlet(axisServletholder, "*.jws");
root.addServlet(axisAdminServletholder, "/servlet/AdminServlet");
server.start();
}