如何防止在 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 绑定文件中使用 <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位置?