SOAP запрос в JAVA. Как пройти HEADER - PullRequest
0 голосов
/ 03 января 2019

У меня проблема с запросом на создание SOAP.У меня есть запрос работ из командной строки с использованием curl

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 <s:Body>
  <u:SetVolume xmlns:u="urn:schemas-upnp-org:service:RenderingControl:1">
   <InstanceID>0</InstanceID>
   <Channel>Master</Channel>
   <DesiredVolume>20</DesiredVolume>
  </u:SetVolume>
 </s:Body>
</s:Envelope> | curl -v -d @-  -H 'SOAPAction: "urn:schemas-upnp-org:service:RenderingControl:1#SetVolume"'  -H 'content-type: text/xml; charset="utf-8"'  http://192.168.0.172:1400/MediaRenderer/RenderingControl/Control

Я пробовал эквивалент ящика в JAVA

  import javax.xml.namespace.QName;
import javax.xml.soap.*;

public class SOAPClientSAAJ {


    public static void main(String args[]) {
        try {
                MessageFactory mf = MessageFactory.newInstance();
                SOAPMessage sm = mf.createMessage();
                SOAPHeader sh = sm.getSOAPHeader();
                SOAPBody sb = sm.getSOAPBody();
                sh.detachNode();

                QName bodyName = new QName("urn:schemas-upnp-org:service:RenderingControl:1#SetVolume", "SetVolume", "u");
                SOAPBodyElement bodyElement = sb.addBodyElement(bodyName);

                QName instanceID = new QName("InstanceID");
                QName channel = new QName("Channel");
                QName volumeLevel = new QName("DesiredVolume");

                SOAPElement qInstanceID = bodyElement.addChildElement(instanceID);
                SOAPElement qChannel = bodyElement.addChildElement(channel);
                SOAPElement qVolumeLevel = bodyElement.addChildElement(volumeLevel);

                qInstanceID.addTextNode("0");
                qChannel.addTextNode("Master");
                qVolumeLevel.addTextNode("30");

                sm.writeTo(System.out);
                System.out.println();
        } catch(Exception e) {

        }
    }
}

Это дает мне запрос на сборку

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Body>
      <u:SetVolume xmlns:u="urn:schemas-upnp-org:service:RenderingControl:1#SetVolume">
         <InstanceID>0</InstanceID>
         <Channel>Master</Channel>
         <DesiredVolume>30</DesiredVolume>
      </u:SetVolume>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

К сожалению, это не хочет работать.Я полагаю, что проблема в HEADER, но на самом деле я не знаю, как передать их другим способом на мой запрос.Я также пробую решение от, но также получаю ошибку

SOAP-запрос к WebService с java

1 Ответ

0 голосов
/ 03 января 2019

Кажется, вы устанавливаете неправильное QName. То, что вы настраиваете, - это действие, так что кроме того, что ваш сгенерированный мыльный конверт в порядке, я бы посоветовал вам попытаться вызвать его с помощью SOAP UI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...