Я работаю над веб-приложением, уже работающим на производственном сервере, на основе кода CF, который использует и зависит от сопоставлений администратора CF для определения местоположения 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()>
В другой папке в webroot (_TaskDir
) есть несколько сценариев запланированных задач, которые вызывают метод CreateObject
так же, как и везде, используяточечная нотация для указания пути к каталогу сопоставленных компонентов.Предположительно, он работал нормально на производстве, но по какой-то неизвестной причине я обнаружил, что он не работает в этом каталоге в моей среде разработки.CreateObject
отлично работает в остальной части моего приложения, но когда он помещается в скрипты в этой папке, он терпит неудачу.
Под неудачей я имею в виду ошибку NullPointerException
.Если я поменяю путь точечной нотации на физический (так как оба пути находятся внутри рута), например CreateObject("component", "/CFC/component1").init()
, тогда все в порядке.Это просто точечная нотация и сопоставления, которые, кажется, игнорируются только в этом каталоге.
Это потому, что эта папка находится вне каталога приложения, в котором есть основной Application.cfm
, а у _TaskDir
есть свой собственный Application.cfm
?Я думаю, что сопоставления будут работать для любого из них.
Первая часть stackTrace:
java.lang.NullPointerException at coldfusion.util.Utils.getDirectoryFromPath (Utils.java: 350..runtime.CFPage.CreateObject (CFPage.java:6373) ...
Я использую CF2016 в контейнере Tomcat.