使用变音符号向OTRS发送Soap-Request

时间:2016-02-17 07:47:18

标签: xml linux oracle soap otrs

所以,我正在尝试在CentOS Linux服务器上向OTRS发出SOAP-Request。 有人在Oracle数据库中为此创建了一个PL-SQL-Package,除非数据中有Umlaut(Ü),否则它可以正常工作。

这是我在linux errorlog中得到的错误:

Feb 17 08:32:26 eotrs2 GenericInterfaceProvider-10[11317]: [Error][Kernel::GenericInterface::Debugger::DebugLog][Line:218]: DebugLog error:  Summary: Error deserializing message:not well-formed (invalid token) at line 1, column 528, byte 528 at /usr/lib64/perl5/vendor_perl/XML/Parser.pm line 187.  Data   : No data provided.
Feb 17 08:32:26 eotrs2 GenericInterfaceProvider-10[11317]: [Error][Kernel::GenericInterface::Debugger::DebugLog][Line:218]: DebugLog error:  Summary: Request could not be processed  Data   : Error deserializing message:not well-formed (invalid token) at line 1, column 528, byte 528 at /usr/lib64/perl5/vendor_perl/XML/Parser.pm line 187..
Feb 17 08:32:26 eotrs2 GenericInterfaceProvider-10[11317]: [Error][Kernel::GenericInterface::Debugger::DebugLog][Line:218]: DebugLog error:  Summary: Returning provider data to remote system (HTTP Code: 500)  Data   : Error deserializing message:not well-formed (invalid token) at line 1, column 528, byte 528 at /usr/lib64/perl5/vendor_perl/XML/Parser.pm line 187..

在我们使用PL / SQL-Package之前,我们在使用SOAP::Lite运行OTRS服务的同一服务器上使用了Perl脚本。 我意识到,激活这个Perl-Script中的跟踪,它只是将我提供的XML文件中的变音符号“Ü”更改为SOAP-Request中的“ ”,这显然也不对。

Oracle DB上的

NLS_CHARACTERSETAL32UTF8NLS_LAN的{​​{1}} - 服务器上的用户为otrs

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我发现了一个不太令人满意的解决方案。

在PL / SQL程序中,我使用

l_envelope := CONVERT(l_envelope, 'AL32UTF8', 'WE8ISO8859P1');

这意味着我将其转换为ISO 8859-1。但这并没有回答我的问题,为什么它想要这个字符集。我们通常使用UTF-8。

答案 1 :(得分:0)

检查所有字符集设置,更改前后。

OP中的错误消息表明问题存在于perl xml解析器中(我并不是perl家伙),但我认为我会评论Oracle的字符集转换行为。显然,数据库有一个已定义的字符集,但是oracle客户端s / w还定义了它认为正在使用的字符集。通过与数据库的连接,可以根据Oracle的NLS转换自动转换字符集。因此,转换的发生取决于客户端的字符集。

我假设German_Austria.utf8AL32UTF8转换正确发生。向上游查找数据到达此点之前发生的其他可能的转换。

btw - 如果客户端和数据库设置为相同的字符集,则不会发生字符转换。如果客户端字符集确实是错误的,那么数据库中的数据可能不正确(因为没有转换)。然后,当客户端字符集被校正时(或者在具有不同字符集定义的不同客户端上),提取的数据将看起来是错误的' - 现在正在转换以前未转​​换的数据。