SAPфорум.RU
https://sapboard.ru/forum/

ЦБРФ: пустое пространство имен под xsd:any
https://sapboard.ru/forum/viewtopic.php?f=70&t=94201
Страница 1 из 1

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

Добрый день.

Использую один из сервисов Центробанка РФ - 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?

Автор:  Делетант [ Ср, мар 15 2017, 08:55 ]
Заголовок сообщения:  Re: ЦБРФ: пустое пространство имен под xsd:any

Аналогичная проблема, только с другим методом. Может кто подскажет?

Автор:  chizz [ Чт, мар 16 2017, 15:43 ]
Заголовок сообщения:  Re: ЦБРФ: пустое пространство имен под xsd:any

Используйте XSLT, который удаляет namespace из сообщения перед Message Mapping
http://sap-pi7.blogspot.ru/2011/03/gene ... paces.html

Автор:  Андрей Петин [ Вт, мар 21 2017, 14:11 ]
Заголовок сообщения:  Re: ЦБРФ: пустое пространство имен под xsd:any

Да, я применил 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>

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/