“级,不是这样升的...”——JBoss4.0.4GA下的app无法升级到Java6

升级,一个时髦而又敏感的话题,我用的firefox现在似乎天天在升级,升完级后发现以前装的插件不见了;刚刚把IE升级到7,今天想让firefox放半天假,在IE7上面好好冲上一把浪,打开一个网页,上面要播放FLASH,IE见状弹出一个错误,说FLASH插件有问题,整个IE关闭然后退出,真是令我好生郁闷——升级并非永远是好事一桩阿。据说Java6的VM优化效果明显,程序在上面那个跑得欢阿,于是有人提议把JBOSS4.0.4GA升级到Java6,一通改环境变量,把JAVA_HOME换成6(我的机器有3个jdk),构建,部署,启动,看着屏幕的字流畅的翻滚着,心里甚为欢欣鼓舞,启动正常,呵呵,mustang,俺来了。试了几个功能,正常,当测试一下登陆的web service时,出错了,控制台翻出了一堆exception:
java 代码
 
  1. 09:56:23,115 ERROR [SOAPFaultExceptionHelper] SOAP request exception  
  2. java.lang.UnsupportedOperationException: setProperty must be overridden by all s  
  3. ubclasses of SOAPMessage  
  4.         at javax.xml.soap.SOAPMessage.setProperty(SOAPMessage.java:424)  
  5.         at org.jboss.ws.soap.SOAPMessageImpl.<init>(SOAPMessageImpl.java:77)  
  6.         at org.jboss.ws.soap.MessageFactoryImpl.createMessageInternal(MessageFac  
  7. toryImpl.java:220)  
  8.         at org.jboss.ws.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl  
  9. .java:157)  
  10.         at org.jboss.ws.server.ServiceEndpoint.handleRequest(ServiceEndpoint.jav  
  11. a:215)  
  12.         at org.jboss.ws.server.ServiceEndpointServlet.doPost(ServiceEndpointServ  
  13. let.java:120)  
  14.         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)  

每次在console看到这些信息敏感的神经都会为之颤动一下,从日志分析来看,不是app的程序错误,而是jboss的web service底层出错了,经过一番分析,错误原因大抵如下:

Jboss的soap实现的是老的javax.xml.soap.SoapMessage接口,这个接口的setProperty方法在老版本是不需要override的,但是到了Java6,由于Java6的jdk本身自带soap包,而自带的这个包的SoapMessage接口对setProperty方法又强制其实现类要override自身,否则抛出异常:

java 代码
 
  1. public void setProperty(String property, Object value)  
  2.     throws SOAPException {  
  3.         throw new UnsupportedOperationException("setProperty must be overridden by all subclasses of SOAPMessage");  
  4. }  

那么余下的事情就很清楚了,在Java6下,JBoss的web service在执行时,加载的javax.xml.soap包是Java6的,而不是app中的包,因此发生了异常。

查了下Java6的发布日期,大概是06年的年底发布,而JBOSS最新的版本4.0.5G早在06年10月就正式推出,JBOSS不会傻到去支持Java6了,一查资料,在JBOSS的一个官方网页上终于看到了佐证: www.jboss.com/index.html, 这个帖子有个网友问JBOSS是不是支持Java6,JBoss的一个兄弟说没有这方面的行为,估计会在JBoss5的第二个版本才会考虑支持。白忙活了,也闹了个笑话,看来需要语重心长地说上一句——

“级,不是这样升的。”

你可能感兴趣的:(java,jboss,IE,SOAP,firefox)