JDK6已经内置了webservice支持,使用JDK6开发webservice是一件很方便的事。很不幸的是,由于IDE的支持axis成为使用最广的java webservice库。而且由于的部分应用使用了不兼容的RPC/encoded模式,使得你还不得不用axis。
通常情况下用axis开发webservice服务端,需要挂在tomcat等web服务器下,以servlet的方式提供服务。但有些时候我会想将接口部分以一个单独应用程序的方式进行发布,另外再多带个web服务器似乎有些笨拙。
使用嵌入式的jetty是一个比较简单的解决方式。其中需要注意的是,一定要设置Context的ResourceBase,不然是无法找到webservice配置文件的。我当初就是想当然的认为jetty会默认在当前路径下查找配置文件,导致一直无法正确发布服务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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(); } |