【问题标题】:Including XML format in WSDL在 WSDL 中包含 XML 格式
【发布时间】:2019-12-04 17:00:34
【问题描述】:

我的方法签名如下所示:

public String test(@WebParam(name = "INPUTPACKET") String inputPacket)

问题在于 inputPacket 参数接受 XML,而 WSDL 文件结构将 inputPacket 显示为字符串类型,那么如何让 WSDL 适应我希望输入数据包包含的 XML 结构

我尝试手动编辑 WSDL 以适应 XML 结构,然后将 API 调用发送到我的方法,但它失败并显示如下错误:

org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element (uri:"", local:"RESPONSEPACKET"). Expected elements are (none)

【问题讨论】:

    标签: soap wsdl java-7 soap-client wsdl2java


    【解决方案1】:

    在 SOAP 服务中,string 可以有 XML。你唯一需要确保你escapeXML正确,或者使用[CDATA]1

    例如,您的 XML 将如下所示-

    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
    soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <soap:Body>
      <m:GetPrice xmlns:m="https://www.w3schools.com/prices">
        <m:example>
    <![CDATA[<data>
     XML Example
    </data>]]></m:example>
      </m:GetPrice>
    </soap:Body>
    </soap:Envelope>
    

    还有另一种选择,但以上一种更好。

    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
    soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <soap:Body>
      <m:GetPrice xmlns:m="https://www.w3schools.com/prices">
        <m:example>
    &lt;data&gt;
     XML Example
    &lt;/data&gt;</m:example>
      </m:GetPrice>
    </soap:Body>
    

    大部分 XML 解析器和 XML 库都支持这个特殊字符 escapingremove escaping

    根据评论更新: 是的,如果您甚至想为body(即XSD)提供XML 定义,您可以这样做。 这是简要的方法。

    <GetPrice   xmlns="https://www.example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="https://www.example.com/xml/price.xsd"></GetPrice>
    

    希望它会有所帮助。

    【讨论】:

    • @vlemaistre 我完全明白如何发送响应,但我的确切问题是,我希望我的 WSDL 文件显示 XML 数据包结构,以便不需要向使用 SOAP API 的人发送明确的 XML 数据包,而我做不到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多