我需要编组一个包含String变量的对象.
String var.包含一个XML文档,它通过转义到XMLElement进行编组.
我想将String变量编组为base64格式,并在unmarshall上返回String.
这是可能的吗?
您可以使用an 在编组/解组过程中XmlAdapter转换String为/从a 转换byte[].默认情况下,JAXB将表示byte[]为base64Binary.
XmlAdapter(Base64Adapter)
下面是一个XmlAdapter将在a String和a 之间转换的byte[].
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class Base64Adapter extends XmlAdapter<byte[], String> {
@Override
public String unmarshal(byte[] v) throws Exception {
return new String(v);
}
@Override
public byte[] marshal(String v) throws Exception {
return v.getBytes();
}
}
Run Code Online (Sandbox Code Playgroud)
Java模型(Foo)
的XmlAdapter是使用配置的@XmlJavaTypeAdapter注释.
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
public class Foo {
private String bar;
@XmlJavaTypeAdapter(Base64Adapter.class)
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
Run Code Online (Sandbox Code Playgroud)
演示
在下面的演示代码中,我们将创建一个实例Foo并将其编组为XML.
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Foo foo = new Foo();
foo.setBar("<abc>Hello World</abc>");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foo, System.out);
}
}
Run Code Online (Sandbox Code Playgroud)
产量
以下是运行演示代码的输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
<bar>PGFiYz5IZWxsbyBXb3JsZDwvYWJjPg==</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5850 次 |
| 最近记录: |