您可以执行以下操作:
XmlAdapter (字节适配器)
您可以创建自己的XmlAdapter
在 aByte
和所需的 hexBinary之间进行转换String
。
import javax.xml.bind.DatatypeConverter;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class ByteAdapter extends XmlAdapter<String, Byte> {
@Override
public Byte unmarshal(String v) throws Exception {
return DatatypeConverter.parseHexBinary(v)[0];
}
@Override
public String marshal(Byte v) throws Exception {
return DatatypeConverter.printHexBinary(new byte[] {v});
}
}
领域模型
为了XmlAdapter
在所有JAXB (JSR-222)实现中工作,它需要放置在 type 的字段/属性上,Byte
而不是byte
. 在这个例子中,我们将Byte
使用 JAXB 来创建字段并利用字段访问来保持 type 的属性byte
。我们将利用@XmlSchemaType
注解来指定对应的模式类型是hexBinary
.
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
@XmlJavaTypeAdapter(ByteAdapter.class)
@XmlSchemaType(name="hexBinary")
public Byte bar;
public byte getBar() {
return bar;
}
public void setBar(byte bar) {
this.bar = bar;
}
}
演示
下面是一些您可以运行以证明一切正常的代码。
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum17483278/input.xml");
Foo foo = (Foo) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foo, System.out);
}
}
输入.xml/输出
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>2B</bar>
</foo>