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

Posted

技术标签:

【中文标题】如何防止在 CXF Web 服务客户端中生成 JAXBElement<String>?【英文标题】:How do I prevent JAXBElement<String> from being generated in a CXF Web Service client? 【发布时间】:2011-05-23 17:35:41 【问题描述】:

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

我阅读了有关使用 jaxb bindings.xml 文件设置 generateElementProperty="false" 以尝试解决问题的信息,但我使用的 Web 服务包含 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> 

【讨论】:

cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html 有关如何使用 maven 插件设置绑定文件的说明。 最好为映射文件使用更具体的文件扩展名,例如.xml.xjb,这里建议docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/… 如果您的 XSD 或 WSDL 中已经有 jaxb:globalBindings,只需将 generateElementProperty="false" 属性添加到该节点即可。在这种情况下不需要添加另一个 binding.xml。 @ScArcher2 太棒了.. 谢谢.. 我正在使用第三方 wsdl 所以制作了这个 xml 文件,如主要答案所示,并在 pom.xml 中定义它,如链接所示。它奏效了。 如果我使用这个绑定文件发布和返回的数据是空的。【参考方案2】:

请注意,在我的例子中,我必须在我的 jaxb 绑定文件中使用 &lt;xjc:simple 来摆脱 @Endpoint 中的 JAXBElement 请求和响应包装器:

<?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>

【讨论】:

以上是关于如何防止在 CXF Web 服务客户端中生成 JAXBElement<String>?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在CXF或JAX-WS生成的Web服务客户端中指定WSDL位置?

java web项目(spring项目)中集成webservice ,实现对外开放接口

apache cxf的jax-rs和jax-ws的区别

如何使用CXF调用webservice接口

在 JavaScript 中生成随机元素位置并防止重叠

Web Service 实现之CXF