为什么使用定义了CFC目录路径的CF Administrator映射,带有指向组件的点符号路径的CreateObject不能正常工作?

时间:2019-01-24 23:01:38

标签: coldfusion mapping coldfusion-2016 createobject

我正在基于CF代码在生产服务器上使用Web应用程序,该CF代码使用并依赖于CF Administrator映射来定位CFC。我有这样的目录结构:

Webroot/
  _TaskDir/
    Application.cfm
    myFile.cfm
  CFC/
    component1.cfc
    ...
  app/
    Application.cfm
    index.cfm
    ...

我在CF Administrator中的映射类似于:

Logical Path: /myComponents
Directory Path: C:/Projects/Code/.../CFC/

大多数应用程序都位于应用程序目录下,并使用调用在各处创建对象,例如: <cfset myCFCojb = CreateObject("component", "myComponents.component1").init()>

在网络根目录(_TaskDir)的另一个文件夹中,有一些计划的任务类型脚本,它们以与其他所有地方相同的方式调用CreateObject方法,使用点符号指定到文件的路径。组件映射目录。据称它在生产上运行良好,但是由于某种未知的原因,我发现它在我的开发环境中的此目录中不起作用。 CreateObject在我的应用程序的其余部分都可以正常工作,但是当放入此文件夹中的脚本时,它将失败。

如果失败,我的意思是我遇到了NullPointerException错误。如果我将点标记路径更改为物理路径(因为两个路径都在webroot内),例如CreateObject("component", "/CFC/component1").init(),那就很好。只是在此目录中似乎忽略了点符号和映射。

这是因为此文件夹位于应用程序目录的外部,该目录具有主Application.cfm,而_TaskDir具有自己的Application.cfm?我认为Mappings都可以。

stackTrace的第一部分是:

  

java.lang.NullPointerException在   coldfusion.util.Utils.getDirectoryFromPath(Utils.java:350)在   coldfusion.runtime.TemplateProxyFactory.getTemplateFileHelper(TemplateProxyFactory.java:1638)   在   coldfusion.cfc.ComponentProxyFactory.getProxy(ComponentProxyFactory.java:51)   在coldfusion.runtime.CFPage.CreateObject(CFPage.java:6354)在   coldfusion.runtime.CFPage.CreateObject(CFPage.java:6373)...

我正在Tomcat容器中使用CF2016。

1 个答案:

答案 0 :(得分:1)

我发现了问题。发现我用作Apache服务器容器的Tomcat(8.5.20)版本现在区分大小写。我从_TaskDir目录运行了3个脚本,并使用错误的大小写(_Taskdir)指定了URL,前两个脚本运行良好。第三个是试图使用“管理员映射”运行CreateObject来查找CFC目录的计算机。该URL显然用于与Mappings路径进行比较。 URL中使用错误的大小写会影响CFC目录的点符号路径。至少我现在知道如何解决这个问题。

如果您可以进一步了解这种区分大小写的路径如何影响CF,我想了解更多。如果有关于此的文章,请分享。