Dưới đây là câu trả lời của tôi đến một câu hỏi tương tự có thể giúp (xem vấn đề 2):
Có một vài giá trị liệt kê đang gây ra vấn đề này. Những vấn đề này có thể được khắc phục thông qua việc sử dụng tệp đính kèm bên ngoài JAXB (xem bên dưới).
Enum Issue # 1 - Rỗng Chuỗi
Một số giá trị enum của bạn là chuỗi rỗng (""), được gây ra một chuỗi chứ không phải là một tài sản enum được tạo ra:
<xs:enumeration value="">
<xs:annotation>
<xs:documentation>Blank</xs:documentation>
</xs:annotation>
</xs:enumeration>
Vấn đề Enum # 2 - Chuỗi số
Một số giá trị enum là các số gây ra chuỗi thay vì một thuộc tính enum được tạo:
<xs:enumeration value="6">
<xs:annotation>
<xs:documentation>6th grade</xs:documentation>
</xs:annotation>
</xs:enumeration>
Tệp kết buộc (ràng buộc).xml)
File bindings sau đây có thể được sử dụng để giải quyết các vấn đề với educationLevelType, các khái niệm ở đây có thể được áp dụng cho tất cả các loại vấn đề:
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="http://www.acf.hhs.gov/programs/cb/systems/nytd/nytd_data_file_format.xsd">
<jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='6']">
<jxb:typesafeEnumMember name="SIX"/>
</jxb:bindings>
<jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='7']">
<jxb:typesafeEnumMember name="SEVEN"/>
</jxb:bindings>
<jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='8']">
<jxb:typesafeEnumMember name="EIGHT"/>
</jxb:bindings>
<jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='9']">
<jxb:typesafeEnumMember name="NINE"/>
</jxb:bindings>
<jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='10']">
<jxb:typesafeEnumMember name="TEN"/>
</jxb:bindings>
<jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='11']">
<jxb:typesafeEnumMember name="ELEVEN"/>
</jxb:bindings>
<jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='12']">
<jxb:typesafeEnumMember name="TWELVE"/>
</jxb:bindings>
<jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='']">
<jxb:typesafeEnumMember name="BLANK"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
Cuộc gọi XJC có thể được thực hiện như sau (cờ -nv được mô tả dưới đây):
xjc -nv -b bindings.xml -d out http://www.acf.hhs.gov/programs/cb/systems/nytd/nytd_data_file_format.xsd
này sẽ làm cho Enum sau để được tạo ra:
package gov.hhs.acf.nytd;
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlEnumValue;
import javax.xml.bind.annotation.XmlType;
@XmlType(name = "educationLevelType")
@XmlEnum
public enum EducationLevelType {
@XmlEnumValue("under 6")
UNDER_6("under 6"),
@XmlEnumValue("6")
SIX("6"),
@XmlEnumValue("7")
SEVEN("7"),
@XmlEnumValue("8")
EIGHT("8"),
@XmlEnumValue("9")
NINE("9"),
@XmlEnumValue("10")
TEN("10"),
@XmlEnumValue("11")
ELEVEN("11"),
@XmlEnumValue("12")
TWELVE("12"),
@XmlEnumValue("post secondary")
POST_SECONDARY("post secondary"),
@XmlEnumValue("college")
COLLEGE("college"),
@XmlEnumValue("")
BLANK("");
private final String value;
EducationLevelType(String v) {
value = v;
}
public String value() {
return value;
}
public static EducationLevelType fromValue(String v) {
for (EducationLevelType c: EducationLevelType.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
maxOccurs Issue
Đối với vấn đề maxOccurs, dòng lệnh sau đây với không xác minh (-nv) cờ có thể được sử dụng để phân tích các lược đồ XML:
xjc -nv -d out http://www.acf.hhs.gov/programs/cb/systems/nytd/nytd_data_file_format.xsd
này sẽ giúp bạn vượt qua lỗi sau mà không phải sửa đổi lược đồ XML:
phân tích cú pháp lược đồ ... [ERROR] Cấu hình hiện tại của trình phân tích cú pháp không cho phép giá trị thuộc tính maxOccurs thành được đặt lớn hơn giá trị 5.000.
dòng 41 của http://www.acf.hhs.gov/programs/cb/systems/nytd/nytd_data_file_format.xsd
Không phân tích được lược đồ.
Để biết thêm thông tin
Bạn có XSD mà bạn sử dụng trong ví dụ? Liên kết http://www.acf.hhs.gov/programs/cb/systems/nytd/nytd_data_file_format.xsd không còn khả dụng nữa. –