在 Mule 4 中将 XML 写入 Oracle 表时如何强制执行编码格式?

问题描述

当我将 XML 写入 Oracle 表(列类型为 XMLTYPE)时,它的写入没有显示任何编码类型。这是目前通过 Java 实现的过程。我们正在将此过程迁移到 Mule 。在 Mule 中,xml 正在写入同一个表中,但在写入后我看到该 XML 中的编码格式。不知道它是怎么来的,它没有实际的 xml。

使用Java插入时表中的XML

<?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')
}

我的 Payload 是一个 xml,但它会以文本形式出现,我无法更改它。

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

enter image description here

这是我在插入操作之前在日志中看到的

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,但在插入操作后它显示为 encoding="US-ASCII"

解决方法

看起来不是 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 文档,了解可能影响驱动程序的其他类似配置。