2

所以正如标题所暗示的,我在一个项目中工作,在我调用一个 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 生成的类处理到项目中并不是可行的长期解决方案。我需要能够在不将所有类带入项目的情况下创建编组器。

谢谢您的帮助。

4

2 回答 2

0

我没有特别做很多工作,但对哪些是建立在实现上JAXB的有一个公平的理解。MOXYJAXB

  1. 你的意思是类是依赖的Class A extends Class B,你正在尝试marshal Class A使用JAXB?

  2. 您是否尝试过将package自身传递给marshaler实例?像这样的东西?

Marshaller marshaller = JAXBContext.newInstance("io.model.jaxb").createMarshaller();

有了这个,你需要ObjectFactory. 如果有兴趣请参考这里:https ://stackoverflow.com/a/5780252/16055533

于 2021-05-31T08:43:21.293 回答
0

最后我找到了一个解决方案,它不是我的,但我在这里分享给有同样问题的其他人。

该线程似乎与问题没有太大关系,但有一个答案解决了我的问题。

JAXB-Unmarshalling 期间的 ObjectFactory 角色是什么?

就我而言,我只是将链接中所述的属性添加到 VM 环境选项中。

于 2021-05-31T09:37:52.400 回答