我有一个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进行一些验证,所以它破坏了我的代码。
谢谢你的帮助!
暂无答案!
目前还没有任何答案,快来回答吧!