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