Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
Maven 解析异常_Maven_Jaxb - Fatal编程技术网

Maven 解析异常

Maven 解析异常,maven,jaxb,Maven,Jaxb,我在两种不同的复杂类型的xml中有相同的元素id,如果我尝试使用maven Jaxb插件进行解析,我会遇到以下异常,有没有一种方法可以在绑定的帮助下使用元素进行解析而不重命名,因为我在模式中至少有30次属性id。提前感谢 com.sun.istack.SAXParseException2:已定义属性“Id”。用于解决此冲突 <xs:element name="aliases" minOccurs="0"> <xs:comp

我在两种不同的复杂类型的xml中有相同的元素id,如果我尝试使用maven Jaxb插件进行解析,我会遇到以下异常,有没有一种方法可以在绑定的帮助下使用元素进行解析而不重命名,因为我在模式中至少有30次属性id。提前感谢

com.sun.istack.SAXParseException2:已定义属性“Id”。用于解决此冲突

            <xs:element name="aliases" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="alias" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element ref="tran" minOccurs="0"/>
                                    <xs:element name="id">
                                        <xs:complexType>
                                            <xs:simpleContent>
                                                <xs:extension base="xs:string">
                                                    <xs:attribute name="old_value" type="xs:string"/>
                                                </xs:extension>
                                            </xs:simpleContent>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                                <xs:attribute name="end" type="xs:string"/>
                                <xs:attribute name="start" type="xs:string"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>



<xs:element name="tin_affiliation">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="tran" minOccurs="0"/>
            <xs:element name="id">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="old_value" type="xs:string"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="end" type="xs:string"/>
        <xs:attribute name="start" type="xs:string"/>
    </xs:complexType>
</xs:element>

您的XML元素中可以有多个同名的XML属性/元素,而不会出现任何问题。您看到的例外情况是,这将导致生成的类具有两个同名属性。这可能发生在以下情况下

  • 复杂类型包含同名的属性和元素
  • 复杂类型包含的属性/元素与扩展的复杂类型的属性/元素同名
    使用绑定文件的另一种解决方案是单独声明ID类型。因为它在两个元素中看起来是相同的,而且本例中的冲突是由于重复的类型声明造成的

    该模式将如下所示

    注意:它经过测试并正常工作,但由于我没有定义,因此必须对
    进行注释

    模式
    
    
    生成的Java类:IdType
    @xmlacessortype(xmlacesstype.FIELD)
    @XmlType(name=“idType”,比例器={
    “价值”
    })
    公共类IdType{
    @XmlValue
    保护字符串值;
    @xmldattribute(name=“old_value”)
    保护字符串值;
    /**
    *获取value属性的值。
    * 
    *@返回
    *可能的对象是
    *{@link String}
    *     
    */
    公共字符串getValue(){
    返回值;
    }
    /**
    *设置值属性的值。
    * 
    *@param值
    *允许的对象是
    *{@link String}
    *     
    */
    公共void设置值(字符串值){
    这个值=值;
    }
    /**
    *获取oldValue属性的值。
    * 
    *@返回
    *可能的对象是
    *{@link String}
    *     
    */
    公共字符串getOldValue(){
    返回旧值;
    }
    /**
    *设置oldValue属性的值。
    * 
    *@param值
    *允许的对象是
    *{@link String}
    *     
    */
    公共void setOldValue(字符串值){
    this.oldValue=值;
    }
    }
    
    生成的Java类:TinAffiliation
    @xmlacessortype(xmlacesstype.FIELD)
    @XmlType(name=),比例={
    “id”
    })
    @XmlRootElement(name=“tin_从属关系”)
    公营部门{
    @XmlElement(必需=true)
    受保护的id类型id;
    @xmltattribute(name=“end”)
    保护串端;
    @xmldattribute(name=“start”)
    受保护的字符串开始;
    /**
    *获取id属性的值。
    * 
    *@返回
    *可能的对象是
    *{@link IdType}
    *     
    */
    公共IdType getId(){
    返回id;
    }
    /**
    *设置id属性的值。
    * 
    *@param值
    *允许的对象是
    *{@link IdType}
    *     
    */
    公共void setId(IdType值){
    this.id=值;
    }
    /**
    *获取end属性的值。
    * 
    *@返回
    *可能的对象是
    *{@link String}
    *     
    */
    公共字符串getEnd(){
    返回端;
    }
    /**
    *设置结束属性的值。
    * 
    *@param值
    *允许的对象是
    *{@link String}
    *     
    */
    公共void setEnd(字符串值){
    this.end=值;
    }
    /**
    *获取start属性的值。
    * 
    *@返回
    *可能的对象是
    *{@link String}
    *     
    */
    公共字符串getStart(){
    返回启动;
    }
    /**
    *设置“开始”属性的值。
    * 
    *@param值
    *允许的对象是
    *{@link String}
    *     
    */
    公共void setStart(字符串值){
    this.start=值;
    }
    }
    
    我可以使用插件org.codehaus.mojo:jaxb2 maven plugin:2.3和org.jvnet.jaxb2_commons:jaxb2 basics annotate:0.6.4以及以下绑定配置来实现这一点


    非常感谢Doughan,这是因为您提到的原因1。有没有办法将XSD中出现的属性id重命名为不同的名称
    <jxb:bindings node=".//xs:attribute[@name='abc]"
                    multiple="true">
                    <jxb:property name="abc_attribute" />
                </jxb:bindings>
            </jxb:bindings>