我正在尝试制作网络服务,但我有两种情况。
有两种类型的xsd文件,第一种是:
<xsd:element name="signupRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="email" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element
<xsd:element name="signupResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="signup" type="tns:Signup"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="Signup">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Success"/>
<xsd:enumeration value="DuplicateEmail"/>
</xsd:restriction>
</xsd:simpleType>
在这种情况下,jaxb会生成signuprequest signupresponse和signup类,因此我可以轻松地提供服务,例如在这种情况下:
public Signup signupResponse(String name,String mobile);
但如果我像这样直接设置signupresponse:
<xsd:element name="signupResponse">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Success"/>
<xsd:enumeration value="DuplicateMail"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
jaxb只生成sinuprequest类,不生成signupresponse和signup类,而是在ObjectFactory类中进行输入
private final static QName _SignupResponse_QNAME = new QName("http://www.example.com", "signupResponse");
和方法是:
@XmlElementDecl(namespace = "http://www.example.com", name = "signupResponse")
public JAXBElement<String> createSignupResponse(String value) {
return new JAXBElement<String>(_SignupResponse_QNAME, String.class, null, value);
所以请指导我如何为这些类型的xsd架构提供服务。
答案 0 :(得分:2)
元素signupResponse
被视为String.class
的简单类型,因此您没有生成类。
如果要生成枚举,则应更改XSD
<xs:element name="signupResponse" type="signupResponse" />
<xs:simpleType name="signupResponse">
<xs:restriction base="xs:string">
<xs:enumeration value="Success" />
<xs:enumeration value="DuplicateMail" />
</xs:restriction>
</xs:simpleType>
为了生成
@XmlType(name = "signupResponse")
@XmlEnum
public enum SignupResponse {
@XmlEnumValue("Success")
SUCCESS("Success"),
@XmlEnumValue("DuplicateMail")
DUPLICATE_MAIL("DuplicateMail");
private final String value;
SignupResponse(String v) {
value = v;
}
public String value() {
return value;
}
public static SignupResponse fromValue(String v) {
for (SignupResponse c: SignupResponse.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
和ObjectFactory
@XmlElementDecl(namespace = "http://www.example.com", name = "signupResponse")
public JAXBElement<SignupResponse> createSignupResponse(SignupResponse value) {
return new JAXBElement<SignupResponse>(_SignupResponse_QNAME, SignupResponse.class, null, value);
}