XJC为扩展的base64Binary元素生成的注解有误

时间:2019-05-30 14:53:37

标签: java xsd xjc

我有一个Web服务来导出图像文件。该Web服务的实体是在XSD模式中定义的,并使用xjc生成用于服务响应的java类。

在XSD中,将图像定义为complexType,用于扩展base64Binary简单类型。


<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>

1 个答案:

答案 0 :(得分:0)

尝试删除

<xsd:simpleContent>
类型定义中的

如果不起作用,请替换为<xsd:complexContent>