【问题标题】:Wrong annotation generated by XJC for extended base64Binary elementXJC 为扩展 base64Binary 元素生成的错误注释
【发布时间】: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,结果还是一样。

标签: java xsd xjc


【解决方案1】:

尝试删除

<xsd:simpleContent>

在类型定义中。

如果不行,换成&lt;xsd:complexContent&gt;

【讨论】:

  • 无法删除 simpleContent,xsd:extension 不允许 uinder complexType。基本类型 base64Binary 是 simpleType,因此图像类型必须是 simpleContent。
  • 没有。您在其中使用 xsd 扩展名。试试吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
相关资源
最近更新 更多