在 Mule 4 中将 XML 写入 Oracle Table 时如何强制执行编码格式?
How to enforce a encoding format when writing XML into Oracle Table in Mule 4?
当我将 XML 写入 Oracle Table(列类型为 XMLTYPE)时,它的写入没有显示任何编码类型。这是通过 Java 实现的当前过程。我们正在将这个过程迁移到 Mule 。在 Mule 中, xml 正在写入相同的 table 但在写入之后我看到 XML 中的编码格式。不确定它是怎么来的,它不存在 xml .
使用 Java 插入时 XML in Table
<?xml version="1.0"?>
使用 Mule 时
<?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,但在插入操作后它显示为 encoding="US-ASCII"
看起来它不是 Mule,而是 Oracle JDBC 驱动程序在某处选择了错误的编码。
可能的解决方案:
- 确保您使用的是最新的 JDBC 驱动程序。
- 在您的操作系统中搜索任何可能设置了错误编码的环境变量。例如 NLS_LANG(参见 https://community.oracle.com/tech/developers/discussion/974099/encoding-changed-after-updatexml)
- 或者,尝试明确设置 NLS_LANG 以避免任何不正确的默认值。
- 最后阅读 Oracle 文档以了解可能影响驱动程序的其他类似配置。
当我将 XML 写入 Oracle Table(列类型为 XMLTYPE)时,它的写入没有显示任何编码类型。这是通过 Java 实现的当前过程。我们正在将这个过程迁移到 Mule 。在 Mule 中, xml 正在写入相同的 table 但在写入之后我看到 XML 中的编码格式。不确定它是怎么来的,它不存在 xml .
使用 Java 插入时XML in Table
<?xml version="1.0"?>
使用 Mule 时
<?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,但在插入操作后它显示为 encoding="US-ASCII"
看起来它不是 Mule,而是 Oracle JDBC 驱动程序在某处选择了错误的编码。
可能的解决方案:
- 确保您使用的是最新的 JDBC 驱动程序。
- 在您的操作系统中搜索任何可能设置了错误编码的环境变量。例如 NLS_LANG(参见 https://community.oracle.com/tech/developers/discussion/974099/encoding-changed-after-updatexml)
- 或者,尝试明确设置 NLS_LANG 以避免任何不正确的默认值。
- 最后阅读 Oracle 文档以了解可能影响驱动程序的其他类似配置。