2014-11-08 68 views
1

我正在尝试制作Web服务,但有两种情况。由jaxb生成的ObjectFactory方法

有两种类型的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和注册类,所以我可以轻松地进行例如服务在这种情况下:

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 only gen中心提供全方位sinuprequest上课不产生signupresponse和注册类相反,它使得在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

你已经解决了这个问题?如果你已经解决了,你是怎么做的? – Xstian 2015-04-15 18:00:16

回答

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