Текущее время: Пт, мар 29 2024, 14:59

Часовой пояс: 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 часа


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

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


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

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