Webservice On Netty

Java的世界属于开源的世界,所谓开源的世界,只要你能想到的点子就一定有人实现了,没有你就自己造一个啊。

最近遇到了一个项目需求,技术选型选择了webservice,需要对外提供webservice接口。实现webserice功能可以有多种做法的,比如servlet + tomcat的方式,Java Main方法+嵌入jetty server的方式,本质上是XML/HTTP的原理(误?)。

项目组对外提供接口的功能已经选择了HTTP/Netty的方式,既然已经有HTTP的支持了,那么XML/HTTP On Netty或许是个不错的点子,这样我们不用再引入tomcat等服务应用了。

经过一番搜索,终于发现了netty-jax-ws这款组件,非常符合我们的需求,于是就采用了它完成了开发工作。

考虑到我们的对外接口需要进行分类,需要在原来的URL路径映射加上前缀。 这个开源组件原来的示例

mappings.put("/echoService", echoWebService);

key表示URL路径,value表示webservice的具体实现。 此时我们给它加上前缀

mappings.put("/honey/echoService", echoWebService);

比如之前的访问方式http://localhost:4040/echoService?wsdl,这回我们的访问路径应该是http://localhost:4040/honey/echoService?wsdl, 只不过这回意外的是服务给我们返回的是404的结果,看来我们的路径是不正确的,或者这个访问路径找不到实现的webservice(类似MVC框架中的Controller)。

这个问题的原因很快就排查出来的,我觉得可能自己就能解决,于是乎就fork了项目试着改动起来,参见这个提交commit1,至此暂告一段落了。

这部分功能代码就加入到了原来的项目中,只不过已经打包部署就发现,只要访问webservice功能http://localhost:4040/honey/echoService?wsdl, 就会报错:NoSuchMethodError, 然后是xx.jboss.netty.xx.ChannelFactory诸如此类的错误,我第一个感觉就是netty-jax-ws和原来的项目使用的Netty版本冲突了。

此时我请教我们组经验丰富的同事,遇到这种情况要不要迎难而上呢,还是另辟蹊径呢?(当然,当时肯定是口语化的表达)。

既然我前面已经改造过一回,不在乎再一次了,所以就有了这次commit2

以上算是我真正意义地上参与了一次开源贡献,我只是做了一点工作而已了。

-- EDIT -- 这次修改是为了支持通过代理的方式访问webservice,支持了HTTP Host请求头,修改参见commit3

文章属个人观点,与本人工作雇主无关!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏高性能服务器开发

C++ 高性能服务器网络框架设计细节(节选)

这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序。需要注意的是一般大型服务器,其复杂程度在于其业务,而不是在于其代码工程的基...

71140
来自专栏后端技术探索

Linux各种发行版,你会选吗

Linux最早由Linus Benedict Torvalds在1991年开始编写。在这之前,Richard Stallman创建了Free Software ...

21020
来自专栏FreeBuf

和黑客玩场游戏:利用CryptoWall跟踪器搞砸黑客小心思

前言: 在一次TED演讲上有个人演示了一个和419骗子交互的游戏——当你回复垃圾邮件后会发生什么,于是我也有了和黑客打游击战的想法。 于是2月10日我将所有关于...

272110
来自专栏携程技术中心

[技术分享]携程App的网络性能优化实践

在4月23日~25日举行的QCon全球软件开发大会(北京站)上,携程技术中心无线开发总监陈浩然分享了《移动开发网络性能优化实践》,总结了携程在App网络性能优化...

321100
来自专栏生信技能树

高通量数据下载还能这样操作?

本文属于转录组入门系列(RAN-seq基础入门传送门 http://www.biotrainee.com/thread-1750-1-1.html )第2部分内...

83250
来自专栏不止思考

数据库的这些性能优化,你做了吗?

我们可能会采取各种方式去优化,比如之前文章提到的缓存方案,SQL优化等等,除了这些方式以外,这里再分享几个针对数据库优化的常规手段:「数据读写分离」与「数据库S...

12320
来自专栏linux驱动个人学习

SELinux 是什么?

一、SELinux的历史 SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency...

41850
来自专栏CSDN技术头条

创建一个分布式网络爬虫的故事

编者按:作者通过创建和扩展自己的分布式爬虫,介绍了一系列工具和架构, 包括分布式体系结构、扩展、爬虫礼仪、安全、调试工具、Python 中的多任务处理等。以下为...

27680
来自专栏JAVA高级架构

浅谈 MySQL 集群高可用架构

新年快乐 前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库...

399150
来自专栏FreeBuf

Google Play商店漏洞:黑客可远程在你的安卓手机上安装恶意APP

安全研究人员发现Google Play商店中两个严重安全漏洞,可以允许攻击者远程在用户的安卓设备上安装并下载恶意APP(应用)。 Metasploit框架的技术...

20370

扫码关注云+社区

领取腾讯云代金券