2014-11-08 25 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); 
    } 
相關問題