Почему CreateObject с точечным обозначением пути к компоненту не работает, используя сопоставления администратора CF, которые определяют путь к каталогу CFC? - PullRequest
0 голосов
/ 25 января 2019

Я работаю над веб-приложением, уже работающим на производственном сервере, на основе кода 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.

1 Ответ

0 голосов
/ 28 января 2019

Я нашел проблему.Выяснилось, что версия Tomcat (8.5.20), которую я использую в качестве контейнера для моего сервера Apache, теперь чувствительна к регистру.Я запустил 3 скрипта из своего каталога _TaskDir, указав URL с неправильным регистром (_Taskdir), первые 2 запустились нормально.Третий был тот, который пытался запустить CreateObject, используя сопоставления администратора, чтобы найти каталог CFC.URL, по-видимому, используется для сравнения с путями Mappings.Использование неправильного регистра в URL влияет на путь точечного обозначения к каталогу CFC.По крайней мере, я знаю, как решить эту проблему сейчас.

Если вы можете пролить больше света на то, как эти регистрозависимые пути влияют на CF, я бы хотел узнать больше.Если есть статья на эту тему, пожалуйста, поделитесь.

...