J'essaie de créer un client de service Web à l'aide de CXF pour consommer un service Web WCF. Lorsque j'utilise wsdl2Java, il génère des objets avec des types JAXBElement au lieu de String.
J'ai lu comment utiliser un fichier jaxb bindings.xml pour définir generateElementProperty = "false" pour essayer de résoudre le problème, mais le service Web que je consomme contient 7 schémas importés.
Comment puis-je spécifier le generateElementProperty="false"
sur les sept schémas, ou existe-t-il un moyen de l'appliquer à tous les schémas?
Vous devez créer un fichier de liaison comme ci-dessous, cela sera appliqué globalement et l'utiliser comme 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>
Notez que dans mon cas, j'ai dû utiliser <xjc:simple
dans mon fichier de liaison jaxb pour se débarrasser des enveloppes de demande et de réponse JAXBElement
dans @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>