Текущее время: Вт, мар 19 2024, 08:24

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




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

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

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

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

Code:
            <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 везде используется непустое пространство имён.
Ответ в целом выглядит так:

Code:
<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, 08:55 
Начинающий
Начинающий

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


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

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


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

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

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

Code:
<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 + 3 часа


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

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


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

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