2
String 변수가 포함 된 객체를 마샬링해야합니다.
문자열 var. XML 문서가 포함되어 있으며 XMLElement로 이스케이프 처리하여 마샬링됩니다.JAXB Marshall base64로 문자열
String 변수를 base64 형식으로 마샬링하고 unmarshall에서 String으로 되돌리고 싶습니다.
이것은 가능한가요?
String 변수가 포함 된 객체를 마샬링해야합니다.
문자열 var. XML 문서가 포함되어 있으며 XMLElement로 이스케이프 처리하여 마샬링됩니다.JAXB Marshall base64로 문자열
String 변수를 base64 형식으로 마샬링하고 unmarshall에서 String으로 되돌리고 싶습니다.
이것은 가능한가요?
XmlAdapter
을 사용하면 마샬링/언 마샬링 과정에서 String
을 byte[]
으로 /에서 변환 할 수 있습니다. 기본적으로 JAXB는 byte[]
을 base64Binary
으로 나타냅니다. 다음은
(때문에) XmlAdapter (Base64Adapter)는 String
과 byte[]
사이의 변환 것 XmlAdapter
입니다.
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();
}
}
자바 모델 (푸)
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