Jetty+Xfire 嵌入式webService应用实践
1:使用场景:Mock公安网证件信息校验
2:Jetty嵌入式Server启动方式:由于Jetty9.x(需jdk7.x以上)以后Server启动方式有略微差异,所以分开说明:
2.1 Jetty9.x嵌入式Http-Server启动:
public void doRun() { Server server = new Server(); ServerConnector connector = new ServerConnector(server); connector.setPort(); connector.setIdleTimeout(); server.setConnectors(new Connector[]{connector}); server.setHandler(JettyServerHandlerFactory.getHandle()); try { server.start(); server.join(); logger.info("jetty server start!"); } catch (Exception e) { e.printStackTrace(); } }
2.2 Jetty9.x嵌入式Https-Server启动:
public void doRunHttps(int port,String path){ Server server = new Server(); HttpConfiguration https_config = new HttpConfiguration(); https_config.setSecureScheme("https"); https_config.setSecurePort(port); https_config.setOutputBufferSize(32768); https_config.addCustomizer(new SecureRequestCustomizer()); SslContextFactory sslContextFactory = new SslContextFactory(); sslContextFactory.setKeyStorePath(path); sslContextFactory.setKeyStorePassword("OBF:18jj18jj18jj18jj18jj18jj");//111111:18jj18jj18jj18jj18jj18jj sslContextFactory.setKeyManagerPassword("OBF:18jj18jj18jj18jj18jj18jj");//123456:19iy19j019j219j419j619j8 ServerConnector httpsConnector = new ServerConnector(server, new SslConnectionFactory(sslContextFactory,"http/1.1"), new HttpConnectionFactory(https_config)); httpsConnector.setPort(8443); httpsConnector.setIdleTimeout(500000); server.addConnector(httpsConnector); server.setHandler(JettyServerHandlerFactory.getWebHandle()); try { server.start(); server.join(); } catch (Exception e) { e.printStackTrace(); } }
2.3 Jetty8.x嵌入式Https-Server启动:
public void doRunHttps(int port,String path){ // create a jetty server and setup the SSL context Server server = new Server(); SslContextFactory sslContextFactory = new SslContextFactory(path); sslContextFactory.setKeyStorePassword("111111"); sslContextFactory.setTrustStore(path); sslContextFactory.setTrustStorePassword("111111"); sslContextFactory.setNeedClientAuth(false); // create a https connector SslSocketConnector connector = new SslSocketConnector(sslContextFactory); connector.setPort(port); // register the connector server.setConnectors(new Connector[] { connector }); server.setHandler(JettyServerHandlerFactory.getWebHandle()); try { server.start(); server.join(); } catch (Exception e) { e.printStackTrace(); } }
3:Xfir+Spring+Maven配置启动
3.1 Maven配置文件说明
<!--jetty配置--> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>${jetty-version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>${jetty-version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>${jetty-version}</version> </dependency> <!--gzip:jetty https 压缩传输--> <dependency> <groupId>net.sourceforge.pjl-comp-filter</groupId> <artifactId>pjl-comp-filter</artifactId> <version>1.7</version> </dependency> <!--xfire 依赖--> <dependency> <groupId>org.codehaus.xfire</groupId> <artifactId>xfire-all</artifactId> <version>1.2.6</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency>
3.2 spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 引入XFire预配置信息 --> <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" /> <!--定义访问的url--> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="urlMap"> <map> <entry key="/nciic.ws"> <ref bean="serviceInfoService" /> </entry> </map> </property> </bean> <!-- 使用XFire导出器 --> <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true"> <!-- 引用xfire.xml中定义的工厂 --> <property name="serviceFactory" ref="xfire.serviceFactory" /> <!-- 引用xfire.xml中的xfire实例 --> <property name="xfire" ref="xfire" /> </bean> <bean id="serviceInfoService" parent="baseWebService"> <!-- 业务服务bean --> <property name="serviceBean" ref="serviceInfo" /> <!-- 业务服务bean的窄接口类 --> <property name="serviceClass" value="com.wangyin.xfire.ServiceInfo" /> </bean> <bean id="serviceInfo" class="com.wangyin.xfire.impl.ServiceInfoImpl"></bean> </beans>
3.3:对应的java类:
public interface ServiceInfo { // 核查方法 public String nciicCheck(String inLicense, String inConditions); // 取得条件文件模板 public String nciicGetCondition(String inLicense) throws Exception; } @Component("serviceInfo") public class ServiceInfoImpl implements ServiceInfo { private final static Logger logger = LoggerFactory.getLogger(ServiceInfoImpl.class); @Override public String nciicCheck(String inLicense, String inConditions) { logger.info("do nciic check..."); //TODO return ""; } @Override public String nciicGetCondition(String inLicense) throws Exception { return ""; } }
4:补充jetty相关配置和说明:
4.1:KeyStore 获取说明:
第一步,命令行下使用jdk的keytool工具生成keystore
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
第二步,生成证书
keytool -export -alias jetty -file jetty.crt -keystore keystore
第三步,生成OBA文件,这里的yoursslpassword是第一步填写的密码
java -cp jetty-all-9.0.5.v20130815.jar org.eclipse.jetty.util.security.Password yoursslpassword
4.2:JettyServer工厂类
public class JettyServerHandlerFactory { public static Handler getHandle() { IPAccessHandler ipAccessHandler = getFireWallHandler(); ipAccessHandler.setHandler(getServletHandler()); HandlerCollection handlers = new HandlerCollection(); handlers.setHandlers(new Handler[]{ipAccessHandler, new DefaultHandler()}); return handlers; } public static Handler getWebHandle(){ WebAppContext webApp = new WebAppContext(); webApp.setContextPath("/mockcd"); webApp.setResourceBase("WebRoot"); webApp.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "true"); webApp.setInitParameter("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "true"); HandlerCollection handlers = new HandlerCollection(); handlers.setHandlers(new Handler[]{webApp,getHandle(), new DefaultHandler()}); return handlers; } private static IPAccessHandler getFireWallHandler() { IPAccessHandler ipHandler = new IPAccessHandler(); return ipHandler; } private static Handler getServletHandler() { ServletContextHandler root = new ServletContextHandler( ServletContextHandler.SESSIONS); root.setSessionHandler(new SessionHandler()); root.setContextPath("/"); root.setResourceBase("META-INF/xfire/services.xml"); ServletHolder holder = new ServletHolder(new XFireConfigurableServlet()); root.addServlet(holder, "/servlet/XFireServlet"); root.addServlet(holder, "/services/*"); root.addFilter(CompressingFilter.class,"/*",null); return root; } }
Jetty+Xfire 嵌入式webService应用实践的更多相关文章
- paip.myeclipse7 java webservice 最佳实践o228
paip.myeclipse7 java webservice 最佳实践o228 java的ws实现方案:jax-ws>>xfire ws的测试工具 webservice测试调用工具W ...
- Java使用Jetty实现嵌入式Web服务器及Servlet容器
Jetty是一个Java实现的开源的servlet容器,它既可以像Tomcat一样作为一个完整的Web服务器和Servlet容器,同时也可以嵌入在Java应用程序中,在Java程序中调用Jetty. ...
- Xfire实现webservice时,对象传递规则及解析简析
Xfire实现webservice,传递对象解析的话,要分两种情况处理:1.基本类型对象:2.复杂对象 其实,在客户端直接传递数组,如String[] int[]等这些无法通过配置具体类型来通知xfi ...
- XFire创建WebService实例应用
[转自] http://clq9761.iteye.com/blog/1261963 XFire创建WebService实例应用 XFire使得在JavaEE应用中发布Web服务变得轻而易举.和其他W ...
- Java调用WebService方法总结(6)--XFire调用WebService
XFire是codeHaus组织提供的一个WebService开源框架,目前已被Apache的CXF所取代,已很少有人用了,这里简单记录下其调用WebService使用方法.官网现已不提供下载,可以到 ...
- 从xfire谈WebService接口化编程
前段时间有博友在看我的博文<WebService入门案例>后,发邮件问我关于WebService 接口在java中的开发,以及在实际生产环境中的应用.想想自己入职也有一段时间了,似乎也该总 ...
- MyEclipse下一个XFire发展Webservice示例
最近的研究JAVA发展Webservice.网络发现几个热门选择AXIS.XFire.CFX(XFire下一代),打开前几天对这篇文章比较三种选择,他们已经有了一些概念. 样本,以确定自己的实践 在開 ...
- MyEclipse下XFire开发Webservice实例
XFire Java SOAP框架概述 (摘自:http://tech.it168.com/j/e/2006-10-28/200610281432707.shtml ) MyEclipse W ...
- Jetty 9嵌入式开发
官方网址:http://www.eclipse.org/jetty/ 下载地址:http://download.eclipse.org/jetty/stable-9/dist/ 文档网址:http:/ ...
随机推荐
- Android 复制文本内容到系统剪贴板的最简单实践
这个例子很简单,直接上截图和代码. 布局文件activity_copy.xml代码如下: <?xml version="1.0" encoding="utf-8&q ...
- springMVC异常&&重定向&&转发
SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...
- bitmap解码
#include <stdio.h> #include <stdlib.h> #include <string.h> #define BYTE unsigned c ...
- Django之Form组件
Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...
- xib和storyBoard哪些事之UIimage和按钮注意事项
1.uiimageView 和按钮比较特殊,可以只设置其x,y就可以. 2.可以设置其丝例,如1:1,或者当前图片的比例,这样保证不会变形,设置比例在自身上点击control拉个线,选择 3.在右侧就 ...
- 【原】Spark之机器学习(Python版)(一)——聚类
kmeans聚类相信大家都已经很熟悉了.在Python里我们用kmeans通常调用Sklearn包(当然自己写也很简单).那么在Spark里能不能也直接使用sklean包呢?目前来说直接使用有点困 ...
- 常用DOS命令
1.查询端口占用情况:netstat -aon |findstr "8080"; 查看端口进程号: 2.查看进程号信息: tasklist |findstr "999 ...
- caffe调试小结2
1.裁剪 crop size227,在训练时候采用随机裁剪,在测试时候只裁剪中间部分
- 递推 hdu 1330
http://www.cnblogs.com/rainydays/archive/2013/01/16/2862235.html 看样例的答案 #include<stdio.h> #inc ...
- coocs2d-x 分辨率
config.lua: CC_DESIGN_RESOLUTION = { width = , height = , autoscale = "FIXED_HEIGHT", call ...