2011-09-14 60 views
5

我有臨危對象的web sercice方法。其中一個屬性是「間隔」,它是一個整數。CXF - 如何聲明所需的屬性和非原始的?

我想就不需要這種屬性附加傷害,但不提供任何默認值 - 我想要求用戶明確設定的值。

如果我使用int interval - 屬性公開爲int,並且如果用戶沒有顯式設置該屬性,則會發送零(對於基本int的Java默認值)。

如果我使用Integer interval - 該屬性公開爲Integer,並且在WSDL中聲明爲可選,所以用戶在發送請求之前無法看到它是必需的。

如果我使用Integer interval@XmlElement(required = true)@XmlElement(nillable = false) - 屬性顯示爲int。

的屬性可以有任何整數 - 負,零和積極的,所以我不能使用默認值,表明該屬性沒有明確設置。

我可以使用BigInteger interval@XmlElement(required = true),但比我們缺少使用核心類型Integer的優點。

我想公開該屬性作爲整數,所以我會得到空,如果用戶沒有設置屬性,並在同一時間我想WSDL公開該屬性是必需的,所以用戶會知道它是必需的只需查看WSDL即可。

回答

3

隨着@XmlElement(required = true)的WSDL是正確的,但問題是,在我的WSDL使用org.apache.cxf.tools.wsdlto.WSDLToJava工具,當客戶端生成 與int interval而不是Integer interval

的解決方案是用一個路徑通過「-b」選項,WSDL2Java工具到JAXB綁定文件映射XSD:int在java.lang.Integer

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      jaxb:version="2.0"> 
    <jaxb:globalBindings> 
    <jaxb:javaType name="java.lang.Integer" 
        xmlType="xsd:int" /> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

使用@XmlElement(required = true)和「-b」選項,保留所需的元素(minOccurs =「1」)並將其作爲Integer公開給Java客戶端。

更多信息:http://cxf.547215.n5.nabble.com/How-to-declare-an-attribute-required-and-non-primitive-td4815370.html