繁体   English   中英

JAXB2Marshaller未将xml元素编组为Character

[英]JAXB2Marshaller not unmarshaling xml element into Character

我在使用JAXB2Marshaller将xml元素分解为字符时遇到问题。

我的XML输入包含一个元素<dateCheckFlag>Y</dateCheckFlag> :当我尝试在pojo dateCheckFlag元素值转换为Character类型时,它为空。

假设存在所有的setter getter和构造函数。

有人可以帮我解决如何将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;
}

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM