gpt4 book ai didi

java - jaxb 生成的 ObjectFactory 方法

转载 作者:行者123 更新时间:2023-11-30 03:41:03 24 4
gpt4 key购买 nike

我正在尝试制作网络服务,但我遇到了两种情况。

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 架构提供服务。

最佳答案

元素 signupResponse 被视为 String.class 的简单类型,因此您没有生成 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);
}

}

和对象工厂

    @XmlElementDecl(namespace = "http://www.example.com", name = "signupResponse")
public JAXBElement<SignupResponse> createSignupResponse(SignupResponse value) {
return new JAXBElement<SignupResponse>(_SignupResponse_QNAME, SignupResponse.class, null, value);
}

关于java - jaxb 生成的 ObjectFactory 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26816798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com