java - JAXB Marshall 字符串转 base64

标签 java jaxb

我需要整理一个包含字符串变量的对象。
字符串变量。包含一个 XML 文档,它通过转义到 XMLElement 进行编码。

我想将 String 变量编码为 base64 格式,并在解码时返回到 String。

这可能吗?

最佳答案

在编码/解码过程中,您可以使用 XmlAdapterStringbyte[] 相互转换。默认情况下,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>

关于java - JAXB Marshall 字符串转 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19422914/

相关文章:

google-app-engine - 使用 JPA 注释编码类时出现 JAXBException

android - 将 JAXB 与 Google Android 一起使用

Java将整数转换为十六进制整数

java - 使用java将音频文件与文本匹配

java - 为什么我们需要 StringBuilder 中的容量

java - 无法从项目文件夹 xsd 读取 xsd 文件

java - Real Time Java 如何避免优先级倒置

从方法初始化的 Java Final 实例变量

java - 在对象图中检测到循环,这将导致无限深的 xml

java - 在非映射元素上产生 JAXB 错误