我有xsd文件,如下所示:
<xs:complexType name="sampleTest">
<xs:sequence>
<xs:element name="testName" type="xs:string"/>
<xs:element name="actualData" type="tns:actualData"/>
<xs:element name="expectedDataAPI" type="xs:string"/>
<xs:element name="actualDataPostStatus" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
通过使用JAXB xjc插件,它生成适当的bean类。但是,如果我将minOccurance和maxOccurance添加到元素中,它会添加一个特殊字符。
<xs:element name="actualData" type="tns:actualData" minOccurs="1" maxOccurs="unbounded"/>
即生成
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "sampleTest", propOrder = {
"testName",
"actualDatas",
"expectedDataAPI",
"actualDataPostStatus"
})
....
...
@XmlElement(name = "actualData", required = true)
protected List<ActualData> actualDatas;
...
...
public List<ActualData> getActualDatas() {
if (actualDatas == null) {
actualDatas = new ArrayList<ActualData>();
}
return this.actualDatas;
}
而不是actualData,它变为actualDatas。是否需要过滤器?我需要做些什么改变以避免特殊性。
我正在使用Maven在eclipse中使用xjc插件生成jaxb。我使用的是Java 1.6和Jaxb 2.2.7
更新
我绑定为:
<jaxb:bindings version="2.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:globalBindings xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:serializable uid="1"/>
<xjc:simple />
</jaxb:globalBindings>
</jaxb:bindings>
答案 0 :(得分:2)
您必须包含一个扩展名(可能是意外)才会导致此行为。我的猜测是xjc:simple,这将导致为重复的元素生成复数名称。
下面是一个显示标准JAXB行为的示例。
XML架构(schema.xsd)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/schema"
xmlns:tns="http://www.example.org/schema"
elementFormDefault="qualified">
<xs:complexType name="sampleTest">
<xs:sequence>
<xs:element name="actualData" type="tns:actualData" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="actualData"/>
</xs:schema>
XJC致电
xjc schema.xsd
生成的类(SampleTest)
生成的字段和属性是单数actualData
。
package org.example.schema;
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "sampleTest", propOrder = {"actualData"})
public class SampleTest {
@XmlElement(required = true)
protected List<ActualData> actualData;
public List<ActualData> getActualData() {
if (actualData == null) {
actualData = new ArrayList<ActualData>();
}
return this.actualData;
}
}
绑定文件(binding.xml)
这是你问题的绑定文件。
<jaxb:bindings version="2.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:globalBindings xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:serializable uid="1"/>
<xjc:simple />
</jaxb:globalBindings>
</jaxb:bindings>
XJC致电
xjc -extension -b binding.xml schema.xsd
生成的类(SampleTest)
生成的字段和属性不是单数actualDatas
。
package org.example.schema;
import java.io.Serializable;
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "sampleTest", propOrder = {"actualDatas"})
public class SampleTest
implements Serializable
{
private final static long serialVersionUID = 1L;
@XmlElement(name = "actualData", required = true)
protected List<ActualData> actualDatas;
public List<ActualData> getActualDatas() {
if (actualDatas == null) {
actualDatas = new ArrayList<ActualData>();
}
return this.actualDatas;
}
}