JAXB 未将请求类转换为所需的 xml 格式

问题描述 投票:0回答:1

我有一个 springboot 模块,我在其中使用 @XmlRootElement(name='request') 重命名它为 api rest 调用创建的 xml 请求,但代码使用类名生成请求,而不是应用 xml 属性,这会导致接收端的解组错误。使用的依赖项是 jaxb-api 版本 2.3.1 和 java 1.8。

其他模块工作正常,它们使用相同的代码生成正确的请求,只是想知道什么可能导致 JAXB 注释无法正常工作。它会与任何其他依赖项冲突吗?因为这个模块中有一个javax.xml.rpc-api

java xml spring-boot jaxb unmarshalling
1个回答
0
投票

在使用 JAXB 进行 XML 序列化/反序列化的 Spring Boot 应用程序中,@XmlRootElement(name = "request") 注释应按预期工作,以重命名生成的 XML 的根元素。但是,如果它没有按预期工作,可能有一些原因需要调查......

首先,您提到了对 javax.xml.rpc-api 的依赖。这可能会导致冲突或干扰 JAXB 注释。 JAXB 和 javax.xml.rpc 是两种不同的用于处理 XML 的 Java 技术。确保冲突的依赖项不会覆盖 JAXB 注释或配置。

接下来我将确保 JAXB 上下文配置:确保您的 Spring Boot 应用程序已正确配置为使用 JAXB 进行 XML 处理。 Spring Boot 通常会自动配置 JAXB,但如果您有任何自定义配置或禁用了自动配置,请确保正确设置 JAXB 上下文。

例如,您可以通过在 Spring 配置中创建 Jaxb2Marshaller bean 并指定 JAXB 带注释的类所在的包来显式配置 JAXB 上下文,如下所示:

    @Bean
    public Jaxb2Marshaller jaxb2Marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setPackagesToScan("com.example.package"); // Replace with your package name
        return marshaller;
}

另外 2 个不太可能的原因,可能是:

  1. 检查类路径(正确版本的 JAXB(jaxb-api 和 jaxb-impl)位于您的类路径上。)
  2. 检查生成的 XML(通过检查输出或使用 漂亮打印 XML 的工具。这将有助于确认是否 问题在于 JAXB 注释或接收端的 期望。)

请告诉我这是否有任何帮助,如果有帮助,请将其标记为答案。

© www.soinside.com 2019 - 2024. All rights reserved.