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:/ ...
随机推荐
- java环境变量配置
1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0 ...
- 《Note --- Unreal 4 --- PersonaHowToMovement》
https://docs.unrealengine.com/latest/CHN/Gameplay/HowTo/CharacterMovement/index.html 这里的demo是按照一些per ...
- Lambert(朗伯)光照模型 和Half Lambert的区别
Lambert-它不包括任何任何镜面属性,对粗糙物体来说,这项属性是非常有用的,它不会反射出周围的环境.Lambert材质可以是透明的,在光线追踪渲染中发生折射,但是如果没有镜面属性,该类型就不会发生 ...
- 单核 -512M内存-2000并发正常使用
自从自己创业以后就很少写博客了,也许是太忙了.也许是无法静下心好好研究一个东西.今天把我们做的后台做了下压力测试.结果还可以,尤其是对于我这种从java转过来土人. 4年前看到一篇抨击java的文章 ...
- Dubbo_异常_Service启动时默认将方法注册到内网IP
一.背景 一般Dubbo服务都是通过内网调用,Dubbo服务启动时默认会将服务注册到内网IP,消费端就无法从外网访问. 二.解决过程 1.Linux的hosts中设置外网IP a) 通过hostnam ...
- 聊聊 Apache 开源协议
摘要 用一句话概括 Apache License 就是,你可以用这代码,但是如果开源你必须保留我写的声明:你可以改我的代码,但是如果开源你必须写清楚你改了哪些:你可以加新的协议要求,但不能与我所 公布 ...
- format not a string literal and no format arguments
今天cocos2d-x打包 android的时候报错:format not a string literal and no format arguments 报错点是:__String::create ...
- px和em,rem的区别
1.px是你屏幕设备物理上能显示出的最小的一个点,这个点不是固定宽度的,不同设备上点的长宽.比例有可能会不同.假设:你现在用的显示器上1px宽=1毫米,但我用的显示器1px宽=两毫米,那么你定义一个d ...
- [bigdata] 使用Redis队列来实现与机器无关的Job提交与执行 (python实现)
用例场景: 定时从远程多台机器上下载文件存入HDFS中.一开始采用shell 一对一的方式实现,但对于由于网络或者其他原因造成下载失败的任务无法进行重试,且如果某台agent机器down机,将导致它对 ...
- Theano Inplace
Theano Inplace inplace Computation computation that destroy their inputs as a side-effect. Example i ...