Java.lang.ClassCastException при доступе к методу веб-службы, написанному на Java. JAXB - PullRequest
6 голосов
/ 15 сентября 2010

Я пишу приложение, в котором мне нужно взаимодействовать с базой данных MS SQL. В моем приложении я создаю веб-сервисы (используя javax.jws) для доступа к таблицам базы данных. я создаю одну операцию (метод) в веб-сервисе с типом возвращаемого значения 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;
}

и для вызова операции (метода) веб-службы в моем приложении я пишу следующее код:

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;

Тип возврата операции веб-службы: java.util.List (net.java.dev.jaxb.array.AnyTypeArray) и мне нужно возвращаемый тип java.lang.Object [] [].

Пожалуйста, не могли бы вы дать мне какое-нибудь предложение, которое поможет мне решить эту проблему.

1 Ответ

1 голос
/ 15 сентября 2010

Приведение не используется для преобразования объектов, оно используется для реклассификации типа объекта. Он говорит компилятору, что переменная должна рассматриваться как другой класс. Если вы попытаетесь привести переменную к какому-либо типу, с которым она не совместима, вы получите 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...