簡體   English   中英

JAXB馬歇爾字符串轉換為base64

[英]JAXB Marshall String to base64

我需要編組一個包含String變量的對象。
字符串變量。 包含一個XML文檔,它通過轉義到XMLElement進行編組。

我想將String變量編組為base64格式,然后在解組時返回String。

這可能嗎?

在編組/解組過程中,您可以使用XmlAdapterString轉換為byte[] 默認情況下,JAXB將byte[]表示為base64Binary

XmlAdapter(Base64Adapter)

下面是一個XmlAdapter ,它將在Stringbyte[]之間進行轉換。

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模型(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;
    }

}

演示

在下面的演示代碼中,我們將創建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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM