Создание запроса мыла без пространств имен ns1, ns2, ns3 - PullRequest
0 голосов
/ 27 августа 2018

Я реализую клиент веб-службы, и его запрос должен выглядеть следующим образом. Он работает с soap-ui.

     <soapenv:Envelope 
     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:met="http://tempuri.org/">
     <soapenv:Header>
     <met:Authentication>
     <met:Username>test</met:Username>
     <met:Password>test</met:Password>
     </met:Authentication>
     </soapenv:Header>
     <soapenv:Body>
     <met:UpdateOrder>
     <met:ID>5311221</met:ID>
     <met:Status>true</met:Status>
     </met:UpdateOrder>
     </soapenv:Body>
     </soapenv:Envelope>

Мне нужно добавить заголовок аутентификации, и моя работа пока ниже,

            SOAPHeaderElement header=new 
            SOAPHeaderElement("http://tempuri.org/","met");
            header.setActor(null);
            MessageElement usernameToken = new MessageElement(new 
            QName("Authentication","met"));

            header.addChild(usernameToken);

            MessageElement userToken = new MessageElement(new 
            QName("Username","met"));
            userToken.addTextNode(userName);
            usernameToken.addChild(userToken);

            MessageElement passToken = new MessageElement(new 
            QName("Password","met"));
            passToken.addTextNode(password);


            usernameToken.addChild(passToken);
            _stub.setHeader(header);

Таким образом, я получаю ниже запроса

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<ns1:met soapenv:mustUnderstand="0" xmlns:ns1="http://tempuri.org/">
<ns2:met xmlns:ns2="Authentication">
<ns3:met xmlns:ns3="Username">test</ns3:met>
<ns4:met xmlns:ns4="Password">test</ns4:met>
</ns2:met>
</ns1:met>
</soapenv:Header>
<soapenv:Body>
<UpdateOrder xmlns="http://tempuri.org/">
<ID>4576175</ID>
<Status>true</Status>
</UpdateOrder>
</soapenv:Body>

И мой вопрос, что я должен сделать, чтобы получить рабочий запрос.Мне нужно удалить пространства имен ns1, ns2.

Спасибо за помощь.

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, что вы делаете какое-то ненужное добавление пространства имен и добавляете несколько узлов XML, после простой модификации вашего кода должна быть возможность добавить заголовок, который вы хотите добавить.

    SOAPHeaderElement header=new SOAPHeaderElement("http://tempuri.org/","Authentication");
    //**set the prefix met, though not necessary, the parser will default it to ns1 or something**/
    header.setPrefix("met");
    /**Add the username Node**/
    SOAPElement user=header.addChildElement("userName");
    /**Add the userName text**/
    user.addTextNode("MyName");
    /**Add the password node**/
    SOAPElement password=header.addChildElement("password");
    /**Add the password text**/
    password.addTextNode("myPass");
    /** Print the header if you wish to**/
    System.out.println(header);     
    /**set the header to stub, that's all, I think, you may setActor and mustunderstand**/
    _stub.setHeader(header);

Надеюсь, это поможет.

...