Я столкнулся с той же проблемой.Я полагаю, что могу что-то добавить к этому, но в конечном итоге я думаю, что здесь есть дефект CF, который я попытаюсь уточнить.
Первое замечание в стеке отследит это:
at coldfusion.runtime.CgiScope.resolve(CgiScope.java:221)
at coldfusion.runtime.CgiScope.containsName(CgiScope.java:301)
at coldfusion.runtime.CgiScope.search(CgiScope.java:334)
at coldfusion.runtime.NeoPageContext.searchScopes(NeoPageContext.java:766)
at coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:638)
Когда ColdFusion пытается разрешить переменную с незаданной областью, он будет проходить через порядок приоритетов, тестируя каждую область.Если он полностью переходит в область CGI, сервер CF пытается запросить у соединителя веб-сервера информацию CGI в заголовке запроса.В свою очередь, соединитель пытается прочитать с дескриптора соединителя, который удерживает TCP-соединение, обратно к браузеру.Сетевое соединение, которое вы видите в этом сообщении, может быть соединителем, пытающимся получить некоторые свойства CGI из браузера через TCP.
Если соединение с браузером больше не активно, скажем, пользователь закрыл браузер, щелкнул в другом месте или произошел разрыв сети, то это TCP-соединение может быть « stale ».В этом случае вы увидите трассировку стека в журналах, подобную этой, с основным сообщением «** ошибка при чтении заголовка»
03/06 13:45:52 error Error while reading header <headername>
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
...
at coldfusion.runtime.CgiScope.resolve(CgiScope.java:221)
at coldfusion.runtime.CgiScope.containsName(CgiScope.java:301)
at coldfusion.runtime.CgiScope.search(CgiScope.java:334)
ColdFusion выполнит поиск области при использовании кода, подобного isdefined('myUnscopedVar'), например.Если он доходит до CGI, он запросит у коннектора заголовок myUnscopedVar.Если соединение с браузером пропало, то в журналах будет отображаться сообщение об ошибке « Ошибка при чтении заголовка myUnscopedVar »
Чтобы избежать этого, используйте structKeyExists во всех местах, которые вы используете, - isDefined.
Более подробную информацию можно найти в этих соответствующих записях в блоге:
Если вы ищете ошибкусообщение «ошибка при чтении заголовка» вы фактически получите много ложных срабатываний в результатах поиска, потому что ColdFusion's CFSAVECONTENT реализован как пользовательский тег CF , хранящийся в WEB-INF,и он делает нечто подобное, что имеет тот же эффект, что и isDefined ("anUnscopedVar") , так как он захватывает сгенерированный контент.Встроенный обработчик исключений CF использует cfsavecontent при попытке обработать исключения для отображения, поэтому он перехватывает исключение базового приложения, пытается его обработать, но сталкивается с проблемой «Ошибка при чтении заголовка» и вместо просмотраИсключение исходного приложения: вы получаете эту ошибку заголовка, которая скрывает истинную проблему .
error Error while reading header S_UNABLE
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
...
at coldfusion.runtime.CgiScope.resolve(CgiScope.java:221)
at coldfusion.runtime.CgiScope.containsName(CgiScope.java:301)
at coldfusion.runtime.CgiScope.search(CgiScope.java:334)
...
at cfsavecontent2ecfm1472308084.runPage(E:\cf9_final\cfusion\wwwroot\WEB-INF\cftags\savecontent.cfm:11)
...
at cfexception_en2exml1502993924.runPage(D:\JRun4\servers\cfusion\cfusion.ear\cfusion.war\WEB-INF\exception\exception_en.xml:52)
...
at cfdetail2ecfm1809038875.runPage(D:\JRun4\servers\cfusion\cfusion.ear\cfusion.war\WEB-INF\exception\detail.cfm:35)
...
at cfApplicationException2ecfm797577125.runPage(D:\JRun4\servers\cfusion\cfusion.ear\cfusion.war\WEB-INF\exception\coldfusion\runtime\ApplicationException.cfm:2)
Опять же, вывод, что если соединение с браузером было разорвано, то ваш код может показатьошибка «чтение заголовка» при поиске CGI по умышленному или из-за использования isDefined для имени переменной с незаданной областью.
Так что это всего лишь некоторая дополнительная справочная информация.Эта проблема пересекается с проблемой ORM в этом потоке.
Я обнаружил, что в ColdFusion 9.01 иногда вызовы неявных сеттеров заставляют ColdFusion пытаться разрешить метод сеттера, как если бы это было свойство, и он будет выглядетьв область CGI, чтобы попытаться найти его.
У меня есть следующая сущность, показанная здесь (частично):
component persistent="true" table="myTable" output="false" extends="myBaseClass" {
property name="myProperty" column="myProperty" type="date" ormtype="timestamp";
Обратите внимание, что она расширяет myBaseClass, который показан (частично) здесь:
component {
public void function doSomething(){
if (hasProperty('myProperty'))
setMyProperty(now());
}
В некоторых случаях, когда запрашивается шаблон, использующий сущность, запрос шаблона кажется зависшим в браузере на неопределенное время с вращением адресной строки.Позже при просмотре журналов я обнаружил связанную запись для запроса, показывающую «ошибка при чтении заголовка».
03/06 13:45:52 error Error while reading header SETMYPROPRTY
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
...
at coldfusion.runtime.CgiScope.resolve(CgiScope.java:221)
at coldfusion.runtime.CgiScope.containsName(CgiScope.java:301)
at coldfusion.runtime.CgiScope.search(CgiScope.java:334)
...
at cfmybaseclass2ecfc1915167844$funcDOSOMETHING.runFunction(X:\MyApp\myBaseClass.cfc:8)
...
at coldfusion.orm.hibernate.HibernateEventHandler.onFlushDirty(HibernateEventHandler.java:130)
...
at coldfusion.orm.hibernate.HibernatePersistenceManager.onCommit(HibernatePersistenceManager.java:950)
...
at cfsomecomp2ecfc1707726523$funcRUN.runFunction(X:\MyApp\SomeComp.cfc:131)
Эта трассировка стека говорит мне, что ColdFusion пытался разрешить неявный установщик и пыталсянайдите его в области CGI, запросив у коннектора заголовок HTTP-запроса с тем же именем.
Для меня попытка разрешить неявный метод получения путем поиска в области CGI для заголовка запроса выглядит дефектом ColdFusion.
Мнения