囧事

前几天写了段 code 不知道能不能 work,于是希望写个简单的程序验证一下这个东西是否符合自己的预期,于是撇开了公司的 build system,自己用 mvn 创建了个简单的 java 程序来验证一下。程序很简单以为 10min 就搞完了,然后就开始运行一下,结果抛出了个诡异的异常,问题是抛出异常的是 spring,抱怨的是我提供的配置文件,当然这是一个 XML,那我理所当然的认为很可能是我的 XML 文件里面某些地方写错了,跑到 emacs 里面看了看,说这是个 valid 的 XML,嗯,那说明语法是对的,那就检查下语义有没有问题了。

查了会表示不知道哪里错了,于是去看出错时抛出的异常是啥:

121  [main] WARN  org.springframework.beans.factory.xml.XmlBeanDefinitionReader  - Ignored XML validation warning
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 
'http://www.springframework.org/schema/beans/spring-beans-3.1.xsd', because 
  1) could not find the document; 
  2) the document could not be read; 
  3) the root element of the document is not <xsd:schema>.

后面还有很多,但是肯定是这个引起的,因为后面抱怨的是 beans 没定义。我很好奇这个文件怎么会找不到呢,前面的程序里面也是这么写的呀!于是在浏览器里面打开了以上链接,发现那是个 XML,而且也是 xsd:schema 作为 root 的。那也就是说列出的三个原因都不可能咯?于是我就纳闷了,想看看是不是我复制粘贴这些 XML 的时候引入了非法字符还是啥(有一次发生过,去掉了那些字符就 work 了),于是 grep 了半天也没发现什么。后来还换了台机器实验类似的 code,整个 XML 都重写了一遍,还是类似的错误。

网上搜到的说法也是各不一样,但是似乎都不是我的 case,这就郁闷了我几天了。今天到公司收到封信,说某些 java 的 vulnerability 导致 IT 做了一些限制,大概是说 Java 程序不能访问某些网页还是什么,当时我觉得比较神奇的是有那么严重吗,玩意谁用 Java 写的 browser 上网那还不气死了,而且似乎做不到 ban 掉 Java 着一种语言的网络访问吧,总觉得自己理解的不是很清楚,也觉得那信里面似乎也没说清楚,所以没太当回事。不过这突然给了我一个提示,也许 Java 程序真的在访问网络下载那个 xsd 而不成呢…

那有没有什么别的方式获得这个 xsd 呢,这次搜索看来是找对了地方,spring 有一个 spring.schema 存放在 META-INF 里面,里面是一对一对的对应关系,将前面那个 URL 转换成 classpath 里面对应的路径,不过遗憾的是不知道为啥这个 beans 却没有放在里面,一个 quick fix 是将 URL 直接换成 classpath:org/springframework/… 再运行程序,居然过了!

那就是说当 spring 去解析 XML 的时候可能真的访问了网络而这个链接被公司的 IT 给 ban 了。这实在是一些 ridiculous 的 IT,这个是他们先 ban 掉几天之后才发出来的吧…

另,前面一个同事叫说怎么怎么 log 不知道跑到哪里去了,过了半个多小时突然说前面用了某个模板,它的例子里面有个 beer 数据库,不知道怎么回事写到那个数据库里面去了。庆幸一下我拿到这个模板第一件事就是把这些东西全部删掉了。这也告诉我们,不要依赖模板,这个观点原先在 TeX 版上提到过很多次,虽然看起来用模板很快,一开始什么都 setup 好了一样,自己就随便填个空就 ok,其实对这个东西了解的太少,以至于

  • 出了问题你不知道是谁引起的
  • 某些看起来那么用的东西其实不是那么用的,等到你要找到你要的东西的时候就哭了
  • 妨碍了你正常学习某个事情的逻辑

模板充其量是一个帮助新手学习的工具,新手希望填个空跳过学习而直接掌握某些东西是荒唐的。

==================

写完本文后半小时,另一个同事听说了前面那个同事的故事发现自己也还保留着那个 beer 数据库,囧~

——————
Now these are the generations of Ishmael, Abraham’s son, whom Hagar the Egyptian, Sarah’s handmaid, bore to Abraham:

Advertisements
囧事

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s