Как предотвратить генерацию JAXBElement <String>в клиенте веб-службы CXF? - PullRequest
47 голосов
/ 11 декабря 2010

Я пытаюсь создать клиент веб-службы, использующий CXF для использования веб-службы WCF. Когда я использую wsdl2java, он генерирует объекты с типами JAXBElement вместо String.

Я читал об использовании файла jaxb bindings.xml для установки generateElementProperty = "false", чтобы попытаться устранить проблему, но используемый мной веб-сервис содержит 7 импортированных схем.

Как я могу указать generateElementProperty="false" во всех семи схемах или есть способ применить его ко всем схемам?

Ответы [ 2 ]

65 голосов
/ 03 января 2011

Вы должны создать файл привязки, как показано ниже, он будет применен глобально и будет использоваться как 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> 
0 голосов
/ 13 июня 2019

Обратите внимание, что в моем случае мне пришлось использовать <xjc:simple в моем файле привязки jaxb, чтобы избавиться от JAXBElement оболочки запросов и ответов в @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>
...