由jaxb生成的ObjectFactory方法 [英] ObjectFactory methods generated by jaxb

查看:54
本文介绍了由jaxb生成的ObjectFactory方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to make web services but there are two situations I am getting.

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

There are two types of xsd file 1st one is:

  <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和注册类,以便我可以轻松地提供服务,例如在这种情况下:

in that case jaxb generates signuprequest signupresponse and signup classes so i can easily make services for example in this case:

public Signup signupResponse(String name,String mobile);

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

but if I set signupresponse directly like this:

<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类中输入这个

jaxb only generate sinuprequest class and do not generate signupresponse and signup classes instead it makes entry in ObjectFactory class like this

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

so please guide me how to make services for these types of xsd architecture.

推荐答案

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

The element signupResponse is considered as simple type of String.class, for this reason you haven't a Class generates.

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

If you want generated the enumeration you should change the 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

and 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);
    }

这篇关于由jaxb生成的ObjectFactory方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆