繁体   English   中英

将base64编码的字节数组转换回ASCII

[英]Convert byte array of base64 encoding back to ASCII

我正在使用一个Web应用程序,该应用程序显示Java rest端点发送的json格式中包含的问题。 问题具有文本元素,但也可以包含二进制形式的附件(例如图片或电影)(请参见屏幕截图1)。 在服务器上,数据以XML定义,该XML用于使用xjc工具生成Java类。

在此处输入图片说明

现在,该应用程序的一般部分(即显示问题)可以运行,但是Im用数据URL技术无法显示图片,因为base64二进制存储为字节数组。 因此,当我将value属性输入到img标签中时,我得到的不是整数,而是带符号的整数:

(`<img src="data:image/jpeg;base64,-119,80,78,71,13`<img)

如果我在Java端点上打开调试透视图并检查问题的变量,则这是可见的(请参见屏幕截图2)。

在此处输入图片说明

现在,我最初的想法是将value的数据类型从byte []更改为String,但是由于我只是扩展XML的base64类型,因此我怀疑这样做是否明智。

感谢您对此的想法

内容的xsd文件,它是“附件”的元素

<xs:element name="content">
<xs:complexType>
    <xs:simpleContent>
        <xs:extension base="xs:base64Binary">
            <xs:attribute name="filename" type="xs:string" use="required"/>
            <xs:attribute ref="xml:lang"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>

问题的示例定义

<question id="q1" type="yesno">
    <text>Is the organizations...?</text>
    <attachments>
        <attachment id="q1a1pic" mime="image/jpeg">
            <content filename="image.jpg" xml:lang="de>iVB....cut....
            </content>
        </attachments>
    </attachments>
</question>

生成的类内容:

public class Content {

@XmlValue
protected byte[] value;

事实证明,自定义XML适配器是缺少的难题。 您可以扩展javax.xml.bind.annotation.adapters XMLAdapter类,并实现marshal()和unmarshal()来执行转换。

public class Base64Adapter extends XmlAdapter<byte[], String> {

  @Override
  public String unmarshal(byte[] v) throws Exception {
    return Base64.getEncoder().encodeToString(v);
  }

  @Override
  public byte[] marshal(String v) throws Exception {
    return Base64.getDecoder().decode(v);
  }
}

然后,使用xjc重新编译类,包括在bindings参数中包括新适配器的"xjc.exe" -d "app\\platform\\src\\main\\java" -b src/main/resources/XMLBinding.xjc -p example.company.com src\\main\\resources\\model.xsd

有关更多详细信息,请参见API

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM