Java jaxb Base64二进制编码/解码
我需要在服务响应中包含mimessage对象。 所以基本上我决定使用Base64二进制类型。 信息由以下代码编写:Java jaxb Base64二进制编码/解码,java,xsd,jaxb,Java,Xsd,Jaxb,我需要在服务响应中包含mimessage对象。 所以基本上我决定使用Base64二进制类型。 信息由以下代码编写: //message is a MimeMessage type ByteArrayOutputStream baos = new ByteArrayOutputStream(); message.writeTo(baos); byte[] bytes = baos.toByteArray(); content.setMessageContent(bytes); 在模式中,它表示为
//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" standalone="yes"?>
<Message xmlns="http://tempuri.org/XMLSchema.xsd">
<content>RTE=</content>
</Message>
RTE=
谢谢您的回答,我将提取更多代码并更新我的帖子。
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>