построение данных запроса для конечной точки SOAP без WSDL - PullRequest
0 голосов
/ 10 октября 2019

URL-адрес конечной точки выглядит следующим образом (не фактический URL) https://webservices.abcde.com/ThirdParty/PostData.V55.ashx/ProcessRequest

У него нет WSDL, и в документации приведен пример XML-запроса.

Это огромный,Я добавляю первые пару строк из этого ниже.

<MESSAGE xmlns:agentnet="http://services.abcde.com/entity/agentnet/v2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.mismo.org/residential/2009/schemas/v32">
<ABOUT_VERSIONS>
  <ABOUT_VERSION>
    <AboutVersionIdentifier>ClientSystem</AboutVersionIdentifier>
    <DataVersionIdentifier>1.0</DataVersionIdentifier>
    <DataVersionName>ASDFSFD</DataVersionName>
  </ABOUT_VERSION>
</ABOUT_VERSIONS>
<DEAL_SETS>
  <DEAL_SET>
        <DEALS>
          <DEAL>
            <PARTIES/>
            <SERVICES>
              <SERVICE>
                <SERVICE_PRODUCT>
                  <SERVICE_PRODUCT_REQUEST>
                    <EXTENSION>
                      <OTHER>
                        <agentnet:AGENTNET_PRODUCT_REQUEST>
<agentnet:AgentNetServiceType>GET_DATA</agentnet:AgentNetServiceType>
                          <agentnet:AGENTNET_GET_DATA>
                            <agentnet:GetRequestType>ACCOUNTS</agentnet:GetRequestType>
                          </agentnet:AGENTNET_GET_DATA>
                        </agentnet:AGENTNET_PRODUCT_REQUEST>
...
...
...
...
... (the XML is huge)

С другими конечными точками я смог использовать библиотеку SOAP, такую ​​как savon, для генерации полезной нагрузки XML с использованием небольшого Ruby Hash (словаря).

Я полагаю, это было возможно, потому что это были WSDL?

Можно ли было бы генерировать полезную нагрузку таким же образом, передавая только некоторые важные данные (например, GET_DATA и ACCOUNTSв примере), или я должен вручную создавать строки полезной нагрузки XML вручную (может быть, с использованием некоторой библиотеки XML)?

Я действительно хочу избегать ручного создания полезных нагрузок XML, так как код не будет читаемым и его будет трудноработать в общем. Есть ли способ избежать этого?

1 Ответ

0 голосов
/ 10 октября 2019

Вы можете окончательно создать клиент Savon без использования WSDL. Мне лично это нравится больше, потому что я считаю, что это более производительно.

Вы должны определить endpoint и namespace при создании своего клиента, как в этом вымышленном примере:

require 'savon'

c = Savon.client(endpoint: "http://www.example.com",
                 namespace: "urn:ns.example.com",
                 log: true,
                 log_level: :debug,
                 pretty_print_xml: true)

r = c.call(:call,
           :message => { 
                  :InquiryParam => [ 
                         {"crmParam" => 123,
                        :attributes! => { "crmParam" => { "name" => "AccountNumber" }}},
                         {"crmParam" => 456,
                        :attributes! => { "crmParam" => { "name" => "history" }}}
                        ]
                  }
          )
...