我最近参与了将weblogic环境从版本10.3.3.0升级到10.3.6.0。两者都托管相同版本的OSB,在复制完所有代码后,我们遇到了一个问题。一切都与我们最终发现的一块xquery有所不同。有问题的XQuery从数据库中获取了一个令牌,因此我们可以通过业务服务发送请求,并且我们从数据库中检索到的令牌格式不正确。有问题的XQuery是一个fn-bea:execute-sql
命令。旧环境创建了一个使用回车格式化令牌的令牌,新环境运行相同的代码并创建一个如下所示的令牌:
54686973206973206120746F6B656E0D#&13;
0A54686973206973206120746F6B656E#&13;
0D0A54686973206973206120746F6B65#&13;
6E0D0A54686973206973206120746F6B#&13;
656E0D0A54686973206973206120746F#&13;
6B656E0D0A5468697320697320612074#&13;
令牌在回车之前在每一行的末尾有一个额外的#&13;
(我用notepad ++检查并在此之后看到了回车符)。现在我知道#&13;
是回车的ASCII码,我使用了一些xquery格式来删除它们作为一种解决方法。有问题的XQuery是:
fn:replace(xs:token(TOKEN), " " , "
")
其中token是我将sql函数的结果放入的变量。
但是我想知道是什么造成的?有没有从较新版本的weblogic中删除此xquery功能?我无法在与此直接相关的weblogic更改日志中看到任何内容。
还有一个更简洁的解决方法,而不是将字符串格式化为令牌以删除#& 13;与回车一起,然后重新添加回车代替已添加的空间?
谢谢, TheVoicedElk
答案 0 :(得分:1)
令牌有一个额外的#& 13;在回车之前每行的末尾
不完全。
是回车(又名\r
或
)。
是换行符(又名\n
或

)。
因此,xquery引擎将\ n转换为Notepad理解的实际换行符,但将回车符编码为实体。
如果你想删除它,我猜replace($token, '\r','')
会起作用。你保留\ n但是剥离\ r。