Текущее время: Чт, июн 22 2017, 22:21

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: ЦБРФ: пустое пространство имен под xsd:any
СообщениеДобавлено: Пн, дек 19 2016, 16:30 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 25 2014, 16:42
Сообщения: 32
Откуда: Москва
Пол: Мужской
Добрый день.

Использую один из сервисов Центробанка РФ - DragMetDynamicXML.
WSDL всех сервисов здесь:
http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl

В ответе указан элемент DragMetDynamicXMLResult, содержимое которого не раскрывается в WSDL, т.е. внутри лежит просто any.

Код:
            <s:element minOccurs="0" maxOccurs="1" name="DragMetDynamicXMLResult">
              <s:complexType mixed="true">
                <s:sequence>
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>

Мне известно, какая структура там возвращается по факту. Я хотел бы добавить эти описание этой структуры в WSDL, чтоб далее использовать графический мэппинг для разбора ответа.
Однако элементы, лежащие под DragMetDynamicXMLResult, относятся к пустому пространству имён, т.е. "".
В WSDL везде используется непустое пространство имён.
Ответ в целом выглядит так:

Код:
<soap:Envelope xmlns:soap="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>
      <DragMetDynamicXMLResponse xmlns="http://web.cbr.ru/">
         <DragMetDynamicXMLResult>
            <DragMetall xmlns="">
               <DrgMet>
                  <DateMet>2016-12-15T00:00:00+03:00</DateMet>
                  <CodMet>1</CodMet>
                  <price>2269.6800</price>
               </DrgMet>
               <DrgMet>
                  <DateMet>2016-12-15T00:00:00+03:00</DateMet>
                  <CodMet>2</CodMet>
                  <price>33.2500</price>
               </DrgMet>
               <DrgMet>
                  <DateMet>2016-12-15T00:00:00+03:00</DateMet>
                  <CodMet>3</CodMet>
                  <price>1831.8500</price>
               </DrgMet>
               <DrgMet>
                  <DateMet>2016-12-15T00:00:00+03:00</DateMet>
                  <CodMet>4</CodMet>
                  <price>1427.1600</price>
               </DrgMet>
            </DragMetall>
         </DragMetDynamicXMLResult>
      </DragMetDynamicXMLResponse>
   </soap:Body>
</soap:Envelope>

Подскажите, как расширить описание структуры в WSDL-файле, чтоб пришедшие поля с xmlns="" корректно воспринимались и обнаруживались мэппингом PI?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЦБРФ: пустое пространство имен под xsd:any
СообщениеДобавлено: Ср, мар 15 2017, 09:55 
Начинающий
Начинающий

Зарегистрирован:
Пт, окт 11 2013, 13:24
Сообщения: 10
Аналогичная проблема, только с другим методом. Может кто подскажет?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЦБРФ: пустое пространство имен под xsd:any
СообщениеДобавлено: Чт, мар 16 2017, 16:43 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, сен 25 2012, 14:14
Сообщения: 94
Пол: Мужской
Используйте XSLT, который удаляет namespace из сообщения перед Message Mapping
http://sap-pi7.blogspot.ru/2011/03/gene ... paces.html


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЦБРФ: пустое пространство имен под xsd:any
СообщениеДобавлено: Вт, мар 21 2017, 15:11 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 25 2014, 16:42
Сообщения: 32
Откуда: Москва
Пол: Мужской
Да, я применил XSLT. Просто было интересно, можно ли без этого.

На всякий случай прикладываю XSLT:

Код:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://web.cbr.ru/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://yyyyyyyy.ru/A/CBRF/BPM/PreciousMetals">
   <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
   <xsl:template match="/">
      <ns1:PreciousMetalsSiteResponse>
         <xsl:for-each select="ns0:DragMetDynamicXMLResponse/ns0:DragMetDynamicXMLResult/DragMetall/DrgMet">
            <row>
               <DateMet>
                  <xsl:value-of select="DateMet"/>
               </DateMet>
               <CodMet>
                  <xsl:value-of select="CodMet"/>
               </CodMet>               
               <price>
                  <xsl:value-of select="price"/>
               </price>
            </row>
         </xsl:for-each>
      </ns1:PreciousMetalsSiteResponse>
   </xsl:template>
</xsl:stylesheet>


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB