SAPфорум.RU https://www.sapboard.ru/forum/ |
|
Ошибка при парсинге ответа WEB-сервиса https://www.sapboard.ru/forum/viewtopic.php?f=70&t=92548 |
Страница 3 из 3 |
Автор: | Chaser009 [ Пт, мар 04 2016, 15:33 ] |
Заголовок сообщения: | Re: Ошибка при парсинге ответа WEB-сервиса |
Тяжело на расстоянии. Еще одна попытка: корневой элемент у вас в сообщении неймспейсом не помечен. По-моему, должно что-то типа: <ns1:UserGetInfoResponse... и т.д. И закрывающий тег тоже. Как вариант. |
Автор: | ceib [ Пт, мар 04 2016, 16:26 ] |
Заголовок сообщения: | Re: Ошибка при парсинге ответа WEB-сервиса |
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 созданы), остальное все тоже самое, но более громоздко выглядит. Пробовал также ко всем элемента моего неймспейса добавлять префиксы. Ситуация не меняется, вылезает все та же ошибка... |
Автор: | Chaser009 [ Пт, мар 04 2016, 16:44 ] |
Заголовок сообщения: | Re: Ошибка при парсинге ответа WEB-сервиса |
Да нет, не то же самое. Сделайте именно так, чтобы корень был с неймспейсом, а остальное оставьте, как было. |
Автор: | ceib [ Пт, мар 04 2016, 17:19 ] |
Заголовок сообщения: | Re: Ошибка при парсинге ответа WEB-сервиса |
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) Значит все таи дело в неймспейсах. Буду копать дальше... |
Автор: | ceib [ Сб, мар 05 2016, 14:01 ] |
Заголовок сообщения: | Re: Ошибка при парсинге ответа WEB-сервиса |
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=..." (см. ниже). |
Автор: | Chaser009 [ Сб, мар 05 2016, 16:42 ] |
Заголовок сообщения: | Re: Ошибка при парсинге ответа WEB-сервиса |
То ли еще будет Привыкайте. |
Автор: | Chaser009 [ Вс, мар 06 2016, 07:07 ] |
Заголовок сообщения: | Re: Ошибка при парсинге ответа WEB-сервиса |
ceib написал(а): xmlns="http://schemas.xmlsoap.org/wsdl/" Эта конструкция объявляет неймспейс по умолчанию. Он нужен в ситуации, когда при написании элемента мы не указываем префикс, а пишем сразу имя элемента. То есть элемент, не имеющий префикса, считается принадлежащим к неймспейсу по умолчанию. То есть, при такой записи у вас элементы без префикса вместо того, чтобы метиться неймспейсом корневого элемента (указать который я вам советовал выше), метятся указанным неймспесом. Отсюда и ошибки. И никаких нарушений стандартов, что характерно. P.S. Неймспейсы использовать можно различные (и более одного), только аккуратно, особенно, при использовании своих преобразований. |
Автор: | ceib [ Ср, мар 09 2016, 09:46 ] |
Заголовок сообщения: | Re: Ошибка при парсинге ответа WEB-сервиса |
Chaser009 написал: ceib написал(а): xmlns="http://schemas.xmlsoap.org/wsdl/" То есть, при такой записи у вас элементы без префикса вместо того, чтобы метиться неймспейсом корневого элемента (указать который я вам советовал выше), метятся указанным неймспесом. Отсюда и ошибки. И никаких нарушений стандартов, что характерно. Да, действительно, поторопился делать выводы. |
Страница 3 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |