【发布时间】:2019-05-30 14:53:36
【问题描述】:
我有一个导出图像文件的网络服务。 Web 服务的实体在 XSD 模式中定义,使用 xjc 我们生成服务响应中使用的 java 类。
在 XSD 中,图像被定义为扩展 base64Binary 简单类型的 complexType。
<xsd:complexType name="image">
<xsd:simpleContent>
<xsd:extension base="xsd:base64Binary">
<xsd:attribute name="nil" type="xsd:boolean" use="optional"/>
<xsd:attribute name="overwrite" type="xsd:boolean"
use="optional"/>
<xsd:attribute name="origin" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
使用 xjc 我们生成 java 类,我得到以下信息:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "image", propOrder = {
"value"
})
public class Image {
@XmlValue
protected byte[] value;
@XmlAttribute(name = "nil")
protected Boolean nil;
@XmlAttribute(name = "overwrite")
protected Boolean overwrite;
@XmlAttribute(name = "origin")
protected String origin;
value 属性具有注释 @XMlValue 而不是 @XmlSchemaType(name="base64Binary")。
在使用 SoapUI 测试 Web 服务时,我没有得到带有图像的 base64 字符串,而是得到字节数组图像的 toString() 结果。
[B@11a0f47b
但是如果我通过@XmlSchemaType(name="base64Binary")手动更改@XmlValue注解,结果是正确的。
<ns1:value>LzlqLzRBQVFTa1pKUmdBQkFnQUFBUU....</ns1:value>
【问题讨论】:
-
你的xjc是什么版本的?试试最新的 JAXB?
-
我用的是2.2.4,但是我已经升级到2.3.1,结果还是一样。