2010-07-13 56 views
0

生成的存根可讀我已經創建了一個簡單類型WSDL與int類型或空白是不是由WSDL2Java的

<xsd:simpleType name="IntOrBlank"> 
      <xsd:union memberTypes="xsd:int"> 
       <xsd:simpleType> 
        <xsd:restriction base="xsd:string"> 
         <xsd:enumeration value=""/> 
        </xsd:restriction> 
       </xsd:simpleType> 
      </xsd:union> 
     </xsd:simpleType> 

然後我創建使用的WSDL2Java從Axis2中,發送作品存根和接收似乎直到我嘗試從這種類型獲取整數值。我的代碼是這樣的:

IntOrBlank get_part_custom_field7 = each_record [0] .get_part_custom_field7(); Object object = get_part_custom_field7.getObject();

該對象現在爲空。 eventhough SOAP消息即將在作爲

<bm:_part_custom_field7>9</bm:_part_custom_field7> 

回答

0

我通過代碼跟蹤和我發現WSDL2Java的不正確地產生的存根。創建的對象是java.math.BigInteger,而存根執行檢查以確保該對象是Integer的一個實例,因此該對象爲空而不會引發任何異常。我改變了類型

<xsd:simpleType name="IntOrBlank"> 
     <xsd:union memberTypes="xsd:integer"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:string"> 
        <xsd:enumeration value=""/> 
       </xsd:restriction> 
      </xsd:simpleType> 
     </xsd:union> 
    </xsd:simpleType> 

,問題迎刃而解

0

我建議你停止使用union這樣,也許不盡然。

你剛剛發現了一種不以你想要的方式處理它的工具 - 還有很多其他工具。 union在這方面並沒有多大意義。在這種情況下應該使用哪種Java類型? Object

怎麼樣在這種情況下:

<xs:simpleType name="SillyUnion"> 
    <xs:union memberTypes="xs:int xs:string"/> 
    </xs:simpleType> 

什麼數據類型,你就必須爲這個WSDL2Java的使用? Object呢?程序員如何使用這些數據來確定是否包含整數或字符串數​​據?你真的認爲每個使用這些數據的人都應該首先檢查嗎?

聯盟是當時聽起來像一個好主意的事情之一,事實證明它不像以前想象的那樣有幫助。

+0

這根本不回答問題。在這種情況下使用工會有什麼選擇? – 2011-06-28 15:01:00

+0

@mR_fr:另一種方法是將需求更改爲不需要'union',否則不要使用存根,而是直接處理XML。在編程語言環境中,'union'沒有多大意義。 – 2011-06-28 15:15:13

相關問題