2016-06-10 65 views
2

我最近参与了将weblogic环境从版本10.3.3.0升级到10.3.6.0。两者都托管相同版本的OSB,在复制完所有代码后,我们遇到了一个问题。除了我们最终发现的一块xquery之外,所有的东西都起作用了。有问题的XQuery从数据库中获取了一个令牌,所以我们可以通过业务服务发送请求,并且我们从数据库中检索到的令牌格式不正确。有问题的XQuery是fn-bea:execute-sql命令。在旧环境中创建格式化回车令牌令牌,新的环境中运行相同的代码,并创建了一个令牌是这样的:weblogic中的SQL Xquery实现

54686973206973206120746F6B656E0D#&13; 
0A54686973206973206120746F6B656E#&13; 
0D0A54686973206973206120746F6B65#&13; 
6E0D0A54686973206973206120746F6B#&13; 
656E0D0A54686973206973206120746F#&13; 
6B656E0D0A5468697320697320612074#&13; 

令牌有一个额外的#&13;在每行前结束回车(我用记事本++检查,看到回车符后)。现在我知道#&13;是回车的ASCII代码,我用一点点的xquery格式将它们作为解决方法删除。有问题的XQuery是:

fn:replace(xs:token(TOKEN), " " , " 
") 

其中token是我把sql函数的结果放入的变量。

但是我想知道是什么造成了这种情况?是否已将此xquery功能从较新版本的weblogic中删除?我无法看到与此直接相关的weblogic更改日志中的任何内容。

此外,还有一个比格式化字符串作为令牌更清洁的解决方法,以删除#& 13;以及回车,然后重新添加回车代替已添加的空间?

感谢, TheVoicedElk

回答

1

令牌有一个额外#& 13;在每行末尾回车前

不完全。


是回车(又名\r&#xD)。


是换行(又名\n&#xA)。

因此,xquery引擎将\ n转换为记事本可以理解的实际换行符,但将回车编码保留为实体。

如果你想删除它,我想replace($token, '\r','')会工作。你保留\ n但剥去\ r。

+1

在记事本++中查看令牌后,我们得到如下所示:54686973206973206120746F6B656E0D#&13; CRLF。干杯,我没有想过只是用自己的方式取代回车,因为它会跳过一个函数。 – TheVoicedElk