`
Rocky_rup
  • 浏览: 145392 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

发现XFire1.2.6两个bug

阅读更多
这两个bug是在调试ALE接口中define方法时发现,

BUG1

步骤:
WS调用define方法,定义一个ECSpec

现象:
抛出异常信息,说某类的属性没有“写方法”(setter),见如下异常堆栈信息:


[handler.DefaultFaultHandler]-[INFO] Fault occurred!
org.codehaus.xfire.fault.XFireFault: No write method for property {http://_1.xsd.ale.epcglobal}excludePattern in class epcglobal.ale.xsd._1.ECExcludePatterns
at org.codehaus.xfire.aegis.type.basic.BeanType.writeProperty(BeanType.java:283)
at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:167)
at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:159)
at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:159)
at org.codehaus.xfire.aegis.type.basic.ArrayType.readCollection(ArrayType.java:80)
at org.codehaus.xfire.aegis.type.collection.CollectionType.readObject(CollectionType.java:36)
at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:159)
at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:159)
at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:159)
at org.codehaus.xfire.aegis.AegisBindingProvider.readParameter(AegisBindingProvider.java:169)
at org.codehaus.xfire.service.binding.AbstractBinding.read(AbstractBinding.java:206)
at org.codehaus.xfire.service.binding.WrappedBinding.readMessage(WrappedBinding.java:51)
at org.codehaus.xfire.soap.handler.SoapBodyHandler.invoke(SoapBodyHandler.java:42)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)

分析:
org.codehaus.xfire.fault.XFireFault: No write method for property {http://_1.xsd.ale.epcglobal}excludePattern in class epcglobal.ale.xsd._1.ECExcludePatterns
经发现,epcglobal.ale.xsd._1.ECExcludePatterns确实没有为excludePattern 提供setter方法。
epcglobal.ale.xsd._1.ECExcludePatterns并不是由手工编写,而是通过XFire的eclipse插件根据 ALE.xsd文件自动生成。因此,初步推断很可能是自动生成代码的组件没有能够为excludePattern提供setter方法,后对比其它自动生 成的代码发现,只有集合类的属性不会提供setter方法;进一步思考发现:

@XmlElement(required = true)
protected List<string> excludePattern;</string>
<string> </string>
<string> 集合类属性通常对应于XSD中元素的概念,如上述代码中,“@XmlElement”的注释就就说明了excludePattern在xml是一个元素。 根据这个思路推断,自动代码生成的规则对“@XmlElement”只会生成getter方法,不提供setter方法。</string>
<string></string>
<string>
解决:
</string>
<string> 手工添加setter方法解决,这个应用上的bug。 </string>
<string></string>
<string>
BUG1

步骤:
</string>
<string> 同上</string>
<string></string>
<string> 现象:
</string>
<string> 同上</string>
<string></string>
<string>
</string>
<string> 2007-11-19 19:59:43 [handler.DefaultFaultHandler]-[INFO] Fault occurred!</string>
<string> org.codehaus.xfire.fault.XFireFault: No write method for property {http://_1.xsd.ale.epcglobal}includeSpecInReports in class epcglobal.ale.xsd._1.ECSpec</string>
<string> at org.codehaus.xfire.aegis.type.basic.BeanType.writeProperty(BeanType.java:283)</string>
<string> at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:167)</string>
<string> at org.codehaus.xfire.aegis.type.basic.BeanType.readObject(BeanType.java:159)</string>
<string> at org.codehaus.xfire.aegis.AegisBindingProvider.readParameter(AegisBindingProvider.java:169)</string>
<string> at org.codehaus.xfire.service.binding.AbstractBinding.read(AbstractBinding.java:206)</string>
<string> at org.codehaus.xfire.service.binding.WrappedBinding.readMessage(WrappedBinding.java:51)</string>
<string> at org.codehaus.xfire.soap.handler.SoapBodyHandler.invoke(SoapBodyHandler.java:42)</string>
<string> at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)</string>
<string> at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)</string>
<string> at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)</string>
<string> at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)</string>
<string> at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)</string>
<string> at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)</string>
<string> at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)</string>
<string> at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)</string>
<string> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)</string>
<string> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)</string>
<string> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)</string>
<string> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)</string>
<string> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)</string>
<string> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)</string>
<string> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)</string>
<string> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)</string>
<string> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)</string>
<string> at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)</string>
<string> at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)</string>
<string> at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)</string>
<string> at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)</string>
<string> at java.lang.Thread.run(Thread.java:595)</string>
<string></string>
<string>
分析:
</string>
<string> 根据bug1的分析思路发现,epcglobal.ale.xsd._1.ECSpec类中为includeSpecInReports提供了setter方法,而为什么还会抛出没有写方法的错误呢?这让相当费解......</string>
<string> </string>
<string> 多次单步调试源代码没有发现代码上的疑问,还是只能对比其它自动生成的类。终于意外发现,自动代码生成的时候,对其基本数据类型(int、long等) 中,唯有boolean的类型在对应到java中Boolean类型,而不像long直接对应于java中long,我试探性的将代码中Boolean改 为boolean,并修改了对应的setter方法,再次调用问题解决。</string>
<string> </string>
<string> 问题虽解决了,但没有道理应为是Boolean就不能识别其setter方法。呵呵,我忽略了方法的参数,尽管不论是Boolean还是boolean,它们的setter方法名都是setIncludeSpecInReports</string>
<string> ,可是它们方法的参数类型不同,那么XFire通过反射调用方法时不光识别方法名,还对参数类型也进行了对比,这也是合乎情理的,毕竟方法是可以重载的。</string>
<string></string>
<string>
解决:
</string>
<string> 修改Boolean为boolean,且修改对应的setter方法。</string>
<string></string>
<string>


总结:
</string>
<string> 上述两个BUG都没有根除问题,那是因为需要修正XFire的源代码,这个手术就复杂啦,还是留给XFire的开源团队来解决吧。</string>
<string> 另外,在流行的开源组件、框架也好,它们也不可能摆脱BUG的梦魇,当发现BUG时,发呆是没有用的,搞来源代码调试分析,总能找到答案。</string>
分享到:
评论
1 楼 waterborn 2008-04-21  
除了手工加 setter 方法 还有什么方法吗?

相关推荐

    xfire1.2.6_plugin

    总结来说,"xfire1.2.6_plugin"是Eclipse平台上的一个强大工具,它将XFire的Web Services开发能力无缝整合到Eclipse环境中,让开发者能够在熟悉的开发环境中高效地进行Web Services的开发和测试。通过理解并充分利用...

    Spring2.0和XFire1.2.6整合案例

    在IT行业中,集成框架是开发复杂应用程序的关键,Spring和XFire就是两个重要的工具。Spring作为一个强大的Java企业级应用开发框架,提供了丰富的功能,包括依赖注入、面向切面编程(AOP)以及各种服务管理。而XFire...

    xfire1.2.6版本及依赖文件

    8. **依赖管理**: 提供的`xfire1.2.6_all`压缩包可能包含了所有必要的依赖文件,这方便开发者快速集成到项目中,避免了手动解决依赖问题的麻烦。 9. **文档和社区支持**: 虽然XFire 1.2.6相对较旧,但在其活跃时期...

    xfire-1.2.6.rar xfire-1.2.6.rar xfire-1.2.6.rar

    首先,`xfire-all-1.2.6.jar`是核心库文件,它集成了XFire的所有功能,包括网络协议处理、游戏状态同步、服务器发现等。开发人员可以通过导入这个JAR文件,快速地在项目中集成XFire的全部功能,实现游戏服务器间的...

    xfire1.2.6源代码源文件

    xfire1.2.6 源代码 源文件 源程序。供调试、研究用。

    xfire1.2.6 ws-security示例

    xfire1.2.6是早年间一个流行的开源SOAP服务框架,它允许开发者构建和消费Web服务。WS-Security(Web Services Security)是基于SOAP消息的安全标准,用于保护Web服务免受各种攻击,如篡改、伪造等。在这个示例中,...

    Xfire1.2.6版API手册.chm

    Xfire1.2.6版API手册.chmXfire1.2.6版API手册.chmXfire1.2.6版API手册.chmXfire1.2.6版API手册.chm

    XFire1.2.6

    在本压缩包“XFire1.2.6”中,包含的是XFire 1.2.6版本所需的全部jar文件,这些文件是开发者进行基于webservice开发的重要组成部分。 一、XFire简介 XFire是一个轻量级的Web服务实现,它通过简化API和快速的性能,...

    XFire1.2.6完整版JAR包

    XFire1.2.6的JAR包本质上就是一个可执行的Java程序,包含了运行XFire所需的所有代码和资源。用户可以通过运行这个JAR文件来启动XFire服务,实现游戏的联机功能。在Java环境中,使用"java -jar"命令即可执行JAR包,...

    xfire1.2.6.jar

    去除xfire传递date类型的数据时值为null时的异常的jar包

    spring3.0整合Xfire1.2.6 开发webservice需要的jar包

    本篇将详细讲解如何利用Spring 3.0与Xfire 1.2.6进行集成,以开发高效的Web服务。 首先,让我们了解Spring 3.0。Spring 3.0是Spring框架的一个重大更新,引入了许多新特性和改进,如支持JSR-303 Bean Validation,...

    xfire1.2.6+spring2.5整合

    本项目"xfire1.2.6+spring2.5整合"是将XFire 1.2.6与Spring 2.5这两个开源框架进行融合,以实现更高效的服务导向架构。下面将详细解释这两个框架以及它们整合的意义和方法。 XFire是一个基于Java的Web服务框架,它...

    xfire 1.2.6 API帮助文档.rar

    总结,Xfire 1.2.6 API为游戏开发者和社区建设者提供了一个强大的工具箱,通过这个工具,他们可以创建丰富的游戏周边应用,提升玩家的社交体验。掌握和熟练运用API,是实现这一目标的关键步骤。对于希望在游戏社区...

    XFire 1.2.6调用Web Service的几种方法

    XFire 1.2.6 是一个流行的开源 Web 服务框架,提供了多种调用 Web 服务的方法。了解这些方法对于开发高效、可靠的 Web 服务客户端非常重要。本文将详细介绍 XFire 1.2.6 中的三种调用 Web 服务的方法:动态客户端...

    xfire-1.2.6所有资源--实例

    XFire 1.2.6是这个框架的一个版本,包含了丰富的资源,适合开发者进行学习和实践。 在XFire 1.2.6的所有资源中,我们可以找到以下关键组件和资料: 1. **XFire开发指南.pdf**:这份文档是开发者的重要参考资料,它...

    xfire_1.2.6.rar

    这里的两个文件可能是同一版本的不同压缩方式,以满足不同用户的需求。 Xfire的核心功能包括: 1. **即时通讯**:Xfire提供了聊天室、好友列表、私人消息等即时通讯功能,使玩家可以方便地与朋友沟通游戏心得,...

    xfire 1.2.6 server

    xfire和CXF是两个广泛使用的Java Web服务框架,它们允许开发人员创建、发布和消费Web服务。本文将深入探讨xfire 1.2.6服务器版本及其与CXF 1.2.6客户端的协同工作,以理解它们如何促进对象的传递和返回。 xfire是一...

    xfire-all-1.2.6 xfire所需的全部包

    综上所述,Xfire 1.2.6不仅是一个通讯工具,更是一个游戏世界的社交中心。它通过强大的游戏集成、即时通讯和丰富的社区功能,塑造了一个独特的游戏社交环境。虽然时代变迁,但Xfire 1.2.6的精髓仍值得我们回味和学习...

    spring2.5+xfire1.2.6 客户端和服务端的配置

    这些可能是项目的两个关键部分。`WSSpring`可能包含了Spring配置文件以及与服务相关的类,而`WSTest`可能包含测试用例,用于验证服务端和客户端的正确配置和功能。 总结来说,"spring2.5+xfire1.2.6 客户端和服务端...

    xfire1.2.6的myeclipse插件

    xfire1.2.6是针对MyEclipse集成开发环境的一个插件,它主要用于支持XML Web服务的开发和部署。这个插件的核心功能是帮助开发者在MyEclipse中轻松地创建、测试和发布基于SOAP(Simple Object Access Protocol)的Web...

Global site tag (gtag.js) - Google Analytics