一个BOM引起的Hessian血案

简介:

6月11日下午项目上线一个新的功能之后,12日上午发现,与外部服务通过Hessian交互的功能失效。一边与兄弟部门的同学一起查找一边进行代码回滚(也是我到公司一年以来第一次代码回滚)。

发现调用Hessian时候会报错

1
2
3
4
5
6
7
8
9
10
[ 12 -Jun- 2015  06 : 47 : 44  UTC] PHP Fatal error:  Uncaught exception  'HessianError'  with message  'Hessian Parser, Malformed reply: expected r'  in /home/users/ouerqiang/fbiz/baserock/Hessian/Protocol.php: 169
     Stack trace:
     # 0  /home/users/ouerqiang/fbiz/baserock/Hessian/Client.php( 280 ): HessianParser->parseReply()
     # 1  /home/users/ouerqiang/fbiz/baserock/Hessian/Filter.php( 160 ): HessianProxy->executeCall( 'report' , Array,  1766142942 )
     # 2  /home/users/ouerqiang/fbiz/baserock/Hessian/Filter.php( 73 ): ProxyFilter->execute(Object(HessianProxy), Object(FilterChain))
     # 3  /home/users/ouerqiang/fbiz/baserock/Hessian/Filter.php( 193 ): FilterChain->doFilter(Object(HessianProxy))
     # 4  /home/users/ouerqiang/fbiz/baserock/Hessian/Filter.php( 73 ): PHPErrorReportingFilter->execute(Object(HessianProxy), Object(FilterChain))
     # 5  /home/users/ouerqiang/fbiz/baserock/Hessian/Client.php( 246 ): FilterChain->doFilter(Object(HessianProxy))
     # 6  /home/users/ouerqiang/fbiz/baserock/Hessian/Client.php( 395 ): HessianProxy->call( 'report' , Array)
     # 7  /home/users/ouerqiang/fbiz/modules/common/scripts/budget.p in /home/users/ouerqiang/fbiz/baserock/Hessian/Protocol.php on line  169


我就把开发环境的代码也回滚到之前的分支,使用git的好处就在这里了!强烈建议没有使用的同学也要切换到git。

切换分支后发现没有报错的情况。此时基本可以确定是新功能的代码出现问题!

所以我将只要修改的代码就替换一下再执行,就这样试了几个文件发现其中一个文件只要替换了就出现

Hessian报错。

终于找到罪魁祸首了,但是我认真的看了代码,就是没有发现错误的代码。这就诡异了!

就在此时想起我写这个代码时候使用过文本编辑器处理过编码,使用文本一打开发现文件头中包含了BOM魔术头!

好伤心!就是因为这个问题导致的。之后续的处理中发现

还有一个现象值得注意:如果PHP文件头<?php 不顶格也会报错的。

spacer.gif

本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/1662091


相关文章
|
5月前
hutool-bom
hutool-bom
89 0
|
9月前
|
JavaScript 前端开发 网络协议
【BOM】
【BOM】
44 0
|
11月前
|
XML JavaScript 数据格式
我理解的BOM
BOM(Browser ObjectModel) 是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象。
|
JavaScript 前端开发 UED
BOM常见方法
BOM常见的方法 window对象常见的事件 窗口加载事件onload
|
SQL 存储 Java
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
|
Dubbo 算法 安全
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
|
JavaScript 前端开发 Go
BOM 总结介绍
BOM 总结介绍
156 0
BOM 总结介绍
|
JavaScript Java
[java]处理utf-8 bom字符串的bom头
char[] bomChar = "带bom的字符串".toCharArray();//转为char数组 char[] noneBomchar = new char[bomChar.
2491 0
|
XML Java 数据格式