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

yhxst69z  于 2023-02-28  发布在  Java
关注(0)|答案(3)|浏览(91)

我正在尝试使用CXF创建一个Web服务客户端来使用WCF Web服务。当我使用wsdl2java时,它会生成JAXBElement类型的对象,而不是String。
我了解到使用jaxb bindings.xml文件来设置generateElementProperty=“false”以尝试修复此问题,但我使用的Web服务包含7个导入的模式。
如何在所有七个模式上指定generateElementProperty="false",或者是否有办法将其应用于所有模式?

a64a0gku

a64a0gku1#

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

4zcjmb1e2#

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

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

cunj1qz13#

如果我们使用的是与Jakarta EE兼容的CXF版本,则应将语法更改为:

<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings xmlns:jaxws="https://jakarta.ee/xml/ns/jaxws"
  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="https://jakarta.ee/xml/ns/jaxb"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <jxb:globalBindings generateElementProperty="false"/>
</jaxws:bindings>

相关问题