如何防止在CXF Web服务客户端中生成JAXBElement <string>?</string>

时间:2010-12-10 21:01:08

标签: java wcf web-services jaxb cxf

我正在尝试使用CXF创建一个Web服务客户端来使用WCF Web服务。 当我使用wsdl2java时,它使用JAXBElement类型而不是String生成对象。

我读到了使用jaxb bindings.xml文件来设置generateElementProperty =“false”以尝试修复问题,但我正在使用的Web服务包含7个导入的模式。

如何在所有七个模式中指定generateElementProperty="false",或者是否有办法将其应用于所有模式?

2 个答案:

答案 0 :(得分:65)

您必须创建一个绑定文件,如下所示,这将全局应用并将其用作 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> 

答案 1 :(得分:0)

请注意,就我而言,我必须在jaxb绑定文件中使用<xjc:simple来摆脱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>