java - 使用 JAXB 的问题,我的 POJO 字段没有被映射
问题描述
我正在使用带有 Maven 的 Java 8 Springboot。
当我尝试解组 XML 并使用给定参数映射 FTMessage 对象时,会创建该对象,但该对象的所有字段都映射为 null。将 unmarshaller 包装在 try-catch 中时,JAXB 会运行并且不会引发任何错误。
所以结果是:
userShortName = null
和filename = null
这是我的代码:
JAXBContext jaxbContext = JAXBContext.newInstance( FTMessage.class );
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(xmlMessage); //xmlMessage is a string.
FTMessage msg = ((FTMessage) unmarshaller.unmarshal(reader)); //msg ends up with fields populated with null.
还有我的项目等级:
package com.project.message;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "FTMessage", namespace = "https://www.example.com/exmpl" )
public class FTMessage /*implements Serializable*/ {
@XmlElement(name = "UserShortName")
private String userShortName;
@XmlElement(name = "Filename")
private String filename;
public FTMessage () {
}
public FTMessage (String userShortName, String filename) {
this.userShortName= userShortName;
this.fundShortName = filename;
}
@Override
public String toString() {
return "FTMessage {userShortName: " + this.userShortName+ ", " +
"filename : " + this.filename + "}";
}
public String getUserShortName() {
return userShortName;
}
public void setUserShortName(String userShortName) {
this.userShortName = userShortName;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
}
以及我的 XML 字符串:
<?xml version="1.0" encoding="UTF-8"?>
<FTMessage xmlns="https://www.example.com/exmpl"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<UserShortName>Jerome</UserShortName>
<Filename>NotReal.csv</Filename>
</FTMessage>
如果我编组它,我会得到一个包含以下内容的文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:FTMessage xmlns:ns2="https://www.example.com/exmpl">
<UserShortName>Jerome</UserShortName>
<Filename>notReal</Filename>
</ns2:FTMessage>
解决方案
我发现的解决方法是将命名空间属性添加到不仅是,@XmlRootElement
而且是所有的@XmlElement
,就像这样:
@XmlElement(name = "UserShortName", namespace = "https://www.example.com/exmpl")
推荐阅读
- docker - “docker stats”命令显示 CPU 超过 100%
- javascript - 链接的 DateTimepickers 不应允许某些日期
- tfs - 如何将 TFS 旧版本的 SSIS 包更新到当前部署的版本?
- wordpress - 如何将我网站的每个帖子自动重定向到移动设备上的 AMP 版本?
- google-chrome-app - 无法支付 chrome 网上商店的注册费
- laravel - 如何在 Vuejs 中单击图像 ID
- java - 在 Excel 工作表的列末尾写入 excel 数据
- bluetooth-lowenergy - 尽管我已配对,但 BLE 属性需要身份验证
- azure - 更改为不同的 Azure 订阅时,Azure PowerShell 脚本不起作用
- excel - Excel:CountIf RangeA 比 Range B 大 n 个单位