我在使用 JAXB2Marshaller 将 xml 元素解码为字符时遇到问题。
我的 XML 输入包含一个元素 <dateCheckFlag>Y</dateCheckFlag>
:
当我尝试获取 dateCheckFlag
元素值转化为Character
输入我的 pojo,它给了我 null。
假设所有的 setter getter 和构造函数都存在。
谁能帮我解决如何将 xml 元素解码为字符...?
@XmlRootElement(name="Emp")
class Emp
{
@XmlElement(name="name");
String name;
@XmlElement(name="dateCheckFlag");
Character dateCheckFlag;
Emp(){}
Emp(String name, Character dateCheckFlag)
{
this.name= name;
this.dateCheckFlag = dateCheckFlag;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setDateCheckFlag(Character flag)
{
this.dateCheckFlag=flag;
}
public Character getName()
{
return dateCheckFlag;
}
最佳答案
JAXB (JSR-222)规范未定义 char
/Character
的 XML 表示。
默认情况下,JAXB 引用实现将 Character
转换为 xs:unsignedShort
类型。这意味着它需要一个像这样的文档:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Emp>
<name>Jane Doe</name>
<dateCheckFlag>89</dateCheckFlag>
</Emp>
XmlAdapter
您将能够使用 XmlAdapter
来获取您正在寻找的 XML。 XmlAdapter
允许您将一个对象转换为另一个对象以更改 XML 表示形式。
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class CharacterAdapter extends XmlAdapter<String, Character> {
@Override
public Character unmarshal(String string) throws Exception {
return string.charAt(0);
}
@Override
public String marshal(Character character) throws Exception {
return new String(new char[] {character});
}
}
Emp
@XmlJavaTypeAdapter
注释用于指定XmlAdapter
。
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement(name = "Emp")
@XmlAccessorType(XmlAccessType.FIELD)
class Emp {
String name;
@XmlJavaTypeAdapter(CharacterAdapter.class)
Character dateCheckFlag;
}
演示
下面是一些将 XML 与对象模型相互转换的代码。
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Emp.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum15240702/input.xml");
Emp emp = (Emp) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(emp, System.out);
}
}
input.xml/输出
<?xml version="1.0" encoding="UTF-8"?>
<Emp>
<name>Jane Doe</name>
<dateCheckFlag>Y</dateCheckFlag>
</Emp>
关于java - JAXB2Marshaller 没有将 xml 元素解码为字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15240702/