Текущее время: Чт, мар 28 2024, 21:02

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




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Ошибка при парсинге ответа WEB-сервиса
СообщениеДобавлено: Пт, мар 04 2016, 15:33 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Тяжело на расстоянии.
Еще одна попытка: корневой элемент у вас в сообщении неймспейсом не помечен. По-моему, должно что-то типа: <ns1:UserGetInfoResponse... и т.д. И закрывающий тег тоже. Как вариант.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при парсинге ответа WEB-сервиса
СообщениеДобавлено: Пт, мар 04 2016, 16:26 
Ассистент
Ассистент

Зарегистрирован:
Ср, дек 16 2015, 14:30
Сообщения: 38
Chaser009 написал:
Тяжело на расстоянии.

Понимаю) Но, увы, мне тупо больше некуда обратиться...
Chaser009 написал:
Еще одна попытка: корневой элемент у вас в сообщении неймспейсом не помечен. По-моему, должно что-то типа: <ns1:UserGetInfoResponse... и т.д. И закрывающий тег тоже. Как вариант.


Попробовал сделать с неймспейсом. После мэпинга получаю следующее:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:UserGetInfoResponse xmlns:ns1="urn:my:service:fieldclimate">
  <DataSetMain xmlns="http://schemas.xmlsoap.org/wsdl/">
    <ReturnDataInfo>
      <RDataInfo>
        <s_name xmlns:tns="http://metos.at" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">f_user_last_date</s_name>
        <s_type xmlns:tns="http://metos.at" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">xsd:string</s_type>
        <s_flags xmlns:tns="http://metos.at" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">0</s_flags>
        <s_value xmlns:tns="http://metos.at" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">4</s_value>
      </RDataInfo>
    </ReturnDataInfo>
    <ReturnRecordSetInfo>
      <s_field_count xmlns:tns="http://metos.at" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">1</s_field_count>
      <s_row_count xmlns:tns="http://metos.at" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">1</s_row_count>
    </ReturnRecordSetInfo>
    <ReturnDataSet>
      <RDataSet>2015-11-20 09:30:45.259777</RDataSet>
    </ReturnDataSet>
  </DataSetMain>
</ns1:UserGetInfoResponse>


Почему то PI начал раскидывать неймспейсы стандартные во все конечные элементы. В целом - в корневом элементе добавился неймспейс мой (в котором мои типы в ESR созданы), остальное все тоже самое, но более громоздко выглядит.

Пробовал также ко всем элемента моего неймспейса добавлять префиксы. Ситуация не меняется, вылезает все та же ошибка...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при парсинге ответа WEB-сервиса
СообщениеДобавлено: Пт, мар 04 2016, 16:44 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Да нет, не то же самое. Сделайте именно так, чтобы корень был с неймспейсом, а остальное оставьте, как было.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при парсинге ответа WEB-сервиса
СообщениеДобавлено: Пт, мар 04 2016, 17:19 
Ассистент
Ассистент

Зарегистрирован:
Ср, дек 16 2015, 14:30
Сообщения: 38
Chaser009 написал:
Да нет, не то же самое. Сделайте именно так, чтобы корень был с неймспейсом, а остальное оставьте, как было.


Сделал. Сообщение после мапинга выглядит так:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:UserGetInfoResponse xmlns="http://schemas.xmlsoap.org/wsdl/"
                         xmlns:tns="http://metos.at"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                         xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                         xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
                         xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
                         xmlns:ns1="urn:my:service:fieldclimate">
  <DataSetMain>
    <ReturnDataInfo>
      <RDataInfo>
        <s_name>f_user_last_date</s_name>
        <s_type>xsd:string</s_type>
        <s_flags>0</s_flags>
        <s_value>4</s_value>
      </RDataInfo>
    </ReturnDataInfo>
    <ReturnRecordSetInfo>
      <s_field_count>1</s_field_count>
      <s_row_count>1</s_row_count>
    </ReturnRecordSetInfo>
    <ReturnDataSet>
      <RDataSet>2015-11-20 09:30:45.259777</RDataSet>
    </ReturnDataSet>
  </DataSetMain>
</ns1:UserGetInfoResponse>


Результат все тот же. Все та же ошибка.

UPD. Ан нет - ошибка чуть изменилась, теперь ругается не на отсутствие UserGetInfoResponse а на отсутствие DataSetMain:

Code:
PARSE_APPLICATION_DATA Error during XML => ABAP conversion: Response Message; CX_ST_MATCH_ELEMENT in /1SAI/TXSC5DE0BBD404F9D8EFD71 Line 44 Элемент 'DataSetMain' ожидается XML Bytepos.: 902 XML Path: ns1:UserGetInfoResponse(1)

Значит все таи дело в неймспейсах. Буду копать дальше...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при парсинге ответа WEB-сервиса
СообщениеДобавлено: Сб, мар 05 2016, 14:01 
Ассистент
Ассистент

Зарегистрирован:
Ср, дек 16 2015, 14:30
Сообщения: 38
ceib написал(а):
Значит все таи дело в неймспейсах. Буду копать дальше...

Весьма удивлен найденной причиной неприятностей...

В XSLT-файле у меня были ссылки на пространства имен XSD, WSDL и т.д.:
Code:
<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"            
            xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
            xmlns="http://schemas.xmlsoap.org/wsdl/" >


Во время мапинга все необходимые пространства переносятся в корневой тег сообщения, что тоже правильно и никоим образом не влияет на сам файл (URI на неймспейсы везде корректные). Однако, если убрать из XSLT все пространства кроме XSL (без которого собственно и преобразование не будет работать), то получаем в корневом теге отмапленного сообщения только одно простанство имен - то, в рамках которого в ESR создаются все объекты:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:UserGetInfoResponse xmlns:ns1="urn:my:service:fieldclimate">
   <DataSetMain>
      <ReturnDataInfo>
         <RDataInfo>
            <s_name>f_user_last_date</s_name>
            <s_type>xsd:string</s_type>
            <s_flags>0</s_flags>
            <s_value>4</s_value>
         </RDataInfo>
      </ReturnDataInfo>
      <ReturnRecordSetInfo>
         <s_field_count>1</s_field_count>
         <s_row_count>1</s_row_count>
      </ReturnRecordSetInfo>
      <ReturnDataSet>
         <RDataSet>2015-11-20 09:30:45.259777</RDataSet>
      </ReturnDataSet>
   </DataSetMain>
</ns1:UserGetInfoResponse>


И все, абсолютно неожиданно, начинает работать... [s]То есть, в тегах сообщения, которое доходит до прокси не может быть записано более одного пространства имен, что представляется для меня полнейшей неожиданностью и абсолютным несоответствием стандарту[/s].

UPD. Нужно быть аккуратным с использованием неймспейса по умолчанию "xmlns=..." (см. ниже).


Последний раз редактировалось ceib Ср, мар 09 2016, 10:25, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при парсинге ответа WEB-сервиса
СообщениеДобавлено: Сб, мар 05 2016, 16:42 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
То ли еще будет :-) Привыкайте.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при парсинге ответа WEB-сервиса
СообщениеДобавлено: Вс, мар 06 2016, 07:07 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
ceib написал(а):
xmlns="http://schemas.xmlsoap.org/wsdl/"


Эта конструкция объявляет неймспейс по умолчанию. Он нужен в ситуации, когда при написании элемента мы не указываем префикс, а пишем сразу имя элемента. То есть элемент, не имеющий префикса, считается принадлежащим к неймспейсу по умолчанию.

То есть, при такой записи у вас элементы без префикса вместо того, чтобы метиться неймспейсом корневого элемента (указать который я вам советовал выше), метятся указанным неймспесом. Отсюда и ошибки. И никаких нарушений стандартов, что характерно.

P.S. Неймспейсы использовать можно различные (и более одного), только аккуратно, особенно, при использовании своих преобразований.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при парсинге ответа WEB-сервиса
СообщениеДобавлено: Ср, мар 09 2016, 09:46 
Ассистент
Ассистент

Зарегистрирован:
Ср, дек 16 2015, 14:30
Сообщения: 38
Chaser009 написал:
ceib написал(а):
xmlns="http://schemas.xmlsoap.org/wsdl/"

То есть, при такой записи у вас элементы без префикса вместо того, чтобы метиться неймспейсом корневого элемента (указать который я вам советовал выше), метятся указанным неймспесом. Отсюда и ошибки. И никаких нарушений стандартов, что характерно.

Да, действительно, поторопился делать выводы.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3

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


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

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


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

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