CXF - конфликт имен схемы в коллекции - PullRequest
2 голосов
/ 01 марта 2012

Постановка проблемы: В настоящее время существует два требования, а именно наличие правильно заполненного элемента «» в сбое SOAP и максимально близкое совпадение между запросом SOAP и ответом SOAP для предварительного ивеб-сервис CXF, перенесенный после миграции из Axis Web Service.

Для первой вышеуказанной необходимости мы исследовали следующие параметры:

  1. Мы настроили собственный класс Interceptor для CXF, который будет обрабатывать SOAPОшибка по желанию.Мы также изменили метод в реализации сервиса так, чтобы содержимое «элемента» можно было напрямую установить в коде Java.Однако мы столкнулись с проблемой, связанной с тем, что JAXB Context не смог правильно разархивировать Java-исключение в SOAP Fault
  2. . Мы создали два новых класса, один в качестве фактического контейнера для исключения в виде простой Java.bean, а другой - в качестве оболочки, расширяющей класс исключений Java.Мы использовали класс-оболочку исключения в реализации сервиса для разрешения преобразования исключения приложения в сбой SOAP.Однако мы столкнулись с проблемой того, что эти классы не были известны контексту JAXB
  3. Мы попытались использовать инструмент wsdl2java для генерации различных артефактов для JAX-WS и JAXB - мы внесли изменения, чтобы указать сбой SOAP в XSDфрагмент в доступном (то есть в наследии от Axis / WebLogic) WSDL и использует артефакты JAXB, в частности классы ObjectFactory и DamageCatalogElementArray, которые обрабатывают контекст JAXB.После этого мы столкнулись с ошибкой, что различные типы XML, то есть соответствующие классы, на которые они ссылаются, не определены для указанного пространства имен
  4. Мы сделали пространства имен (экземпляры QName), используемые в различных классах, согласованными и использовали другой класс, package-infoуказать отображение схемы со структурой пакета.В настоящее время мы получаем ошибку, что схема конфликтует в коллекции для массива определенного класса DamageCatalogElement в методе реализации службы catalogDamage (), который связан с классом DamageCatalogElementArray.Это связано с тем, что типом возврата этого метода в реализации службы является массив типа DamageCatalogElement, тогда как когда мы возвращаем экземпляр JAXBElement в ObjectFactory, мы должны использовать класс DamageCatalogElementArray

Мы используемCXF 2.4.2, JDK1.6, JBoss AS 4.2.Любая помощь или указатели будут высоко оценены !!

1 Ответ

1 голос
/ 05 марта 2012

Наконец-то мы решили проблему.Хитрость заключалась в том, чтобы генерировать классы с помощью инструмента CXF wsdl2java, предоставляя WSDL от Axis и заменяя связанные классы JAXB в унаследованном коде.При этом нам нужно провести рефакторинг, но это было хорошо.В тот момент, когда мы помещаем сгенерированные классы, все работает нормально.:)

...