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

Tom*_*man 6 java web-services 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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();
 }
Run Code Online (Sandbox Code Playgroud)

但我得到一个例外

线程"Thread-8"中的异常java.lang.ClassCastException:[Ljava.lang.Object; 不能转换为[[Ljava.lang.Object;

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

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

unh*_*ler 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
Run Code Online (Sandbox Code Playgroud)

就您而言, Object[] 和 Object[][] 是完全不同的类型,并且不能在之间进行转换。相反,您需要首先创建 2D 数组,然后将数组设置为 2D 数组的第一个成员。

Object[][] result = new Object[1][];
result[0] = historyInfo.toArray();
Run Code Online (Sandbox Code Playgroud)