首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2EE 與 .NET 互操作性深度解析(二):資料型別映射陷阱與最佳實踐

     編輯:Java 相關知識

前言

Web 服務以 XML 為傳輸格式,資料型別在序列化/反序列化過程中跨平台映射,是互操作性成敗關鍵。本文為系列第二篇,剖析集合物件、含 null 陣列、基本型別精度與值/參考型別差異帶來的實戰問題。

主要陷阱

1. 弱型別集合(ArrayList/Hashtable 等)

.NET 將 ArrayList 映射為 xsd:ArrayOfAnyType(元素型別 xsd:anyType),Java 端產生 Object[] 而非具體 Product[],導致反序列化失敗或型別資訊遺失。
對策: 服務簽名僅公開具體型別陣列(如 Product[]),內部以集合處理,對外提供 Facade 方法轉換。

2. 含 null 元素的陣列

  • Java (WebSphere) 序列化:<item xsi:nil="true"/>
  • .NET 反序列化:視為空字串 ""(長度 0),而非 null
  • .NET 發送含 null 陣列:SOAP 直接省略該元素,導致陣列長度變短
鐵律:跨平台呼叫嚴禁傳遞含 null 的陣列。

3. 無符號數值型別

.NET 有 uint/ulong/ushort/ubyte 對應 xsd:unsignedInt 等,Java 無對應型別。
建議: 以 xsd:string 傳遞,雙端自行 Convert.ToString/Parse。

4. 浮點/十進位精度

xsd:float/double/decimal 在兩平台精度實作不同,整合後必須實測驗證。

5. 值型別 vs 參考型別的 null 差異

  • .NET DateTime 為值型別,不可為 null
  • Java Calendar/Date 為參考型別,可為 null

Java 傳 null 給 .NET 會拋 FormatException。
解法: 以包裝複雜型別(如 DateWrapper)封裝,null 表達缺失。

黃金法則

  1. 優先使用簡單型別(string, int, boolean 等)
  2. 拒絕弱型別集合,公開具體陣列
  3. 禁用含 null 陣列
  4. 跨平台前必測精度與 null 語意
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved