升级,一个时髦而又敏感的话题,我用的firefox现在似乎天天在升级,升完级后发现以前装的插件不见了;刚刚把IE升级到7,今天想让firefox放半天假,在IE7上面好好冲上一把浪,打开一个网页,上面要播放FLASH,IE见状弹出一个错误,说FLASH插件有问题,整个IE关闭然后退出,真是令我好生郁闷——升级并非永远是好事一桩阿。据说Java6的VM优化效果明显,程序在上面那个跑得欢阿,于是有人提议把JBOSS4.0.4GA升级到Java6,一通改环境变量,把JAVA_HOME换成6(我的机器有3个jdk),构建,部署,启动,看着屏幕的字流畅的翻滚着,心里甚为欢欣鼓舞,启动正常,呵呵,mustang,俺来了。试了几个功能,正常,当测试一下登陆的web service时,出错了,控制台翻出了一堆exception:
每次在console看到这些信息敏感的神经都会为之颤动一下,从日志分析来看,不是app的程序错误,而是jboss的web service底层出错了,经过一番分析,错误原因大抵如下:
Jboss的soap实现的是老的javax.xml.soap.SoapMessage接口,这个接口的setProperty方法在老版本是不需要override的,但是到了Java6,由于Java6的jdk本身自带soap包,而自带的这个包的SoapMessage接口对setProperty方法又强制其实现类要override自身,否则抛出异常:
那么余下的事情就很清楚了,在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 代码
- 09:56:23,115 ERROR [SOAPFaultExceptionHelper] SOAP request exception
- java.lang.UnsupportedOperationException: setProperty must be overridden by all s
- ubclasses of SOAPMessage
- at javax.xml.soap.SOAPMessage.setProperty(SOAPMessage.java:424)
- at org.jboss.ws.soap.SOAPMessageImpl.<init>(SOAPMessageImpl.java:77)
- at org.jboss.ws.soap.MessageFactoryImpl.createMessageInternal(MessageFac
- toryImpl.java:220)
- at org.jboss.ws.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl
- .java:157)
- at org.jboss.ws.server.ServiceEndpoint.handleRequest(ServiceEndpoint.jav
- a:215)
- at org.jboss.ws.server.ServiceEndpointServlet.doPost(ServiceEndpointServ
- let.java:120)
- 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 代码
- public void setProperty(String property, Object value)
- throws SOAPException {
- throw new UnsupportedOperationException("setProperty must be overridden by all subclasses of SOAPMessage");
- }
那么余下的事情就很清楚了,在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的第二个版本才会考虑支持。白忙活了,也闹了个笑话,看来需要语重心长地说上一句——
“级,不是这样升的。”