Как найти экземпляр пользовательского тега в приложении coldFusion

Я переношу очень старое приложение (в настоящее время работающее в CF8) на Lucee. Но у меня возникла проблема с тем, что кажется каким-то пользовательским тегом.

Я попытался убедиться, что все виртуальные каталоги в IIS одинаковы как для старой, так и для новой установки. И убедитесь, что пути сопоставления и пользовательских тегов в CFIDE и Lucee Admin одинаковы.

Но я получаю эту ошибку. И не могу понять, как создается этот cflink.

введите здесь описание изображения

введите здесь описание изображения

Я нашел код ошибки в строке 300 файла utils.cfc введите здесь описание изображения

Я не использовал пользовательские теги в течение длительного времени, но думал, что они обычно вызываются с символом подчеркивания, и код должен больше походить на <cf_link pageid="#LinkPageID#" Init="start">, если это вызывается как пользовательский тег.

Если я перейду к текущему серверу CF, на котором запущено это приложение, я обнаружу, что файлы cfclass были созданы введите здесь описание изображения Из файла с именем cflink.cfm в каталоге с именем "теги" даже хотя кажется, что для каталога «теги» нет сопоставления, и он не указан в разделе «Пути настраиваемых тегов» в администраторе.

Это приложение было запущено в 2003 году и, как вы можете себе представить, превратилось в несоответствие спагетти-кода, и с самого начала никто не мог спросить, как создается этот тег.

Есть ли у кого-нибудь с опытом работы с устаревшим кодом какие-либо другие идеи, где я должен искать, чтобы попытаться заставить это работать? В настоящее время у меня есть только производственная среда, и если я смогу заставить ее работать с Lucee, это будет не только среда разработки, которой не было здесь 10 лет, но и отличный способ для меня продолжать демонстрировать Lucee как отличный двигатель CFML

Добавление дополнительной информации

Ли спросил, может ли init быть ссылкой на jar, но в файле cflink.cfm я вижу этот код:

    <cfif Attributes.Init IS "start">
        <cfset Request.PageID = Attributes.PageID>
        <cfset Request.Page_Width = Variables.qParentInfo.Page_Width>
        <cfset Request.Page_Height = Variables.qParentInfo.Page_Height>
        <cfset Request.Page_TypeID = Variables.qParentInfo.Page_TypeID>
        <cfset Request.AddPath = "">
        <cfif IsDefined("Attributes.Anchor")>
            <cfset Request.Anchor = Attributes.Anchor>
        <cfelse>
            <cfset Request.Anchor = "">
        </cfif>
        <cfset Request.IsInternalLink = false>
        <cfexit method="EXITTAG">
    </cfif>

Также есть ссылки на cflink в коде внутри tags\cflink.cfm

<cfif Len(Variables.qParentInfo.ParentID) GT 0>
    <!--- Add the page title to the end of the path --->
    <cfset Request.AddPath =  ReplaceNoCase(Variables.qParentInfo.Nav_Title," ","_","ALL") & "/" & Request.AddPath>
    <cflink init="working" pageid="#Variables.qParentInfo.ParentID#" popcode="#Attributes.popcode#">
<cfelse> ......</cfif>

Хотя это может быть рекурсия, учитывая, что она была написана в 2004 году, я немного сомневаюсь в этом.

Добавление скриншотов результатов поиска

введите здесь описание изображения введите здесь описание изображения


person Lance    schedule 08.12.2015    source источник
comment
Снимали в темноте, но cfimport звонков не проверяли? Вы можете делать некоторые творческие вещи с библиотеками тегов.   -  person Leigh    schedule 08.12.2015
comment
Попробуйте выполнить поиск на вашем сервере link.cfm. Это должно быть где-то   -  person James A Mohler    schedule 09.12.2015
comment
Похоже, они сделали это: ...Из файла с именем cflink.cfm в каталоге с именем tags... ?   -  person Leigh    schedule 09.12.2015
comment
Я думал об одном без части cf. Разве cf_ не добавляется автоматически или Люси отличается?   -  person James A Mohler    schedule 09.12.2015
comment
нет cf_ Я упомянул об этом специально, потому что каждый другой пользовательский тег, кажется, всегда вызывается таким образом (с подчеркиванием), но в случае с этой cflink никогда не бывает подчеркивания   -  person Lance    schedule 09.12.2015
comment
Джеймс – Ну, я не уверен, что это это пользовательский тег. IIRC, ACF запрещает пользовательские теги начинаться с cf (без подчеркивания). Единственное исключение, о котором я мог подумать, было, может быть, это часть библиотеки тегов, то есть cfimport? (Изменить) @Lance - Вы искали cfimport?   -  person Leigh    schedule 09.12.2015
comment
Я провел полный поиск по всему коду, и в приложении есть только 1 экземпляр тега cfimport, который используется для импорта утилит POI Бена Наделя. Итак, если он не импортируется и не может быть пользовательским тегом, потому что нет подчеркивания, и он преобразуется в cfclass на поле cf8, как это происходит?   -  person Lance    schedule 09.12.2015
comment
Предложение 1. Вы искали GETPAGEPATHS . Это похоже на пользовательскую функцию внутри cflink.   -  person James A Mohler    schedule 09.12.2015
comment
Предложение 2: Возможно, вам нужно искать не файл cfm. Может быть, они получили какой-то файл, отличный от cfm, в качестве пользовательского тега. Попробуйте поискать на cflink.*   -  person James A Mohler    schedule 09.12.2015
comment
Честно говоря, я не уверен. Я никогда не слышал о способе обойти ограничения на имена (по крайней мере, не со стандартным кодом CF), но не мог полностью это исключить. Если вы изучите содержимое файла data\cflink.cfm, предложит ли код, что используется <cflink...>? Может не. Кроме того, длинный выстрел, но ... есть ли какие-либо пользовательские банки в пути к классу или WEB-INF\lib? (Изменить) Джеймс. Да, поиск ссылок без тегов на cflink (только) — хорошая идея. Имя init заставило меня задуматься, может быть, это какой-то тег Java?   -  person Leigh    schedule 09.12.2015
comment
Теперь я просмотрел в каталоге /lib любые возможные файлы jar, которые могут называться link.jar или cflink.jar, но не повезло. Что касается того, что делает тег ... файл tags/cflink.cfm выполняет пару запросов против базы данных, а затем обрабатывает ссылки (якоря) в нашей устаревшей проприетарной CMS и обрабатывает их немного по-разному в зависимости от критериев. Но создание экземпляра ошеломляет меня, и я использовал МНОГО времени, отслеживание не работает, пора рвать на себе волосы   -  person Lance    schedule 09.12.2015
comment
Я добавил дополнительную информацию к вопросу, особенно об упомянутой инициализации.   -  person Lance    schedule 09.12.2015
comment
@Lance - Ну, банки можно назвать как угодно, поэтому поиск по имени не обязательно поможет. Как и в случае с файлом .zip, необходимо проверить фактическое содержимое. Однако теги jars/jsp были далекой перспективой. Судя по обновленному коду, кажется, что data\cflink.cfm — это файл, на который ссылается код (если только это не старый код, который никогда не удалялся ;-). Если да, то я в недоумении, как они это сделали. Во всяком случае, для улыбки, что произойдет, если вы используете <cf_link>, а не <cflink>?   -  person Leigh    schedule 09.12.2015
comment
@Leigh - Если я изменю его на ‹cf_link›, он ДЕЙСТВИТЕЛЬНО обходит эту конкретную ошибку, но затем я получаю новую ошибку the function init has an invalid return value , can't cast null value to value of type [this], но я не уверен, связано это или нет. Я понимаю, что файл jar представляет собой скомпилированный файл и может содержать что угодно. имена наверняка не представляют ничего похожего на ссылку или cflink, но есть несколько банок с непонятным именем. Есть ли простой поиск по их содержимому?   -  person Lance    schedule 10.12.2015
comment
Любой инструмент, который может искать файлы .zip, должен помочь. 7zip, TotalCommander и так далее. Я не думаю, что Windows позволяет вам искать банки по умолчанию, но вы всегда можете сделать копию (для безопасности) и переименовать ее из *.jar -> *.zip Это должно сделать Windows счастливым и позволить вам искать содержимое.   -  person Leigh    schedule 10.12.2015
comment
Я собирался поискать jar каталога coldFusion8, exe все. Я собирался найти некоторые ссылки на cflink, но когда я пытаюсь просмотреть файлы, я получаю очень ограниченную возможность что-либо увидеть (изображения добавлены к вопросу выше). Знаете ли вы, могу ли я установить на сервер что-нибудь, что работает, чтобы видеть, что происходит, какие файлы являются файлами и в каком порядке? У нас есть лицензия на SeeFusion, но она не дает таких подробностей. Я также удалил файлы в web-inf\cfclasses и отключил сохранение классов в админке.   -  person Lance    schedule 11.12.2015


Ответы (1)


Если кто-то еще столкнется с этим. В CF8 и, предположительно, в более ранних версиях вы можете поместить файл cfm в каталог ColdFusion8\wwwroot\WEB-INF\cftags, и в данном случае этот файл ColdFusion8\wwwroot\WEB-INF\cftags\link.cfm будет действовать как любой другой тег cftag.

Мне удалось найти человека, который первоначально создал это приложение в 2004 году, и он сказал мне, что они сделали это таким образом, чтобы не вводить знак подчеркивания, который они бы напечатали, если бы сделали это как пользовательский тег.

Я как бы понимаю, поскольку этот тег используется везде в приложении, буквально сотни раз. Немного мальчик с сукой, чтобы найти.

Теперь все, что мне нужно сделать, это выяснить, как переместить его в мир Lucee аналогичным образом. Таким образом, он создает экземпляры таким же образом.

Спасибо @Leigh за всю вашу помощь, вы всегда прекрасны!

Добавление дополнительной информации

если в WEB-INF\lucee\library\tag есть файлы, соответствующий каталог Lucee - WEB-INF\lucee\library\tag. Эти файлы считываются при загрузке, а затем могут использоваться как любой другой тег cf.

Например, если у вас есть файл WEB-INF\lucee\library\tag\link.cfm, его можно вызвать с помощью `cflink'.

Кажется крутой идеей, но немного дерьмовой для кого-то, чтобы найти ее через 10 лет после свершившегося факта.

person Lance    schedule 11.12.2015
comment
Вау... никогда не знал, что ты так умеешь! Отличная работа по разгадке тайны. Вы не знаете, разрешает ли Люси это тоже? Кажется, я припоминаю, что в Railo можно было создавать теги cf без подчеркивания, хотя и не совсем таким же образом. поскольку этот тег используется везде в приложении.. Хе-хе, разве вы не любите устаревшие приложения? ;-) - person Leigh; 12.12.2015
comment
Это то, над чем я сейчас работаю. Я опубликую это в своем ответе, когда разберусь. В очередной раз благодарим за помощь - person Lance; 12.12.2015
comment
Добро пожаловать. Я с нетерпением жду этого. (Думаю, устаревшие приложения не всегда могут быть забавными, но они никогда не бывают скучными). - person Leigh; 12.12.2015