我最近在 Open Nebula 中部署了一个具有 SOAP Web 服务的组件。部署后,我们注意到 WSDL 响应具有不同的命名空间前缀
问题:AlertBot 期望看到
<ax25:response>TEST</ax25:response>
但是,它开始看到
<ax21:response>TEST</ax21:response>
代替。我们比较了新旧主机之间的构建,发现配置文件或 java 包没有差异。
我们需要弄清楚为什么 ax25 部分命名空间前缀在新主机上更改为 ax21
注意:我们使用 AXIS2 库来生成 WSDL
我们搬到新环境后也遇到了这个问题。
对我们来说这是新的操作系统和新的 JVM。
深入了解 axis2 源代码后,我们开始了
kernel/src/org/apache/axis2/deployment/RepositoryListener.java
方法:
protected void findServicesInDirectory(File root)
这里我们一步步调试发现生成的命名空间前缀的顺序依赖于
java.io.File.listFiles()
的顺序。
这就是我们的订单发生变化的原因。因为:
不保证结果数组中的名称字符串将以任何特定顺序出现;特别是,不保证它们按字母顺序出现。
希望这有助于理解“为什么”。