#java #wsdl #jaxb #cxf
#java #wsdl #jaxb #cxf
Вопрос:
Я создаю первый веб-сервис WSDL с помощью JAXB и CXF. У меня нет WSDL, поэтому я не могу вносить в него изменения. Я использую ftp://ftp.ihe.net/TF_Implementation_Material/ITI/wsdl/PIXManager.wsdl в качестве моего WSDL. Я использовал CXF 2.3.0 для генерации классов Java.
Генерация класса Java прошла нормально, но когда я пытаюсь запустить это в веб-приложении, я получаю сообщение об ошибке
com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 17 counts of IllegalAnnotationExceptions
17 отсчетов имеют формат
There's no ObjectFactory with an @XmlElementDecl for the element {urn:hl7-org:v3}assignedDevice.
this problem is related to the following location:
at protected javax.xml.bind.JAXBElement org.hl7.v3.QUQIMT021001UV01AuthorOrPerformer.assignedDevice
Когда я захожу в упомянутый класс, то есть QUQIMT021001UV01AuthorOrPerformer и смотрю на поле assignedDevice , я вижу это
@XmlElementRef(name = "assignedDevice", namespace = "urn:hl7-org:v3", type = JAXBElement.class)
protected JAXBElement<COCTMT090300UV01AssignedDevice> assignedDevice;
Когда я смотрю на ObjectFactory пакета, я вижу это
private final static QName _COCTMT090303UV01AssignedDeviceAssignedDevice_QNAME = new QName("urn:hl7-org:v3", "assignedDevice");
Все мои 17 ошибок похожи. Что я могу сделать во время моего codegen или среды выполнения, чтобы заставить мой сервис работать?
Комментарии:
1. Я использовал несколько WSDL в своем codegen, и это вызывало конфликт в этих определениях. Я сократил его до одного WSDL, и он отлично работает. Однако я хотел бы посмотреть, как использовать несколько WSLD, используемых в codegen.
Ответ №1:
Какую версию Java вы используете во время выполнения? У меня была аналогичная проблема со схемой OTA при запуске с Java 6. Я устранил проблему, внеся следующие изменения в конфигурацию Maven:
- Используйте JAXB impl 2.1.* (вместо 2.2) с
provided
областью видимости, чтобы соответствовать версии JAXB, включенной в Java 6. - Используйте JAX-WS 2.1 (вместо 2.2), чтобы соответствовать Java 6 и JAXB 2.1.x.
- Добавьте опцию
frontEnd
в подключаемый модуль Mavencxf-codegen-plugin
и установите для нее значениеjaxws21
(или, если используетеwsdl2java
в командной строке, используйте опцию «-fe jaxws21
«).
Комментарии:
1. Спасибо за ваши идеи. Я пробовал эти вещи и, наконец, решил отказаться от Java / CXF для обработки этих сервисов. Я решил создать контроллер Spring на основе Groovy, который использует обработку Xml GroovyGoodness ™.
Ответ №2:
Когда вы генерируете классы, вы также генерируете файл с именем jaxb.properties. Убедитесь, что этот файл доступен приложению во время выполнения. У меня была такая же проблема, и это было связано с упаковкой maven: maven не будет включать в пакет файлы ресурсов (например, jaxb.properties), которые находятся ниже дерева src / main / java, если специально не указано, чтобы сделать это. Я сделал это с помощью org.codehaus.mojo:build-helper-maven-plugin с целью добавления ресурса. Надеюсь, это поможет
Ответ №3:
Я столкнулся с подобной ошибкой, и причиной были конфликты между сгенерированными веб-сервисами заглушками java-классов.
если приведенные выше ответы не работают, попробуйте поискать конфликты.
добавляйте по одной заглушке за раз и добавляйте постепенно.
надеюсь, это поможет