Как предотвратить создание JAXBElement <String> в клиенте веб-службы CXF?
Я пытаюсь создать клиент веб-службы, используя CXF, чтобы использовать веб-службу WCF.
Когда я использую wsdl2java, он генерирует объекты с типами JAXBElement вместо String.
Я прочитал об использовании файла jaxb bindings.xml, чтобы установить generateElementProperty = "false", чтобы попытаться устранить проблему, но веб-служба, которую я потребляю, содержит 7 импортированных схем.
Как я могу указать generateElementProperty="false"
на всех семи схемах, или есть способ применить его ко всем схемам?
Ответы
Ответ 1
Вам нужно создать файл привязки, как показано ниже, это будет применяться глобально и использовать его как
wsdl2java - b "bindings.txt" "wsdl"
<jaxb:bindings version="2.1"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>
Ответ 2
Обратите внимание, что в моем случае мне пришлось использовать <xjc:simple
в моем файле привязки jaxb, чтобы избавиться от JAXBElement
запросов и ответов @Endpoint
в @Endpoint
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" elementFormDefault="qualified" attributeFormDefault="unqualified" jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.1">
<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings>
<xjc:simple /><!-- it did only work after adding this -->
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>
</xs:schema>