Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Не транслируются значения атрибутов в SOAP запрос / 6 сообщений из 6, страница 1 из 1
27.10.2016, 12:14
    #39335206
drno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не транслируются значения атрибутов в SOAP запрос
Здравствуйте.

У меня есть пример SOAP запроса

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
         <?xml version="1.0" encoding="UTF-8" ?>
         <SOAP:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
         <SOAP:Body>
         <GetParameter xmlns="http://examples/2001">
		 <request>
         <MonCode xmlns="http://newsite/mon">Latency</MonCode>
		 <TimeFrom xmlns="http://newsite/mon">2016-10-26T11:00</TimeFrom>
		 <TimeTo xmlns="http://newsite/mon">2016-10-26T12:00</TimeTo>
         </request>
		 </GetParameter>
         </SOAP:Body>
         </SOAP:Envelope>



Формирую SOAP запрос на JAVA, использую SAAJ API

следующий код

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
       MessageFactory messageFactory = MessageFactory.newInstance();
    SOAPMessage message = messageFactory.createMessage();
    SOAPPart soapPart = message.getSOAPPart();
    SOAPEnvelope envelope = soapPart.getEnvelope();
    envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
    envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
    envelope.addNamespaceDeclaration("soap", "http://schemas.xmlsoap.org/soap/envelop/");

    SOAPBody body = message.getSOAPBody();
    SOAPElement bodyElement = body.addChildElement("GetParameter");
    bodyElement.setAttribute("xmlns", "http://examples/2001");
    bodyElement = body.addChildElement("request");
    SOAPElement paramsElement = bodyElement.addChildElement("MonCode");
    paramsElement.setAttribute("xmlns", "http://newsite/mon");
    paramsElement.addTextNode("Latency");
    paramsElement = bodyElement.addChildElement("TimeFrom");
    paramsElement.setAttribute("xmlns", "http://newsite/mon");
    paramsElement.addTextNode("2016-10-26T11:00");
    paramsElement = bodyElement.addChildElement("TimeTo");
    paramsElement.setAttribute("xmlns", "http://newsite/mon");
    paramsElement.addTextNode("2016-10-26T12:00");



в результате получаю такой SOAP запрос

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelop/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <GetParameter xmlns=""/>
    <request>
      <MonCode xmlns="">Latency</MonCode>
      <TimeFrom xmlns="">2016-10-26T11:00</TimeFrom>
      <TimeTo xmlns="">2016-10-26T12:00</TimeTo>
    </request>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>



Все хорошо, НО куда-то деваются значения атирибутов " http://examples/2001" " http://newsite/mon".

В чем моя ошибка и как решить эту проблему?
...
Рейтинг: 0 / 0
27.10.2016, 12:24
    #39335229
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не транслируются значения атрибутов в SOAP запрос
drnoФормирую SOAP запрос на JAVA, использую SAAJ API

Странный выбор инструмента. Ну, да ладно.

drnoВсе хорошо, НО куда-то деваются значения атирибутов " http://examples/2001" " http://newsite/mon".
В чем моя ошибка и как решить эту проблему?
Ошибка в том что это не атрибуты, а namespace declaration.
https://www.safaribooksonline.com/library/view/java-soa-cookbook/9780596156091/ch05s09.html
...
Рейтинг: 0 / 0
27.10.2016, 15:55
    #39335549
drno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не транслируются значения атрибутов в SOAP запрос
немного разобрался с NAME

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();

// Retrieve different parts
        SOAPPart soapPart = soapMessage.getSOAPPart();
        SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();

        soapEnvelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
        soapEnvelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
        soapEnvelope.addNamespaceDeclaration("soap", "http://schemas.xmlsoap.org/soap/envelop/");

// Two ways to extract headers
        SOAPHeader soapHeader = soapEnvelope.getHeader();
        soapHeader = soapMessage.getSOAPHeader();

// Two ways to extract body
        SOAPBody soapBody = soapEnvelope.getBody();
        soapBody = soapMessage.getSOAPBody();

// To add some element
        SOAPFactory soapFactory = SOAPFactory.newInstance();
        Name bodyName  = soapFactory.createName("GetParameter","","http://examples/2001");
        SOAPBodyElement purchaseLineItems = soapBody.addBodyElement(bodyName);
        Name request = soapFactory.createName("request");
        SOAPElement paramsElement = purchaseLineItems.addChildElement(request);

        Name MonCode=soapFactory.createName("MonCode","","http://newsite/mon");
        Name TimeTo=soapFactory.createName("TimeTo","","http://newsite/mon");
        paramsElement=paramsElement.addChildElement(MonCode);
        paramsElement.addTextNode("Latency");

        Name TimeFrom=soapFactory.createName("TimeFrom","","http://newsite/mon");
        paramsElement=paramsElement.addChildElement(TimeFrom);
        paramsElement.addTextNode("2016-10-26T11:00");



первый вопрос ушел, НО нарисовался другой каким образом сделать так, чтобы TimeFrom не привязывался под MonCode
а был таким же как MonCode по отношению к request ?

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelop/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header/>
<SOAP-ENV:Body>
<GetParameter xmlns="http://examples/2001">
<request>
<MonCode xmlns="http://newsite/mon">Latency<TimeFrom>2016-10-26T11:00</TimeFrom></MonCode>
</request>
</GetParameter>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
...
Рейтинг: 0 / 0
27.10.2016, 16:19
    #39335583
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не транслируются значения атрибутов в SOAP запрос
drno,

А зачем вы paramsElement каждый раз заново присваиваете? Постарайтесь переменные называть в соответствии с вашим XML.
У вас в XML нет никаких params, поэтому что вы там в paramsElement держите - загадка.

Но, конечно, основной вопрос зачем такие мучения, когда есть JAXWS.
...
Рейтинг: 0 / 0
27.10.2016, 16:50
    #39335627
drno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не транслируются значения атрибутов в SOAP запрос
Blazkowicz,

ответ на основной вопрос - таковы не мои требования...

как сделать, чтобы элементах MonCode, TimeFrom, TimeTo транслировался http://newsite/mon? а не http://examples/2001

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        SOAPFactory soapFactory = SOAPFactory.newInstance();
        Name bodyName  = soapFactory.createName("GetParameter","","http://examples/2001");
        SOAPBodyElement GetParameter = soapBody.addBodyElement(bodyName);

        QName childName = new QName("request");
        SOAPElement request = GetParameter.addChildElement(childName);

        childName = new QName("MonCode");
        SOAPElement MonCode = request.addChildElement(childName);
        MonCode.setAttribute("xmlns", "http://newsite/mon");
        MonCode.addTextNode("Latency");

        childName = new QName("TimeFrom");
        SOAPElement TimeFrom = request.addChildElement(childName);
        TimeFrom.setAttribute("xmlns", "http://newsite/mon");
        TimeFrom.addTextNode("2016-10-26T11:00");

        childName = new QName("TimeTo");
        SOAPElement TimeTo = request.addChildElement(childName);
        TimeTo.setAttribute("xmlns","http://newsite/mon");
        TimeTo.addTextNode("2016-10-26T12:00");



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/>
<SOAP-ENV:Body><GetParameter xmlns="http://examples/2001">
<request>
<MonCode xmlns="http://examples/2001">Latency</MonCode>
<TimeFrom xmlns="http://examples/2001">2016-10-26T11:00</TimeFrom>
<TimeTo xmlns="http://examples/2001">2016-10-26T12:00</TimeTo>
</request>
</GetParameter>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
...
Рейтинг: 0 / 0
28.10.2016, 12:30
    #39336128
drno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не транслируются значения атрибутов в SOAP запрос
удалось добиться такого результата

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<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:Header/>
<SOAP-ENV:Body>
<GetParamter xmlns="http://examples/2001">
<request>
<MonCode xmlns="http://newsite/mon">Latency</MonCode>
<TimeFrom xmlns="http://newsite/mon">2016-10-26T11:00</TimeFrom>
<TimeTo xmlns="http://newsite/mon">2016-10-26T12:00</TimeTo>
</request>
</GetParamter>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>



таким способом

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();
 
// Retrieve different parts
        SOAPPart soapPart = soapMessage.getSOAPPart();
        SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();
 
        soapEnvelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
        soapEnvelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
 
// Two ways to extract headers
    //    SOAPHeader soapHeader = soapEnvelope.getHeader();
    //    soapHeader = soapMessage.getSOAPHeader();
 
// Two ways to extract body
        SOAPBody soapBody = soapEnvelope.getBody();
        soapBody = soapMessage.getSOAPBody();
 
// To add some element
 
        SOAPElement GetParamter=soapBody.addBodyElement(new javax.xml.namespace.QName("http://examples/2001", "GetParamter"));
 
        GetParamter = GetParamter.addChildElement(new javax.xml.namespace.QName("request"));
        SOAPElement MonCode=GetParamter.addChildElement(new javax.xml.namespace.QName("http://newsite/mon", "MonCode"));
        MonCode.addTextNode("Latency");
 
        SOAPElement TimeFrom=GetParamter.addChildElement(new javax.xml.namespace.QName("http://newsite/mon", "TimeFrom"));
        TimeFrom.addTextNode("2016-10-26T11:00");
 
        SOAPElement TimeTo=GetParamter.addChildElement(new javax.xml.namespace.QName("http://newsite/mon", "TimeTo"));
        TimeTo.addTextNode("2016-10-26T12:00");




НО осталось еще несколько вопросов:

- как добавить?

Код: xml
1.
<?xml version="1.0" encoding="UTF-8" ?>



- и как избавиться от приставки "-ENV" и тега HEAD?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Не транслируются значения атрибутов в SOAP запрос / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]