2010-09-15 68 views
6

我正在寫一個應用程序,我必須與MS SQL數據庫進行交互。在我的應用程序中,我正在創建Web服務(使用javax.jws)來訪問數據庫表。我建立在Web服務一個操作(方法)用返回java.lang.Object類型[] [],如下所示:訪問用java編寫的Web服務方法時的java.lang.ClassCastException。 jaxb

@WebMethod(operationName = 「get_HistoryInfoByUser」)

public java.lang.Object[][] get_HistoryInfoByUser(@WebParam(name = "email_Id") 
String email_Id) throws Exception{ 
    java.lang.Object[][] historyInfo = null; 

    // some code here 

    return historyInfo; 
} 

和用於調用網絡在我的應用程序服務操作(方法),我寫下面 代碼:

public Object[][] get_HistoryInfoByUser(String email_Id) { 

     java.util.List<net.java.dev.jaxb.array.AnyTypeArray> historyInfo = null; 

    try { 

     historyInfo = port.getHistoryInfoByUser(email_Id); 

    } catch (Exception_Exception ex) { 
     ex.printStackTrace(); 
    } 
     return (Object[][]) historyInfo.toArray(); 
} 

,但我得到一個異常

線程「線程-8」中的異常 java.lang.ClassCastException: [Ljava.lang.Object;不能投到 [[Ljava.lang.Object;

Web服務操作返回類型是java.util.List的(net.java.dev.jaxb.array.AnyTypeArray) ,我需要返回java.lang.Object類型[] []。

請你給我任何建議,這將有助於我解決這個問題。

+0

如果有人提供了可以幫助您的答案,您應該接受答案。你沒有接受任何你問過的問題的答案。 – unholysampler 2010-09-15 11:29:31

回答

1

鑄造不用於轉換對象,它用於重新分類對象的類型。它告訴編譯器一個變量應該像一個不同的類一樣對待。如果您嘗試將某個變量轉換爲某種類型,則該變量不兼容,您將獲得ClassCastException

Object ojc = new ArrayList(); 
obj.add(new Object()); //Compiler error because Object does not have an add method 
ArrayList lst = (ArrayList)obj; 
lst.add(new Object()); //Works because now the compiler knows that the variable is an ArrayList 
MyClass myClass = (MyClass)obj; //ClassCastException because the object is not actually a MyClass object 
myClass.add(new Object()); //Assuming MyClass defines and add method that takes and object, this line compiles 

在你的情況,對象[]和Object [] []是完全不同的類型,而不是東西,你可以施放之間。相反,您需要先製作二維數組,然後將您的數組設置爲二維數組的第一個成員。

Object[][] result = new Object[1][]; 
result[0] = historyInfo.toArray();