[英]JAXB2Marshaller not unmarshaling xml element into Character
I am having problem unmarshalling xml element into character using JAXB2Marshaller. 我在使用JAXB2Marshaller将xml元素分解为字符时遇到问题。
My XML input contains one element <dateCheckFlag>Y</dateCheckFlag>
: when I try to get dateCheckFlag
element value into Character
type in my pojo, it gives me null. 我的XML输入包含一个元素
<dateCheckFlag>Y</dateCheckFlag>
:当我尝试在pojo dateCheckFlag
元素值转换为Character
类型时,它为空。
Assume all setter getter and constructor are present. 假设存在所有的setter getter和构造函数。
Can anybody help me out how to unmarshall xml element into Character...? 有人可以帮我解决如何将xml元素编组为Character ...吗?
@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;
}
The JAXB (JSR-222) specification does not define the XML representation for char
/ Character
. JAXB(JSR-222)规范未定义
char
/ Character
的XML表示形式。 By default that JAXB reference implmentation converts a Character
to the xs:unsignedShort
type. 默认情况下,JAXB参考实现将一个
Character
转换为xs:unsignedShort
类型。 This means that it is expecting a document like: 这意味着它期望的文档如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Emp>
<name>Jane Doe</name>
<dateCheckFlag>89</dateCheckFlag>
</Emp>
XmlAdapter XmlAdapter
You will be able to use an XmlAdapter
to get the XML that you are looking for. 您将能够使用
XmlAdapter
来获取所需的XML。 An XmlAdapter
allows you to convert one object to another for the purposes of changing the XML representation. 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 EMP
The @XmlJavaTypeAdapter
annotation is used to specify the XmlAdapter
. @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;
}
Demo 演示
Below is some code that converts the XML to/from the object model. 下面是一些将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/Output input.xml中/输出
<?xml version="1.0" encoding="UTF-8"?>
<Emp>
<name>Jane Doe</name>
<dateCheckFlag>Y</dateCheckFlag>
</Emp>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.