XML-запрос SOAP, возвращающий ошибку «Запрос неправильно сформирован» - PullRequest
0 голосов
/ 17 октября 2019

Я конвертирую код Python в Java. Код представляет собой клиентский код SOAP 1.5, который взаимодействует с конечной точкой сервера SOAP.

Что не имеет смысла, так это то, что код Python отправляет XML-запрос и получает принятый ответ от сервера. Однако в коде Java ответом является ошибка, в которой говорится, что «запрос сформирован некорректно».

Ниже я показываю запросы XML, один из которых отправляется в Python, а другой - в Java. Как Java, отправленный Java, может вернуть ошибку, но Python в порядке / принят. Оба они являются действительными запросами. Или, возможно, я упускаю что-то очевидное.

Запрос на Python:

<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
    xmlns:wsa="http://www.w3.org/2005/08/addressing"
    xmlns:cs="urn://Ocpp/Cp/2012/06/">
    <SOAP-ENV:Header>
        <cs:chargeBoxIdentity>Test</cs:chargeBoxIdentity>
        <wsa:MessageID>Fake OCPP571322528896</wsa:MessageID>
        <wsa:Action>/ChangeConfiguration</wsa:Action>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <cs:changeConfigurationRequest>
            <cs:key>LaMa_ConnectionRate</cs:key>
            <cs:value>5120</cs:value>
        </cs:changeConfigurationRequest>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Запрос на Java:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:cs="urn://Ocpp/Cp/2012/06/"
    xmlns:wsa="http://www.w3.org/2005/08/addressing">
    <SOAP-ENV:Header>
        <cs:chargeBoxIdentity>Test</cs:chargeBoxIdentity>
        <wsa:Action>/ChangeConfiguration</wsa:Action>
        <wsa:MessageID>Fake OCPP571322528896</wsa:MessageID>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <cs:changeConfigurationRequest>
            <cs:key>LaMa_ConnectionRate</cs:key>
            <cs:value>5120</cs:value>
        </cs:changeConfigurationRequest>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Ошибка ответа на Java:

<?xml version="1.0" encoding="UTF-8"?><env:Envelope 
xmlns:env="http://www.w3.org/2003/05/soap-envelope">
  <env:Header/>
  <env:Body>
    <env:Fault>
      <env:Code>
        <env:Value>env:Sender</env:Value>
      </env:Code>
      <env:Reason>
        <env:Text xml:lang="en-US">XML Request is not well formed!</env:Text>
      </env:Reason>
    </env:Fault>
  </env:Body>
</env:Envelope>

Обновление:

Мой код Java должен отправлять "http://www.w3.org/2003/05/soap-envelope" для" SOAP-ENV ", как показано ниже в моем коде. Однако он каким-то образом отправляет" http://schemas.xmlsoap.org/soap/envelope/"вместо. Я не понимаю почему.

// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope");
...