【发布时间】:2017-03-05 22:40:17
【问题描述】:
对于我们编写和维护的基于 CF Web 服务的 API,我们遇到了非常令人沮丧的情况。多年来,我们有一个稳定的 API,可以与 Ruby、PHP 和 ColdFusion 客户端愉快地工作。然后今年出现了一个 .NET 客户端,我们发现由于我们大量使用结构,我们的 Web 服务无法与静态类型语言互操作。
我们最终意识到我们必须在没有结构的情况下重新编写 API,而且我们已经这样做了。它现在使用缩放器值、数组和 CFC(被转换为 SOAP complexTypes)。 .NET 客户端很高兴,我们用大约 6 种不同的语言编写了概念验证客户端,以确保我们这次可以互操作。
令我们非常沮丧的是,我们的 ColdFusion 7 服务器似乎无法可靠地为新 API 提供服务。重新启动后它可以工作大约一天左右,然后客户端开始收到如下错误:
错误:coldfusion.xml.rpc.CFCInvocationException [java.lang.ClassNotFoundException : tafkan.remote_api.pfapi.v.trunk.rsp_pf_survey_status_array]
和
java.lang.NoClassDefFoundError: tafkan/remote_api/pfapi/v/trunk/pf_unit
重新启动 CF 实例是解决问题的唯一方法。大量的时间和金钱都花在了重建 API 上,所以每个人都对此束手无策。
我们注意到,我们的 CF 实例的 WEB-INF/cfc-skeletons 目录最终似乎对于 API 使用的每个 CFC 都有两个类的副本。例如:
-rw-r--r-- Feb 17 09:15 remote_api.pfapi.v.trunk.pf_datum.class
-rw-r--r-- Feb 3 12:20 tafkan.remote_api.pfapi.v.trunk.pf_datum.class
错误似乎来自命名空间或类搜索路径问题,因此我们尝试将所有 CFC 引用切换为完全限定(以映射开头的点表示法),而不仅仅是对当前目录中 CFC 的简单引用.这看起来很有希望,但问题在 24 小时内又出现了。
环境:
- ColdFusion 7,0,2,142559 和 hf702-70523,2 实例集群
- Sun Java 1.4.2_13
- Apache 2.0.52
- Centos 4.5 32 位
也许升级这些古老的软件之一会有所帮助?也许只升级 AXIS?
Adobe 支持似乎不是一种选择,因为 CF7 已停产并处于扩展扩展支持中(仅支持几天)。
更新:
感谢所有参与此讨论的人!以下是有关当前情况的最新信息。
这项服务今天第一次出现问题。一个集群实例仍然能够生成 WSDL,而另一个实例说:
AXIS error
Sorry, something seems to have gone wrong... here are the details:
Exception - java.lang.NoClassDefFoundError: tafkan/remote_api/pfapi/v/trunk/rsp_pf_numeric_array
两个 cfc-skeletons 目录都包含一个名为 tafkan.remote_api.pfapi.v.trunk.rsp_pf_numeric_array.class 的文件,并且似乎不包含我们有时看到的其他名称的文件 (remote_api.pfapi.v.trunk .rsp_pf_numeric_array.class)。自昨天启动服务器以来,cfc-skeletons 中的文件似乎没有被修改过。
两个实例的正常运行时间约为 21.5 小时。我在没有 JIT (-Xint) 的情况下运行。
我现在已经重新启动了这两个实例。它们现在在 Sun Java 1.4.2_19(而不是 _13)上运行,并且 JIT 已重新启用,因为它显然不会导致此错误,并且如果没有它,事情会变得非常慢。我还清除了“保存类文件”复选框。
现在,我们再次等待......
更新 2 问题仍然存在。我不确定此时还可以尝试什么。啊!
仅供参考,这是在http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:60922 交叉发布的
【问题讨论】:
-
我会先跳到一个更新的 JVM 并考虑破坏集群(如果可以的话,只是循环请求)。另请记住,如果您只能从 1 或 2 个 IP 访问它们,您可以设置一对 CF8 或 CF9 服务器进行免费内部测试
-
我对 WSDL 命名空间有一点类似的问题。解决方案是使用 .cfm 容器生成适当的 Web 服务信息。也许这也适用于您,请参阅此 QA stackoverflow.com/questions/1119721/…
-
呃,ColdFusion 只是在后台使用 Apache Axis(Java....上次我检查的完全是强类型的).NET 使用结构应该没有问题。我一直在做。我认为您与一些低于标准的 .net 开发人员打交道,您应该回到结构
-
@kevink,感谢您的评论。我可以尝试升级JVM。我们在开发工作站上的 Apple 的 Java 1.5 和 1.6 上运行此应用程序,因此应该可以进行升级。我不能破坏集群,因为当 JVM 崩溃或我们必须重新启动其中一个服务器时,它是唯一能阻止我们严重停机的事情。
-
@Sergii,感谢您的链接。似乎它可能与我的问题有关,但我不确定如何。我不是用相同的名称生成两个类,而是用两个不同的名称创建一个类!
标签: soap coldfusion axis