我的任务是更新Cytoscape的插件,一个生物可视化软件平台,到最新版本的 Cytoscape API。Cytoscape 3.x 使用 OSGI 框架(我认为是 Karaf 2.2.x)与其插件(现在称为“应用程序”)进行交互。
插件/应用程序实际上是一个使用 JAX-WS 与外部服务器通信的客户端。但是由于某种原因,尽管没有任何错误消息,但它无法解组它收到的 SOAP 消息。所需的对象是使用默认构造函数创建的,但它们的字段保持为空。
我可以确认 XML确实是从服务器到达的。我还可以确认相同的代码在非 OSGI 环境中也能正常工作。此外,为 OSGI 和非 OSGI 版本启用jaxb.debug
JVM 选项表明 JAXB 在这两种情况下似乎在幕后做着完全相同的事情。
所以,我不知道这里发生了什么。有任何想法吗?
更新:
经过进一步调查,我确定该问题可能与 JAX-WS 没有任何直接关系。我将来自 Web 服务的 SOAP 消息作为 XML 文件保存在我的硬盘上。尝试直接解组它,根本不接触 Web 服务,导致以下情况:
Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: javax.xml.stream.XMLInputFactory.newFactory()Ljavax/xml/stream/XMLInputFactory;
再一次,同样的代码在独立的非 OSGI 环境中运行良好。很奇怪。