Как обеспечить соблюдение формата кодирования при записи XML в таблицу Oracle в Mule 4?

Когда я писал XML в Oracle Table (тип столбца как XMLTYPE), он писал без отображения какого-либо типа кодировки. Это текущий процесс, достигаемый с помощью Java. Мы переносим этот процесс на Mule. В Mule xml записывается в ту же таблицу, но после записи я вижу формат кодирования в этом XML. Не уверен, как это происходит, это не настоящий xml.

XML в таблице при вставке с использованием Java

<?xml version="1.0"?>

При использовании мула

<?xml version="1.0" encoding="US-ASCII"?>

Код, используемый в Mule для вставки XML, приведен ниже.

'REQUEST_XML' : write(payload, 'application/xml'),

Это моя вставка

insert into xmlpkg.REQ_RESP (ID, REQUEST_XML) values (xmlpkg.SEQ_DV.nextval,   
:REQUEST_XML  )

Я даю ниже в моих входных параметрах

{
'REQUEST_XML'  : write(payload, 'application/xml')
}

Моя полезная нагрузка - это XML-файл, но он будет представлен в виде текста, я не могу его изменить.

<DRIVERequest Version="1.00">
<Authentication PortalID="*****" Password="*******" Username="*******"/>
</DRIVERequest>

введите описание изображения здесь

Это то, что я вижу в журнале непосредственно перед операцией вставки.

Before DB operation : "<?xml version='1.0' encoding='UTF-8'?>\n<DRIVERequest 
Version=\"1.00\">\n  <Authentication PortalID=\"*****\" Password=\"*******\" 
Username=\"*******\"/>\n</DRIVERequest>"

Моя трансформация

%dw 2.0
output application/json
---
{
requestXML : write(payload, 'application/xml')
}

Во входных аргументах я использую это, как показано ниже

{
'REQUEST_XML': payload.requestXML
}

В журнале я вижу UTF-8, но после операции вставки он отображается как кодировка = US-ASCII


person VKP    schedule 07.03.2021    source источник
comment
Какая полезная нагрузка? Поделитесь фактической работой коннектора базы данных и полным преобразованием DataWeave.   -  person aled    schedule 07.03.2021
comment
Обновил вопрос с дополнительной информацией   -  person VKP    schedule 07.03.2021
comment
Пожалуйста, сделайте преобразование перед операцией с базой данных и назначьте его переменной, чтобы вы могли зарегистрировать его и поделиться результатом здесь.   -  person aled    schedule 07.03.2021
comment
Обновил инфу. Снова он вставляет xml, но почему кодировка уходит?   -  person VKP    schedule 07.03.2021
comment
Как вы это проверяете "after insert operation its showing as encoding="US-ASCII" ?   -  person Harshank Bansal    schedule 08.03.2021
comment
Вы можете попробовать использовать свойство encoding writer. Просто измените write(payload, 'application/xml') на write(payload, 'application/xml', {encoding: 'UTF-8 '}) Ссылка: docs.mulesoft.com /mule-runtime/4.3/   -  person Harshank Bansal    schedule 08.03.2021


Ответы (1)


Похоже, что это не Mule, а драйвер Oracle JDBC где-то неправильно кодирует.

Возможные решения:

  1. Убедитесь, что вы используете последнюю версию драйвера JDBC.
  2. Найдите любую переменную среды в вашей операционной системе, которая может устанавливать неправильную кодировку. Например, NLS_LANG (см. https://community.oracle.com/tech/developers/discussion/974099/encoding-changed-after-updatexml).
  3. В качестве альтернативы попробуйте установить NLS_LANG явно, чтобы избежать неправильных значений по умолчанию.
  4. Наконец, прочтите документацию Oracle, чтобы узнать о других подобных конфигурациях, которые могут повлиять на драйвер.
person aled    schedule 07.03.2021
comment
@Vinoy Это сработало? - person Harshank Bansal; 08.03.2021
comment
Нет, пытался обновить драйвер JDBC до последней версии. Установите явно NLS_LANG. Но ничего не работает. - person VKP; 09.03.2021
comment
Все еще исследую - person VKP; 09.03.2021
comment
заставил его работать по этой ссылке. stackoverflow .com / questions / 66557450 / - person VKP; 12.03.2021