Java xsd到jaxb添加了特殊字符
我有如下所示的xsd文件:Java xsd到jaxb添加了特殊字符,java,eclipse,maven,jaxb,xsd,Java,Eclipse,Maven,Jaxb,Xsd,我有如下所示的xsd文件: <xs:complexType name="sampleTest"> <xs:sequence> <xs:element name="testName" type="xs:string"/> <xs:element name="actualData" type="tns:actualData"/> <xs:element nam
<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>
通过使用JAXBXJC插件,它可以生成适当的bean类。但是,如果我将minOccurance和maxOccurance添加到元素中,它会添加一个特殊字符
<xs:element name="actualData" type="tns:actualData" minOccurs="1" maxOccurs="unbounded"/>
i、 它产生了什么
@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;
}
@xmlacessortype(xmlacesstype.FIELD)
@XmlType(name=“sampleTest”,比例器={
“测试名称”,
“实际数据”,
“expectedDataAPI”,
“实际数据状态”
})
....
...
@xmlement(name=“actualData”,必需=true)
受保护的列表实际数据;
...
...
公共列表getActualDatas(){
如果(实际数据==null){
actualDatas=新的ArrayList();
}
返回此.actualdata;
}
它不再是actualData,而是actualData。是否需要任何过滤器?我需要使用哪些更改来避免特殊角色
<xs:element name="actualData" type="tns:actualData" minOccurs="1" maxOccurs="unbounded"/>
我正在使用Maven在eclipse中使用xjc插件生成jaxb。我正在使用Java1.6和JAXB2.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>
您必须包含导致此行为的扩展(可能是意外)。我的猜测是xjc:simple,这将导致为重复的元素生成复数名称
标准JAXB行为 下面是一个显示标准JAXB行为的示例 XMLSchema(Schema.xsd)
XJC呼叫
xjc schema.xsd
xjc -extension -b binding.xml schema.xsd
生成的类(样本测试)
生成的字段和属性是单数的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;
}
}
生成的类(样本测试)
生成的字段和属性不是单一的actualdata
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;
}
}
package org.example.schema;
导入java.io.Serializable;
导入java.util.*;
导入javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name=“sampleTest”,proporter={“actualdata”})
公共类抽样测试
实现序列化接口
{
私有最终静态长serialVersionUID=1L;
@xmlement(name=“actualData”,必需=true)
受保护的列表实际数据;
公共列表getActualDatas(){
如果(实际数据==null){
actualDatas=新的ArrayList();
}
返回此.actualdata;
}
}
我在更新中添加了如上所示的绑定,但它不起作用。@akb-这是您以前使用的绑定或您现在尝试使用的绑定?我以前使用的这个绑定,即它是一个现有文件。@akb-从绑定中删除xjc:simple
,应该可以解决属性名问题。非常好,我已经评论了整个绑定标签,也就是说,它现在可以正常工作了。谢谢。你能告诉我为什么绑定会产生问题吗?。