Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JIBX中检查元素是否为nillable_Java_Jibx - Fatal编程技术网

Java 如何在JIBX中检查元素是否为nillable

Java 如何在JIBX中检查元素是否为nillable,java,jibx,Java,Jibx,我有xsd模式: <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="urn:v1" xmlns="urn:v1" xmlns:reg="urn:v1" xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefaul

我有xsd模式:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  targetNamespace="urn:v1"
  xmlns="urn:v1"
  xmlns:reg="urn:v1"
  xmlns:xop="http://www.w3.org/2004/08/xop/include"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  elementFormDefault="qualified"
  attributeFormDefault="unqualified"
  version="1.1.1">

  <xs:simpleType name="ItemType">    
    <xs:restriction base="xs:string">

    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ListItemType">   
    <xs:list itemType="ItemType"/>
  </xs:simpleType>

  <xs:complexType name="Element">    
    <xs:sequence>
      <xs:element name="SubElement">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SubSubElement" type="ListItemType" nillable="true" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>  
</xs:schema>

和由JIBX生成的java类:

public class Element
{
    private java.util.List<String> subElements = new java.util.ArrayList<String>();

    /** 
     * Get the list of 'SubSubElement' element items.
     * 
     * @return list
     */
    public java.util.List<String> getSubElements() {
        return subElements;
    }

    /** 
     * Set the list of 'SubSubElement' element items.
     * 
     * @param list
     */
    public void setSubElements(java.util.List<String> list) {
        subElements = list;
    }

    /** 
     * Serializer for 'SubSubElement' element list.
     * 
     * @param values
     * @return text
     */
    public static String serializeSubElements(java.util.List<String> values) {
        if (values == null) {
            return null;
        } else {
            java.lang.StringBuffer buff = new java.lang.StringBuffer();
            for (java.util.Iterator<String> iter = values.iterator(); iter
                    .hasNext();) {
                if (buff.length() > 0) {
                    buff.append(' ');
                }
                String value = iter.next();
                buff.append(value);
            }
            return buff.toString();
        }
    }

    /** 
     * Deserializer for 'SubSubElement' element list.
     * 
     * @param text
     * @return values
     * @throws org.jibx.runtime.JiBXException on conversion error
     */
    public static java.util.List<String> deserializeSubElements(String text)
            throws org.jibx.runtime.JiBXException {
        org.jibx.runtime.IListItemDeserializer ldser = new org.jibx.runtime.IListItemDeserializer() {
            public java.lang.Object deserialize(String text) {
                return text;
            }
        };
        return (java.util.List<String>) org.jibx.runtime.Utility
                .deserializeList(text, ldser);
    }
}
公共类元素
{
private java.util.List subElements=new java.util.ArrayList();
/** 
*获取“SubSubElement”元素项的列表。
* 
*@返回列表
*/
public java.util.List getSubElements(){
返回子元素;
}
/** 
*设置“SubSubElement”元素项的列表。
* 
*@param列表
*/
public void setSubElements(java.util.List){
子元素=列表;
}
/** 
*“SubSubElement”元素列表的序列化程序。
* 
*@param值
*@返回文本
*/
公共静态字符串序列化子元素(java.util.List值){
如果(值==null){
返回null;
}否则{
java.lang.StringBuffer buff=new java.lang.StringBuffer();
for(java.util.Iterator iter=values.Iterator();iter
.hasNext();){
如果(buff.length()>0){
buff.append(“”);
}
字符串值=iter.next();
buff.append(值);
}
返回buff.toString();
}
}
/** 
*“SubSubElement”元素列表的反序列化程序。
* 
*@param text
*@返回值
*@throws org.jibx.runtime.JiBXException on转换错误
*/
public static java.util.List反序列化子元素(字符串文本)
抛出org.jibx.runtime.JiBXException{
org.jibx.runtime.IListItemDeserializer ldser=new org.jibx.runtime.IListItemDeserializer(){
public java.lang.Object反序列化(字符串文本){
返回文本;
}
};
return(java.util.List)org.jibx.runtime.Utility
.反序列化列表(文本,ldser);
}
}
如何检查元素是否为零?这是我在xsd:nillable=“true”中看到的

更新:

确定一些没有列表的esier xsd:

<xs:schema targetNamespace="urn:v1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1.1" xmlns="urn:v1" xmlns:reg="urn:v1" xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:complexType name="Element">
         <xs:sequence minOccurs="0">
            <xs:element name="SubElement" type="type1" nillable="true" minOccurs="0"/>
         </xs:sequence>
   </xs:complexType>

    <xs:simpleType name="type1">        
        <xs:restriction base="xs:string" />
    </xs:simpleType>

</xs:schema>


public class Element
{
    private String subElement;

    /** 
     * Get the 'SubElement' element value.
     * 
     * @return value
     */
    public String getSubElement() {
        return subElement;
    }

    /** 
     * Set the 'SubElement' element value.
     * 
     * @param subElement
     */
    public void setSubElement(String subElement) {
        this.subElement = subElement;
    }
}

公共类元素
{
私有字符串子元素;
/** 
*获取“SubElement”元素值。
* 
*@返回值
*/
公共字符串getSubElement(){
返回子元素;
}
/** 
*设置“SubElement”元素值。
* 
*@param子元素
*/
public void setSubElement(字符串子元素){
this.subElement=子元素;
}
}

同样,这里也没有nillable

可以翻译成
java.util.List getSubElements()
的xs:element name=“subsubsubelement”type=“ListItemType”nillable=“true”minOccurs=“0”

结果列表中的每个空值都对应于xml数据中的

没有其他实用的方法可以让空值出现在列表中

因此,在本例中,仅检查列表项是否为null就足够了

更新

JiBX文档

实例文档中也使用了xsi:nil属性,但未使用该属性 由JiBX1.0支持。JiBX 1.1使用 组中可为零的属性

然后

此属性只能用于绑定到元素名称的对象

因此,如果映射到
java.util.List getSubElements()
,则根本不可能进行所需的检查

您可以将映射更改为
java.util.List getSubElements()
将映射到空的
子元素
实例

通过所有JiBX源进行的快速全文搜索并没有显示任何关于零检查可能性的概念。 JiBX对
nillable
的支持似乎仅限于特殊编组规则。 假设
nillable
仅支持元素绑定映射,这是有意义的

示例xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  targetNamespace="urn:v1"
  xmlns="urn:v1"
  xmlns:reg="urn:v1"
  xmlns:xop="http://www.w3.org/2004/08/xop/include"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  elementFormDefault="qualified"
  attributeFormDefault="unqualified"
  version="1.1.1">

  <xs:complexType name="SubElement">    
    <xs:simpleContent>
      <xs:extension base="xs:string">
      </xs:extension>
    </xs:simpleContent>    
  </xs:complexType>
  <xs:simpleType name="SubElementList">   
    <xs:list itemType="SubElement"/>
  </xs:simpleType>
  <xs:complexType name="Element">    
    <xs:sequence>
      <xs:element name="SubElement">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SubSubElement" type="SubElementList" nillable="true" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>  
</xs:schema>


为什么需要这样的检查?目标是什么?您的意思是检查模式中是否存在
nillable=“true”
,还是实际数据中是否存在
xsi:nil=“true”
?在JAXB中,我可以这样做:if(elementType.getElement().isNil()){Do something},现在如果元素为nill(nillable=true),我需要在JIBX中做同样的事情做点什么,你能解释一下我如何区分和吗?在这两种情况下,xml列表都为空。JAXB支持获取元素是否为nillable,现在我需要了解JIBX是如何实现这一功能的。也许我遗漏了一些东西,但区别
的实际原因是什么?(可能处理空字符串?)在客户端不会同时映射为null吗?在我的应用程序中,当客户端在元素中使用nillable时,我想删除一些内容。当它发送为空时,我什么也不做。我将问题更新为更简单的xsd,但没有列表,但仍然没有nillable检查。你能提供一些无支票的例子吗?因为正如您在JIBX 1.1中编写的那样,它支持nillable,但我不知道我建议如何使用字符串字段将
子元素
映射到
子元素
类。然后,
将映射到null,而
将映射到具有null字符串字段的NOTNULL
子元素
实例。