繁体   English   中英

JAXB XmlElement maxOccurs出现数组元素问题

[英]JAXB XmlElement maxOccurs Issue with Array elements

我在下面的getter方法级别XmlElement注释中使用了从Java类生成xsd的方法。

@XmlElement(type = Integer.class,required = true)

public int [] getTestArrayInt(){....}

生成的XML元素:

<xsd:element name="testArrayInt" type="xsd:int"/>

minOccurs的默认值为1。因此,此处未显示。 但是缺少为数组元素列出的maxOccurs =“ unbounded” Soap UI希望为数组元素提供maxOccurs =“ unbounded”。 结果,在Soap UI中,此元素未被视为数组。

当我从注释中删除type = Integer.class时 ,我开始在XML中获取maxOccurs =“ unbounded”

@XmlElement(required = true)在元素下面生成:

<xsd:element name="testArrayInt" type="xsd:int" maxOccurs="unbounded"/>

但我特别需要这种类型的基本数据类型。 如果没有在注释中输入类型 ,则对于不需要的元素(即未设置required = true)minOccurs = 1会丢失。

有人可以帮我吗?

注意:我是EclipseLink JAXB(MOXy)的负责人,并且是JAXB(JSR-222)专家组的成员。

您描述的问题似乎出现在EclipseLink JAXB(MOXy)中,但没有出现在JAXB参考实现中。 MOXy是WebLogic 12.1.1中的默认JAXB提供程序(请参阅: http ://blog.bdoughan.com/2011/12/eclipselink-moxy-is-jaxb-provider-in.html)。 您可以使用以下错误跟踪我们在此问题上的进展。 如果您是WebLogic客户,请输入一个错误,以便您可以接收适当的补丁程序。

Java模型

package forum13646211;

import javax.xml.bind.annotation.XmlElement;

public class Root {

    private int[] testArrayInt;

    @XmlElement(type=Integer.class)
    public int [] getTestArrayInt () {
        return testArrayInt;
    }

    public void setTestArrayInt(int[] array) {
        this.testArrayInt = array;
    }

}

模式(由JAXB RI生成)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="root">
    <xs:sequence>
      <xs:element name="testArrayInt" type="xs:int" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

模式(由EclipseLink JAXB(MOXy)生成)

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:complexType name="root">
      <xsd:sequence>
         <xsd:element name="testArrayInt" type="xsd:int" minOccurs="0"/>
      </xsd:sequence>
   </xsd:complexType>
</xsd:schema>

模式生成代码

package forum13646211;

import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class);

        jc.generateSchema(new SchemaOutputResolver() {

            @Override
            public Result createOutput(String namespaceUri,
                    String suggestedFileName) throws IOException {
                StreamResult result = new StreamResult(System.out);
                result.setSystemId(suggestedFileName);
                return result;
            }

        });

    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM