Текущее время: Ср, авг 20 2025, 11:57

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по XMLAnonymizer
СообщениеДобавлено: Вт, апр 15 2014, 03:59 
Старший специалист
Старший специалист
Аватара пользователя

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

Настроил XMLAnonymizerBean для SOAP канала-отправителя.
Вот пример из хелпа:

The anonymizer.acceptNamespaces parameter has the following value:
urn:sap-com:document:sap:rfc:functions rfc urn:sap-com:document:sap:soap:functions:mc-style rfc

Payload before using the XMLAnonymizerBean:
Code:
<Z_PAYMITEM_GET_LIST
  xmlns="urn:sap-com:document:sap:rfc:functions"
  xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <I_ACCOUNTIDENT xmlns="">
    <ACCOUNT_NUMBER>0080000094</ACCOUNT_NUMBER>
    <BANK_COUNTRY>DE</BANK_COUNTRY>
    <BANK_COUNTRY_ISO>DE</BANK_COUNTRY_ISO>
  </I_ACCOUNTIDENT>
</Z_PAYMITEM_GET_LIST>


Payload after using the XMLAnonymizerBean:
Code:
<?xml version='1.0' encoding='utf-8'?>
<rfc:Z_PAYMITEM_GET_LIST
  xmlns:rfc='urn:sap-com:document:sap:rfc:functions'>
  <I_ACCOUNTIDENT>
    <ACCOUNT_NUMBER>0080000094</ACCOUNT_NUMBER>
    <BANK_COUNTRY>DE</BANK_COUNTRY>
    <BANK_COUNTRY_ISO>DE</BANK_COUNTRY_ISO>
  </I_ACCOUNTIDENT>
</rfc:Z_PAYMITEM_GET_LIST>


У меня ситуация в принципе похожая:

Исходное сообщение:
Code:
<MT_Test_Docs_List xmlns="urn:scenario_sync_async_1c" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Document BE="2000">
  <DocNumber>Doc1_Num</DocNumber>
  <DocDate>20140414</DocDate>
  <Item>
  <ItemID>Item_1</ItemID>
  <ItemText>Text_1</ItemText>
  </Item>
  <Item>
  <ItemID>Item_2</ItemID>
  <ItemText>Text_2</ItemText>
  </Item>
  </Document>
  <Document BE="9000">
  <DocNumber>Doc2_Num</DocNumber>
  <DocDate>20140322</DocDate>
  <Item>
  <ItemID>Item_3</ItemID>
  <ItemText>Text_3</ItemText>
  </Item>
  <Item>
  <ItemID>Item_4</ItemID>
  <ItemText>Text_4</ItemText>
  </Item>
  </Document>
  </MT_Test_Docs_List>


Однако, после вызова модуля получаю:
Code:
<?xml version='1.0' encoding='utf-8'?>
<ns0:MT_Test_Docs_List xmlns:ns0='urn:scenario_sync_async_1c'>
   <ns0:Document BE='2000'>
      <ns0:DocNumber>Doc1_Num</ns0:DocNumber>
      <ns0:DocDate>20140414</ns0:DocDate>
      <ns0:Item>
         <ns0:ItemID>Item_1</ns0:ItemID>
         <ns0:ItemText>Text_1</ns0:ItemText>
      </ns0:Item>
      <ns0:Item>
         <ns0:ItemID>Item_2</ns0:ItemID>
         <ns0:ItemText>Text_2</ns0:ItemText>
      </ns0:Item>
   </ns0:Document>
   <ns0:Document BE='9000'>
      <ns0:DocNumber>Doc2_Num</ns0:DocNumber>
      <ns0:DocDate>20140322</ns0:DocDate>
      <ns0:Item>
         <ns0:ItemID>Item_3</ns0:ItemID>
         <ns0:ItemText>Text_3</ns0:ItemText>
      </ns0:Item>
      <ns0:Item>
         <ns0:ItemID>Item_4</ns0:ItemID>
         <ns0:ItemText>Text_4</ns0:ItemText>
      </ns0:Item>
   </ns0:Document>
</ns0:MT_Test_Docs_List>


В параметрах модуля стоит:
anonymizer.acceptNamespaces - urn:scenario_sync_async_1c ns0

Но почему-то в моем случае помечаются префиксами все узлы, а не только корневой, как в примере. После этого, естественно, слетают мэппинг и, как дополнительный бонус, receiver determination, так как там условие стоит на наличие узла 'Document', а по факту имеется 'ns0:Document'.

Не подскажете, в какую сторону посмотреть?

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос по XMLAnonymizer
СообщениеДобавлено: Вт, апр 15 2014, 05:06 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
В качестве решения пока проставляю Qualify Schema - Elements у типов данных в ESR. В этом случае все элементы помечаются префиксом, и исходное сообщение после обработки XMLAnonymizer'ом совпадает с требуемым.

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос по XMLAnonymizer  Тема решена
СообщениеДобавлено: Ср, апр 16 2014, 00:13 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Сб, фев 25 2012, 02:52
Сообщения: 141
Откуда: Москва
Пол: Мужской
У модуля логика такая: все, что в элементах верхнего уровня в исходном документе namespace-ом не обозначено - все пометить пространством имен по-умолчанию.

В примере из help - там у корневого элемента I_ACCOUNTIDENT стоит xmlns="", модуль его убирает, а все подэлементы считает относящимися к тому же пространству имен и не квалифицирует.

Так что, при условии, что в исходном документе есть неквалифицированные элементы первого уровня - этим модулем задачку не решить.

Если так уж нужно сделать все именно в PI - то можно XSLT-мэппинг применить.
Но проще - либо по вашему методу, либо исходную систему "заставить" квалифицировать все узлы первого уровня.

P.S.: хорошие примеры в ноте есть: 880173 - XI 3.0 Adapter Framework XML Anonymizer Module

_________________
Сажаем самолеты по телефону. :)
SAP - фрилансер.
sap.pitroff.ru


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

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


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

Сейчас этот форум просматривают: Google [Bot]


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

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