所以正如标题所暗示的,我在一个项目中工作,在我调用一个 API 之后,这个 API 将设置一个 Web 服务调用,在 API 调用 WS 之后,它将发送回(到我自己的应用程序)响应。我需要将响应记录为 XML。所以经过一番搜索,我最终得到了代码:
Marshaller marshaller = JAXBContext.newInstance(
vhu.ReqDeclareObject.class
).createMarshaller();
我的应用程序 <-> API <-> WS
POM(包含 VHU 包的依赖项):
<dependency>
<groupId>com.some.api</groupId>
<artifactId>api</artifactId>
<version>1.1.1-SNAPSHOT</version>
</dependency>
API 有 JAXB 生成的类(在 VHU 包中),我需要能够在我自己的项目中编组。
问题是 JAXB 生成的类存在依赖关系(com.some.dependency:vhu)。当我运行代码时,我收到了这个错误:
vhu.ReqDeclaredObject$JaxbAccessorF_control cannot be cast to com.sun.xml.bind.v2.runtime.reflect.Accessor
我做了一个简单的测试试图理解错误。我将所有 JAXB 生成的类复制到我的项目中并运行与上面相同的代码,但这次打包在我自己的项目中。
Marshaller marshaller = JAXBContext.newInstance(
ReqDeclareObject.class
).createMarshaller();
在这里,应用程序运行良好。
将所有 JAXB 生成的类处理到项目中并不是可行的长期解决方案。我需要能够在不将所有类带入项目的情况下创建编组器。
谢谢您的帮助。