版本:XFire 1.2.2
IDE:MyEclipse 5.1GA
JDK:Sun JDK 1.6.0

问题现象:

编制某电信级航空服务客户端时固定地出现以下异常:

Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Could not marshall type.

Caused by: javax.xml.bind.JAXBException: com.SomeDomain.SomeObject nor any of its super class is known to this context

问题出现在注入 “XXXXXRequest” 对象并触发 Web 服务的瞬间。

搜索 Google 得不到有帮助的答复,找不到相关的中文资料。之前使用 Axis 1.1 编写的客户端运行正常。

问题原因:

在相同一个源码包内使用 XFire 对同一台服务器上路径相似、命名空间相同两个 Web 服务生成 Web 服务客户端时,后生成的客户端程序会覆盖前一个客户端程序的 ObjectFactory.java,该 java 文件为 XFire 提供针对 Web 服务所使用的 Request 和 Response 对象的解释,当使用 MyEclipse 5.x 产生客户端时,ObjectFactory.java 只包含最近一次生成的客户端的 Request 和 Response 对象,而覆盖或舍弃了前一次生成的客户端的 Request 和 Response 对象,导致客户端运行时无法解释前一次生成的客户端的 Request 和 Response 对象,从而抛出 XFireFault: Could not marshall type 异常。

解决方案:

每次生成一个 Web 服务客户端后,对负责 Request 和 Response 对象的 ObjectFactory.java 作一次备份,当使用 MyEclipse 5.x 生成同一个命名空间下的全部 Web 服务客户端之后,手工合并这些备份的 ObjectFactory.java 为最终版本的 ObjectFactory.java 。

建议升级到:
版本:XFire 1.2.6
IDE:MyEclipse 5.5.1 GA

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
  • 2022-12-23
  • 2022-12-23
  • 2021-06-02
  • 2021-11-20
猜你喜欢
  • 2021-07-19
  • 2022-12-23
  • 2022-01-08
  • 2021-10-14
  • 2022-12-23
  • 2021-09-02
  • 2021-04-02
相关资源
相似解决方案