Unmarshalling мыло класса бросок исключения - PullRequest
1 голос
/ 11 мая 2011

Я следую предопределенному WSDL (и xsd) для отправки и получения вызовов веб-служб. Отправляющий веб-сервис отправляет объект типа Any. Я могу отправить это нормально. Когда я получаю ответ, мы получаем список любых элементов. Ниже приведен код, который мы используем:

        List<Object> list = academicRecordBatch.getBatchContent().getAny();
        if (list != null && list.size() > 0) {
                    Log.debug("got : "+ list.get(0).getClass().getName());
                    K12StudentType k12StudentType = (K12StudentType) list.get(0); //error on this line
        }

Это приводит к следующей ошибке: [java] 2011-05-10 09: 52: 53,707 DEBUG [com.mycompany.is.Test] main (строка 42): возвращенный объект: org.pesc.message.academicrecordbatch.v2_0.AcademicRecordBatch@483bead5 [java] java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.ElementNSImpl не может быть приведен к org.pesc.sector.academicrecord.v1_4.K12StudentType

Похоже, что возвращается список ElementNSImpl. Как мне извлечь из него мой объект K12StudentType?
Буду признателен за любое предложение.

Ответы [ 2 ]

3 голосов
/ 31 августа 2015

Получаете ли вы доступ к веб-сервису .NET, который возвращает DataSet от клиента Java?В любом случае попробуйте следующее: допустим, переменная 'o' отображается как объект ElementNSImpl.Приведите его к объекту org.w3c.dom.Node, а затем используйте методы DOM для навигации по возвращенному XML, который теперь доступен через объект Node.

import org.w3c.dom.*; // Add this import.

Object o = objs.get(0); // the ElementNSImpl object. 
Node dataSetNode = (Node)o;

// Some more code for illustration..            
if (dataSetNode != null) {
Node tableNode = dataSetNode.getFirstChild(); 
if (tableNode != null) {
Node dataElementNode = tableNode.getFirstChild();
        while (dataElementNode != null) {
            String text = dataElementNode.getTextContent();
            String name = dataElementNode.getNodeName();
            System.out.format("%s: %s\n", name, text);
            dataElementNode = dataElementNode.getNextSibling();
    }                   
}
1 голос
/ 11 мая 2011

ElementNSImpl реализует интерфейс Node, а эта ссылка объясняет, как демонтировать объект узла. Я никогда не пробовал это все же.

...