Загрузка класса из неправильной банки и получение исключения приведения класса

Я использую несколько разных схем в своем проекте. Каждый из них скомпилирован в отдельный jar-файл, каждый из которых использует отдельный пакет с помощью ant-задачи xmlbeans. Я могу только успешно разобрать xml (используя метод .Factory.parse(String xml)) для jar схемы, который находится первым в пути к классам, иначе я получаю ClassCastException, как описано в этой ошибке. Если я изменю порядок банок, другая схема сможет успешно проанализировать, и ClassCastException будет выбрано для другого класса.

Я провел некоторую отладку и пришел к выводу, что, вероятно, виновата структура пакета schemaorg_apache_xmlbeans.namespace. Поскольку в моих схемах нет пространств имен, каждый из созданных мной jar-файлов совместно использует несколько файлов с одинаковыми именами в одинаковых пакетах. В частности, я видел, что у каждой банки есть файл schemaorg_apache_xmlbeans.namespace._nons.xmlns.xsb, который, кажется, указывает на фактическую схему для этой банки. Если фабрика использует этот файл для определения некоторых классов, которые она будет использовать для анализа имеющегося у нее xml, это может объяснить ClassCastException, поскольку она просматривает только первый файл в пути к классам, а не правильный файл для имеющегося у нее XML. Есть ли возможность указать пространства имен для сгенерированных схем (например, пространства имен java) в wsdls или xsds или в задаче ant «wsdl to java»?


person chinnusaccount    schedule 22.01.2014    source источник
comment
Пожалуйста, помогите мне решить эту проблему. я срочно нуждаюсь. Заранее спасибо!!!!   -  person chinnusaccount    schedule 22.01.2014
comment
Посоветуйте пожалуйста по этому поводу   -  person chinnusaccount    schedule 22.01.2014


Ответы (2)


Я думаю, проблема в том, что XMLBeans использует какой-то внутренний кеш схемы, который их смешивает.

Вы пытались дать своим схемам (xsds) разные пространства имен?

person Stroboskop    schedule 31.01.2014

Это можно решить, используя аргумент XMLOptions для метода синтаксического анализа. Пример: XmlOptions opts = new XmlOptions(); opts.setDocumentType(ВашДокумент.Фабрика.новыйЭкземпляр().ТипСхемы()); YourDocument.parse(String xml, параметры);

см. xmloptions.setDocumentType

person kbk    schedule 19.05.2015