从JAXB2.1升级打破了xmlMap

ifmq2ha2  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(286)

我有一个spring应用程序,我正在升级到spring的版本5。这迫使我升级到tomcat8.5,这会导致当前使用jaxb impl 2.1的xmlMap出现问题
此Map在2.1中运行良好:

<note>note2</note>
    <description>1. Goed 1</description>
    <description>2. Goed 2</description>
    <quantity></quantity>

以上xml解组调用setdescription()

public List<String> getDescription() {
        return description;
    }

    public void setDescription(List<String> descriptions) {
        this.description = descriptions
    }

但当我升级到jaxb impl 2.3.3时,这就中断了。我创建了一个单元测试,它封送一个对象,在这个对象上设置了setdescription(),这个对象可以工作吗?
我创建了一个有这个问题的最简单类:

@XmlRootElement(name = "certificateTest")
@XmlType(propOrder = {"copies", "description", })
public class CertificateTest {

    private List<String> description;

    int copies;

    public int getCopies() {
        return copies;
    }

    public void setCopies(int copies) {
        System.out.println("copies = " + copies);
        this.copies = copies;
    }

    public List<String> getDescription() {
        return description;
    }

    public void setDescription(List<String> description) {
        System.out.println("description = " + description);
        this.description = description;
    }

}

使用此xml:

<certificateTest xmlns="https://myurl.com/certificate" version="1.0">
    <copies>2</copies>
    <description>OPMERKING</description>
    <description>1. Goed 1</description>
    <description>2. Goed 2</description>
</certificateTest>

setcopies是用jaxb2.1和2.3.3调用的
在2.1中调用setdescription是为了设置值,但在2.3.3中,调用setdescription只是为了将description初始化为null,并以其他方式设置值。
这是单元测试的代码:

JAXBContext context = JAXBContext.newInstance(CertificateTest.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        unmarshaller.setEventHandler(new DefaultValidationEventHandler());

        CertificateTest certificateTest = (CertificateTest) unmarshaller.unmarshal(getClass().getResource("/jaxb/test_ns3.xml").openStream());
        Assert.assertNotNull(certificateTest);
        Assert.assertNotNull(certificateTest.getDescription());
        System.out.println("description: " + certificateTest.getDescription());
        Assert.assertFalse(certificateTest.getDescription().isEmpty());

我使用setdescription进行一些验证,所以它破坏了我的代码。
谢谢你的帮助!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题