Coldfusion 8 - 映射冲突导致“参数不是接口类型”错误

时间:2012-01-20 21:11:23

标签: coldfusion coldfusion-8

我一直在研究这个,似乎无法找到任何关于它的东西。

我们致力于CF8。当我的同事尝试安装我的最新代码更新时,他开始看到提供给函数的参数不是指定接口类型的错误。为我工作得很好。相同的设置。有时它对他有用。在我们的开发服务器上也有问题。

此后我能够在本地隔离并重现问题。

这是设置。

我在服务器上有2个映射:

      
  • “webapp /”转到c:\ webroot \
  •   
  • “packages /”转到c:\ webroot \ [domain]

然后我创建了一个接口,称之为ISubject和一个实现它的组件,名为Person,并在包下保存。这是Person的声明:

cfcomponent implements="packages.ISubject"

最后,有一个名为SubjectMediator的组件,它带有一个名为setSubject的函数,它需要一个ISubject接口类型的对象。这是setSubject的参数声明:

cfargument name="subject_object" type="packages.ISubject"

实施:

variables.person = createObject("component", "packages.Person").Init();  
variables.subjectMediator = createObject("component", "packages.SubjectMediator ").Init();  
variables.subjectMediator.setSubject(variables.person);

最后一行抛出Person不是ISubject类型的错误。如果我针对ISubject对Person执行isInstanceOf(),则验证正常。

所以这是发生的原因?转储getMetaData(variables.person)向我显示接口路径是webapp。[domain] .ISubject。事实上,如果我改变参数的type属性来使用这个路径而不是packages.ISubject,那么一切都很好。

Coldfusion似乎是随意选择解析接口的映射,然后简单地进行字符串比较以检查类型参数?

任何人都不得不与此抗衡?我需要webapp映射,并且我无法将对“packages”的所有引用更改为“webapp。[domain]”。在这种情况下,我也无法使用特定于应用程序的webapp映射。虽然这3个选项中的任何一个都可以绕过这个问题,但我希望有人有一些见解......

我得到的最好的方法是将参数类型设置为“any”,然后在函数内部检查isInstanceOf()......看起来像是糟糕的形式。

谢谢,

1 个答案:

答案 0 :(得分:0)

您可以将包映射的内容移动到webroot之外吗?这似乎是解决问题的最简单方法。