Импорт Delphi 10.2 SOAP WSDL — форматирование XML по электронной почте

avatar
fisi-pjm
9 августа 2021 в 07:04
189
0
0

Существует очень простой интерфейс SOAP для системы ERP. Я попытался поговорить с этой системой, импортировав файл WSDL через Delphi WSDL Importer. Все работает правильно, как и ожидалось.

Порт присутствует, интерфейс присутствует, объект HTTPRIO добавлен с помощью BasicAuth, все в порядке. к сожалению, когда я отправляю данные в службу, сервер не может обрабатывать данные. Чем я пытался использовать SOAP-UI с тем же файлом WSDL для этой службы. Все работает нормально. Поэтому я использую Wireshar, чтобы определить разницу между этим сетевым трафиком и думаю, что нашел проблему. Во-первых, это XML-файлы из этих двух систем. Первый работающий интерфейс SOAP:

<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
    <soapenv:Header/>
    <soapenv:Body>
        <urn:ZxftSamWsRecCrea>
            <!--Optional:-->
            <ImCustomerId>
                007
                </ImCustomerId>
            <!--Optional:-->
            <ImSearchVal>
                MASCHINE
                </ImSearchVal>
            <ImVkc>
                0815
                </ImVkc>
            <!--Optional:-->
            <ImVkcDescr>
                Test VKC
                </ImVkcDescr>
            </urn:ZxftSamWsRecCrea>
        </soapenv:Body>
    </soapenv:Envelope>

А вот XML-файл, созданный Delphi:

<?xml
    version="1.0"
    ?>
      <SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Body>
        <ZxftSamWsRecCrea
            xmlns="urn:sap-com:document:sap:soap:functions:mc-style">
            <ImCustomerId
                xmlns="">007
                </ImCustomerId>
            <ImSearchVal
                xmlns="">MASCHINE
                </ImSearchVal>
            <ImVkc
                xmlns="">0815
                </ImVkc>
            <ImVkcDescr
                xmlns="">Test VKC
                </ImVkcDescr>
            </ZxftSamWsRecCrea>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

3 вопроса в моей голове по этому поводу:

  1. Нужна ли мне эта информация о версии XML или ее можно удалить. И как мне этого добиться?
  2. Как избавиться от этих пустых пространств имен?
  3. Разве пространство имен для "urn:sap-com:document:sap:soap:functions:mc-style" не на том узле? Как это можно исправить или это не важно?
Источник
Olivier
9 августа 2021 в 08:24
0

Если не считать отсутствующего элемента Header, документы выглядят эквивалентно мне. Вы получаете сообщение об ошибке?

fisi-pjm
9 августа 2021 в 08:41
0

Я получаю только тайм-ауты. Но это ошибка со стороны сервера. Я получаю тайм-аут даже при использовании пользовательского интерфейса SOAP. Но с SOAP-UI данные появляются в системе ERP.

Olivier
9 августа 2021 в 08:57
0

Странный. Первое, что нужно сделать, это исследовать этот тайм-аут.

fisi-pjm
9 августа 2021 в 09:17
0

Это вещь, которую я не могу сделать, это должна сделать команда программного обеспечения ERP. Это определенно то, что нужно сделать до того, как интерфейс заработает продуктивно, но в этот момент моя единственная цель — изменить мой код Delphi таким образом, чтобы он выглядел как тот, который работает.

Michael Kay
9 августа 2021 в 10:20
1

Как говорит @Olivier, единственное существенное отличие — это отсутствие элемента Header. Возможно, сервер расстраивается из-за различий, которые не должны быть значительными, но вместо того, чтобы настраивать это, я бы сосредоточился на (а) улучшении диагностики того, почему документ отклонен, и (б) исправлении отсутствующего заголовка. (Я не знаком с Delphi, но если бы знал, я бы сказал, что если вам нужен совет, как изменить ваш код Delphi, было бы неплохо показать нам этот код.)

fisi-pjm
9 августа 2021 в 11:54
0

@MichaelKay Думаю, ты меня неправильно понял. Под отсутствующим заголовком вы подразумеваете "<?xml version="1.0"?>"? Это выход, который создает Delphi, который НЕ работает.

Michael Kay
9 августа 2021 в 13:54
1

Нет, я имел в виду пустой элемент <soapenv:Header/>. XML-декларация хороша (оно в необычном, но совершенно законном формате), и любой анализатор XML примет его. (Исключение элемента <soapenv:Header/> также допустимо, согласно спецификации SOAP.) Я думаю, что реальная проблема здесь в том, что вы не знаете, в чем проблема, и пытаетесь решить ее методом проб и ошибок. Вам нужна диагностика.

fisi-pjm
9 августа 2021 в 15:26
0

@MichaelKay Спасибо, что указали на это, я упустил тот факт, что есть пустой заголовок. Даже странно, что этот XML работает. Я постараюсь получить больше диагностической информации. Сейчас я на связи с разработчиком программного обеспечения ERP.

Ответы (0)