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

Ошибка при парсинге ответа WEB-сервиса
https://www.sapboard.ru/forum/viewtopic.php?f=70&t=92548
Страница 2 из 3

Автор:  Chaser009 [ Пт, мар 04 2016, 11:53 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Блин, только что заметил. У вас в debug кавычки, а там int. Попробуйте убрать в мэппинге.

Автор:  ceib [ Пт, мар 04 2016, 13:24 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Chaser009 написал:
Ну если разбираться некогда, попробуйте у себя а в xslt подменить корневой тэг сообщения на Get_Info, как в request в soap ui, и проверьте, что получится.


Так и сделал. Согласно журналам теперь никаких ошибок нет - сообщение уходит, ответ возвращается. Однако в ERP генерится исключение CX_AI_SYSTEM_FAULT и get_text( ) выводит:
Цитата:
PARSE_APPLICATION_DATA Error during XML => ABAP conversion: Response Message; CX_ST_MATCH_ELEMENT in /1SAI/TXSC5DE0BBD404F9D8EFD56 Line 17 Элемент '{urn:my:service:fieldclimate}UserGetInfoResponse' ожидается XML Bytepos.: 827 XML Path:

Насколько понял - прокси не может распарсить пришедший ответ. Мэпинги все проверил. По тесту беру исходящее сообщение, проверяю через SOAP UI, беру ответ сервиса, вставляю в тест ответа - мэпится хорошо и красиво. То есть мэпинги верно настроены.

В чем может быть проблема? Можно ли как нибудь отловить, что именно приходит после мэпинга к прокси?

Автор:  ceib [ Пт, мар 04 2016, 13:26 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Chaser009 написал:
Блин, только что заметил. У вас в debug кавычки, а там int. Попробуйте убрать в мэппинге. А менять заголовок сообщения не надо. Может, из-за этого.

Про soap iu я затупил, по-моему, он так и формирует, без Request. Перед глазами сейчас нет, сравнить не с чем.

Да, судя по всему, так и должно быть. Soap UI Request обрезает.


Кавычки в Debug - это описка моя) Там их нет на самом деле.

Автор:  Chaser009 [ Пт, мар 04 2016, 13:44 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Обратный мэппинг чем делаете? XSLT или графический?
Скорее всего, парсеру прокси назад приходит кривое сообщение.
Выложите ответное сообщение после мэппинга и структуру ответного сообщения, описанную в интерфейсе.

Автор:  ceib [ Пт, мар 04 2016, 14:01 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Chaser009 написал:
Обратный мэппинг чем делаете? XSLT или графический?
Скорее всего, парсеру прокси назад приходит кривое сообщение.
Выложите ответное сообщение после мэппинга и структуру ответного сообщения, описанную в интерфейсе.


Оба мэпинга XSLT.

Ответное сообщение сервиса:
Code:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://metos.at">
   <SOAP-ENV:Body>
      <ns1:cidiuser_GetInfoResponse xmlns:ns1="http://schemas.xmlsoap.org/wsdl/">
         <return xsi:type="tns:struct_cidiuser_GetInfoData">
            <DataSetMain xsi:type="tns:DataSetStruct">
               <ReturnDataInfo xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:StructReturnDataInfo[1]">
                  <item xsi:type="tns:StructReturnDataInfo">
                     <s_name xsi:type="xsd:string">f_user_last_date</s_name>
                     <s_type xsi:type="xsd:string">xsd:string</s_type>
                     <s_flags xsi:type="xsd:int">0</s_flags>
                     <s_value xsi:type="xsd:string">4</s_value>
                  </item>
               </ReturnDataInfo>
               <ReturnRecordSetInfo xsi:type="tns:StructRecordSetInfo">
                  <s_field_count xsi:type="xsd:int">1</s_field_count>
                  <s_row_count xsi:type="xsd:int">1</s_row_count>
               </ReturnRecordSetInfo>
               <ReturnDataSet xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[1]">
                  <item xsi:type="xsd:string">2015-11-20 09:30:45.259777</item>
               </ReturnDataSet>
            </DataSetMain>
         </return>
      </ns1:cidiuser_GetInfoResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<!---->


Оно же после мэпинга:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<UserGetInfoResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://metos.at" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
   <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>
</UserGetInfoResponse>


При запуске теста, кстати, каждый раз ESR спрашивает:
Изображение

Не знаю, важно ли это (в XSLT файлах чарсет прописан), но факт.

Автор:  Chaser009 [ Пт, мар 04 2016, 14:09 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Хотелось бы увидеть не тест, а то, что в PI в рантайме приходит назад.

Автор:  ceib [ Пт, мар 04 2016, 14:10 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Chaser009 написал:
Хотелось бы увидеть не тест, а то, что в PI в рантайме приходит назад.

А как это можно увидеть? )

Автор:  Chaser009 [ Пт, мар 04 2016, 14:15 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Версия PI какая?

Автор:  ceib [ Пт, мар 04 2016, 14:17 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Chaser009 написал:
Версия PI какая?

7.40

Автор:  Chaser009 [ Пт, мар 04 2016, 14:18 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Dual stack?
Делаете обычный сценарий или Integrated Configuration?

Автор:  ceib [ Пт, мар 04 2016, 14:19 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Chaser009 написал:
Dual stack?
Делаете обычный сценарий или Integrated Configuration?


Dual Stack.

В Integration Directory согласно этому настроил Sender Agreement, Receiver Agreement и Interface Determination. Все. Без Integrated Configuration.

Автор:  Chaser009 [ Пт, мар 04 2016, 14:28 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

В абап-части, в sap gui, транзакция sxi_monitor
Естественно, в pi-системе.

Автор:  ceib [ Пт, мар 04 2016, 14:41 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Chaser009 написал:
В абап-части, в sap gui, транзакция sxi_monitor
Естественно, в pi-системе.


UPD. Не в той системе смотрел. Один момент.

Ответное сообщение из этой транзакции:
Code:
<?xml version="1.0" encoding="UTF-8"?>

-<UserGetInfoResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://metos.at" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
-<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>
</UserGetInfoResponse>


Структура этого сообщения:
Code:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:my:service:fieldclimate" targetNamespace="urn:my:service:fieldclimate">
   <xsd:element name="UserGetInfoResponse" type="struct_cidiuser_GetInfoData" />
   <xsd:complexType name="SequenceOfStrings">
      <xsd:sequence>
         <xsd:element name="RDataSet" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="struct_cidiuser_GetInfoData">
      <xsd:sequence>
         <xsd:element name="DataSetMain" type="DataSetStruct" />
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="SequenceOfReturnDataInfo">
      <xsd:sequence>
         <xsd:element name="RDataInfo" type="StructReturnDataInfo" maxOccurs="unbounded" />
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="StructRecordSetInfo">
      <xsd:sequence>
         <xsd:element name="s_field_count" type="xsd:integer" />
         <xsd:element name="s_row_count" type="xsd:integer" />
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="DataSetStruct">
      <xsd:sequence>
         <xsd:element name="ReturnDataInfo" type="SequenceOfReturnDataInfo" />
         <xsd:element name="ReturnRecordSetInfo" type="StructRecordSetInfo" />
         <xsd:element name="ReturnDataSet" type="SequenceOfStrings" />
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="StructReturnDataInfo">
      <xsd:sequence>
         <xsd:element name="s_name" type="xsd:string" />
         <xsd:element name="s_type" type="xsd:string" />
         <xsd:element name="s_flags" type="xsd:integer" />
         <xsd:element name="s_value" type="xsd:string" />
      </xsd:sequence>
   </xsd:complexType>
</xsd:schema>


Оно же визуально:
Изображение

Автор:  Chaser009 [ Пт, мар 04 2016, 15:09 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

После мэппинга сообщение в мониторе можно? Вы исходное выложили, которое от сервиса прилетело

Автор:  ceib [ Пт, мар 04 2016, 15:23 ]
Заголовок сообщения:  Re: Ошибка при парсинге ответа WEB-сервиса

Chaser009 написал:
После мэппинга сообщение в мониторе можно? Вы исходное выложили, которое от сервиса прилетело


Насколько понял, исходное сообщение вот:
Code:
<?xml version="1.0"?>

-<ns1:cidiuser_GetInfoResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://metos.at" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://schemas.xmlsoap.org/wsdl/">
-<return xsi:type="tns:struct_cidiuser_GetInfoData">
  -<DataSetMain xsi:type="tns:DataSetStruct">
    -<ReturnDataInfo xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:StructReturnDataInfo[1]">
      -<item xsi:type="tns:StructReturnDataInfo">
        <s_name xsi:type="xsd:string">f_user_last_date</s_name>
        <s_type xsi:type="xsd:string">xsd:string</s_type>
        <s_flags xsi:type="xsd:int">0</s_flags>
        <s_value xsi:type="xsd:string">4</s_value>
      </item>
    </ReturnDataInfo>
  -<ReturnRecordSetInfo xsi:type="tns:StructRecordSetInfo">
    <s_field_count xsi:type="xsd:int">1</s_field_count>
    <s_row_count xsi:type="xsd:int">1</s_row_count>
  </ReturnRecordSetInfo>

  -<ReturnDataSet xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[1]">
    <item xsi:type="xsd:string">2015-11-20 09:30:45.259777</item>
  </ReturnDataSet>
</DataSetMain>
</return>
</ns1:cidiuser_GetInfoResponse>


А привел я именно конечное сообщение, после мапинга и проверок:
Изображение

В полезной нагрузке блока "Мэппинг сообщения-ответа" та же самая XML-ка

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