首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由jaxb生成的ObjectFactory方法

由jaxb生成的ObjectFactory方法
EN

Stack Overflow用户
提问于 2014-11-08 19:48:19
回答 1查看 1.6K关注 0票数 1

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

有两种类型的xsd文件,第一种是:

代码语言:javascript
复制
  <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和signupresponse类,因此我可以轻松地创建服务,例如:

代码语言:javascript
复制
public Signup signupResponse(String name,String mobile);

但是如果我像这样直接设置signupresponse:

代码语言:javascript
复制
<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类中创建条目,如下所示

代码语言:javascript
复制
private final static QName _SignupResponse_QNAME = new QName("http://www.example.com", "signupResponse");

方法是:

代码语言:javascript
复制
@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架构创建服务。

EN

回答 1

Stack Overflow用户

发布于 2014-11-10 19:52:04

元素signupResponse被认为是String.class的简单类型,因此您没有类生成。

如果希望生成枚举,则应更改XSD

代码语言:javascript
复制
<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>

为了生成

代码语言:javascript
复制
@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

代码语言:javascript
复制
    @XmlElementDecl(namespace = "http://www.example.com", name = "signupResponse")
    public JAXBElement<SignupResponse> createSignupResponse(SignupResponse value) {
        return new JAXBElement<SignupResponse>(_SignupResponse_QNAME, SignupResponse.class, null, value);
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26816798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档