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