Основные аутентификационные данные с использованием заголовков в мыле на Groovy - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь подключиться к серверу WSDL, который требует базовой аутентификации вместе с телом. Я попытался ударить с помощью SOAPUI и смог это сделать. Работая на то же самое в Groovy и используя пакет wslite для вызова SOAP, я получаю сообщение об ошибке «Требуется пароль».

Я попробовал учебник на https://github.com/jwagenleitner/groovy-wslite,, но описанный метод (в блоке использования) не помог. Я использую заводную для этого.

Ниже приведен необработанный код из SOAP UI с ответом 200OK

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:w="http://xmlns.oracle.com/Enterprise/Tools/schemas/W_CHKLST_CREATE_REQ.1">
   <soapenv:Header><wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsse:UsernameToken wsu:Id="UsernameToken-83C962CC24EAB67F1D15586306447678"><wsse:Username>userName</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password><wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">JLTdeK6Yg3D64+2qz5xnbA==</wsse:Nonce><wsu:Created>2019-05-23T16:57:24.767Z</wsu:Created></wsse:UsernameToken></wsse:Security></soapenv:Header>
   <soapenv:Body>
      <w:helloWorld/>
   </soapenv:Body>
</soapenv:Envelope>

, что приводит к 200OK от SOAPUI

HTTP/1.1 200 OK
Date: Wed, 22 May 2019 21:54:12 GMT
Content-Type: text/xml; charset=UTF-8
Content-Length: 3570

Мой Groovy код,

def client = new SOAPClient("URL of WSDL")
def response = client.send(SOAPAction: "someAction",
                connectTimeout:10000,
                readTimeout:20000,
                useCaches:false,
                followRedirects:false) {
            version SOAPVersion.V1_2 // SOAPVersion.V1_1 is default
            soapNamespacePrefix "soapenv"      // "soap-env" is default
            envelopeAttributes "xmlns:ns":"http://example.weather.org"
            header {
                security("xmlns:ns20":"http://SecurityOpenXSD"){
                    "ns20:Username"("username")
                    "ns20:Password"("password")
                    }
                }



            body {
                "ns:helloWorld" {

                }
            }
        }

, который дает мыло XML как

    <soapenv:Header>
<wsse:Security soapenv:mustUnderstand='1' 
xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' 
xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'>
<wsse:UsernameToken wsu:Id='UsernameToken-83C962CC24EAB67F1D15586299636605'>
<wsse:Username>userName</wsse:Username>
<wsse:Password 
Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'>
password
</wsse:Password>
<wsse:Nonce 
    EncodingType='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary'>
    JLTdeK6Yg3D64+2qz5xnbA==
</wsse:Nonce>
<wsu:Created>2019-05-23T10:07:52.913Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
  </soapenv:Header>

Но я получаю сообщение об ошибке в качестве пароля

<?xml version="1.0" ?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope">
    <SOAP-ENV:Body>
    <SOAP-ENV:Fault>
    <Code><Value>SOAP-ENV:Receiver</Value></Code>
    <Reason><Text>null</Text></Reason>
    <Detail><IBResponse type="error" xmlns=""><DefaultTitle> Error Response</DefaultTitle>
    <StatusCode>20</StatusCode>
    <DefaultMessage><![CDATA[User Password required]]></DefaultMessage>
    </IBResponse></Detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...