访问用java编写的Web服务方法时的java.lang.ClassCastException。 JAXB

我正在编写一个应用程序,我必须与MS SQL数据库进行交互。 在我的应用程序中,我正在创建Web服务(使用javax.jws)来访问数据库表。 我在Web服务中创建一个操作(方法),返回类型为java.lang.Object [] [],如下所示:

@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; } 

并且为了在我的应用程序中调用Web服务操作(方法),我正在编写以下代码:

 public Object[][] get_HistoryInfoByUser(String email_Id) { java.util.List historyInfo = null; try { historyInfo = port.getHistoryInfoByUser(email_Id); } catch (Exception_Exception ex) { ex.printStackTrace(); } return (Object[][]) historyInfo.toArray(); } 

但我得到一个例外

线程“Thread-8”中的exceptionjava.lang.ClassCastException:[Ljava.lang.Object; 无法转换为[[Ljava.lang.Object;

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

请你能给我任何建议,这将有助于我解决这个问题。

转换不用于转换对象,它用于重新分类对象的类型。 它告诉编译器应该将变量视为不同的类。 如果您尝试将变量强制转换为与其不兼容的某种类型,则会得到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 [] []是完全不同的类型,而不是你可以在它们之间施放的东西。 相反,您需要先制作2D数组,然后将数组设置为2D数组的第一个成员。

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