2
我需要編組一個包含String變量的對象。
The String var。包含一個XML文檔,並且將其轉義並轉義爲XMLElement。JAXB Marshall String to base64
我想將字符串變量編組爲base64格式,並返回到unmarshall上的字符串。
這是可能的嗎?
我需要編組一個包含String變量的對象。
The String var。包含一個XML文檔,並且將其轉義並轉義爲XMLElement。JAXB Marshall String to base64
我想將字符串變量編組爲base64格式,並返回到unmarshall上的字符串。
這是可能的嗎?
您可以使用XmlAdapter
期間編組/解組過程中String
從byte[]
轉換成/。默認情況下,JAXB將代表byte[]
爲base64Binary
。
XmlAdapter(Base64Adapter)
下面是一個XmlAdapter
將一個String
和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();
}
}
的Java模型(美孚)
的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;
}
}
演示
在演示代碼下面我們將創建的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);
}
}
輸出
下面是從運行演示代碼的輸出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
<bar>PGFiYz5IZWxsbyBXb3JsZDwvYWJjPg==</bar>
</foo>
這是正確的,但是,對於那些本例中沒有工作,你必須檢查自版本「2.1.13」以來'jaxb-impl'的版本有一個錯誤。只需將版本更改爲「2.1.17」即可使其工作。 – lopezvit