java - jaxb base64二进制编码/解码

标签 java xsd jaxb

我需要在服务响应中包含 MimeMessage 对象。 所以基本上我决定使用 base64binary 类型。 消息由代码准备:

//message is a MimeMessage type
ByteArrayOutputStream baos = new ByteArrayOutputStream();
message.writeTo(baos);
byte[] bytes = baos.toByteArray();
content.setMessageContent(bytes);

并且在架构中表示:

  <xs:simpleType name="MessageContent">
    <xs:restriction base="xs:base64Binary">
      <xs:whiteSpace value="collapse" fixed="true"/>
    </xs:restriction>   </xs:simpleType>

我收到的响应是未正确编码的字符。例如 %3D 被转换为 =3D,但应该只是 =

我认为这可能与编码有关,但 marhaller 和 unmarshaller 都默认使用 UTF-8。

任何提示都会有所帮助, 谢谢 马立克。

最佳答案

我很快就尝试了这个并且它有效;还有一些你没有发布的东西可能会导致你的问题。我使用 NetBeans 7.1 来生成类(所有这些都是开箱即用的);也试试看,看看你是否得到相同的结果。那么请告诉我...

XSD:

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/XMLSchema.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Message">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="content" type="MessageContent"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:simpleType name="MessageContent">
        <xsd:restriction base="xsd:base64Binary">
            <xsd:whiteSpace fixed="true" value="collapse"/>
        </xsd:restriction> 
    </xsd:simpleType>
</xsd:schema>

Java 代码片段:

JAXBContext jc = JAXBContext.newInstance(("org.tempuri.xmlschema"));
Marshaller m = jc.createMarshaller();   
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
ObjectFactory o = new ObjectFactory();
Message msg = o.createMessage();
byte[] data = new byte[] {0x45, 0x31};
msg.setContent(data);
m.marshal(msg, System.out);

结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Message xmlns="http://tempuri.org/XMLSchema.xsd">
    <content>RTE=</content>
</Message>

关于java - jaxb base64二进制编码/解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8358512/

相关文章:

C# 日志;找不到 NLog.xsd 文件

maven - jaxb2-maven-plugin XJB : The namespace of element 'bindings' must be from the schema namespace' 错误

java - 为什么 Firebase 实时数据库未更新?

java将两个类链接在一起

java - 从 jar 为类文件生成 jaxb Xsd 模式

xml - 在XSD中,如何通过属性值限制枚举?

java - JAX-WS SOAP 请求正文参数的 JAXB 绑定(bind)

android - Android 是否需要 JAXB 实现?

java - 在 Openshift 上部署 war 文件后,找不到合适的驱动程序错误

java - 从 eclipse 项目中删除未使用的 jar