【问题标题】:Solved ! Error reading XMLStreamReader: Unexpected character SOAP API解决了 !读取 XMLStreamReader 时出错:意外的字符 SOAP API
【发布时间】:2019-09-11 07:09:49
【问题描述】:

我正在尝试与 SOAP API https://www.flussituristici.servizirl.it/Turismo5/app/ws/checkinV1?wsdl 通信 使用 Savon gem。

到目前为止,我已经实现了以下代码:

  def client
    client = Savon.client(
      wsdl: "https://www.flussituristici.servizirl.it/Turismo5/app/ws/checkinV1?wsdl",
      host: "https://www.flussituristici.servizirl.it/Turismo5/app/ws/checkinV1",
      soap_header: { 'Authorization:' => "Basic #{Base64.strict_encode64("username: password")}"},
      log: true,
      pretty_print_xml: true
    )
    client.call(:invia_movimentazione, message: message, soap_action: '')
  end

  def message
    {
      movimenti:
      {
        codice: "S00352",
        prodotto: "XXXXX",
        movimento:
        [
          {
            data: "20190911",
            struttura:
              {
                apertura: "SI",
                camereoccupate: "10",
                cameredisponibili: "16",
                lettidisponibili: "34"
              }
          },
          {
            data: "20190911",
            struttura:
            {
              apertura: "SI",
              camereoccupate: "9",
              cameredisponibili: "16",
              lettidisponibili: "34"
            }
          }
        ]
      }
    }
  end 

但我收到以下错误响应:

D, [2019-09-11T06:45:28.544608 #12024] DEBUG -- : HTTPI /peer GET request to www.flussituristici.servizirl.it (net_http)
I, [2019-09-11T06:45:29.557382 #12024]  INFO -- : SOAP request: https://www.flussituristici.servizirl.it/Turismo5/app/ws/checkinV1
I, [2019-09-11T06:45:29.562181 #12024]  INFO -- : SOAPAction: "", Content-Type: text/xml;charset=UTF-8, Content-Length: 925
D, [2019-09-11T06:45:29.576008 #12024] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://checkin.ws.service.turismo5.gies.it/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Header>
    <Authorization:>Basic TUk0OTg1231d01kTmNXKkp2N3I123</Authorization:>
  </env:Header>
  <env:Body>
    <tns:inviaMovimentazione>
      <movimenti>
        <codice>S00352</codice>
        <prodotto>XXXXX</prodotto>
        <movimento>
          <data>20190911</data>
          <struttura>
            <apertura>SI</apertura>
            <camereoccupate>10</camereoccupate>
            <cameredisponibili>16</cameredisponibili>
            <lettidisponibili>34</lettidisponibili>
          </struttura>
        </movimento>
        <movimento>
          <data>20190911</data>
          <struttura>
            <apertura>SI</apertura>
            <camereoccupate>9</camereoccupate>
            <cameredisponibili>16</cameredisponibili>
            <lettidisponibili>34</lettidisponibili>
          </struttura>
        </movimento>
      </movimenti>
    </tns:inviaMovimentazione>
  </env:Body>
</env:Envelope>

D, [2019-09-11T06:45:29.580471 #12024] DEBUG -- : HTTPI /peer POST request to www.flussituristici.servizirl.it (net_http)
I, [2019-09-11T06:45:30.455910 #12024]  INFO -- : SOAP response (status 500)
D, [2019-09-11T06:45:30.457178 #12024] DEBUG -- : <?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <soap:Fault>
      <faultcode>soap:Client</faultcode>
      <faultstring>Error reading XMLStreamReader: Unexpected character '&gt;' (code 62) (expected a name start character)
 at [row,col {unknown-source}]: [1,289]</faultstring>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

Savon::SOAPFault: (soap:Client) Error reading XMLStreamReader: Unexpected character '>' (code 62) (expected a name start character)
 at [row,col {unknown-source}]: [1,289]
from /usr/local/rvm/gems/ruby-2.0.0-p648/gems/savon-2.11.2/lib/savon/response.rb:85:in `raise_soap_and_http_errors!'

这个错误说明了什么?如何调试?

更新: 初始化 Savon 客户端时出现问题,文档说我需要像以前一样发送 Base43 编码的“用户名”:“密码”,但只需发送用户名和密码,如下所示。

def client
  client = Savon.client(
      wsdl: END_POINT,
      basic_auth: ["username", "password"],
      log: true,
      pretty_print_xml: true
    )
  client.call(:invia_movimentazione, message: message, soap_action: '')
end

【问题讨论】:

    标签: ruby-on-rails ruby api soap savon


    【解决方案1】:

    在第一步中,我使用SoapUI 创建一个有效的请求。 如果我能完成这项工作,那么我将与 Savon 创建相同的请求。 对于调试,您应该在创建客户端时包含 log_level: :debug

    从您的问题来看,授权标签似乎有些奇怪。标签中有一个冒号,通常将命名空间与标识符分开。

    而不是&lt;Authorization:&gt;,我希望得到类似&lt;Authorization:identifier&gt;

    【讨论】:

    • 谢谢,我在发布问题后也尝试了授权:D
    猜你喜欢
    • 2018-04-18
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2012-08-06
    相关资源
    最近更新 更多