【发布时间】:2014-11-21 20:33:03
【问题描述】:
我有一个使用 Flash 8 和 actionscript 2.0 构建的网站。这连接到coldfusion 7服务器,为用户打印报告等内容。这已经工作了很多年,但是自从Flash Player更新以来,自15+版本以来,此打印已停止工作,现在我得到以下信息错误
500
java.lang.IllegalArgumentException 在 Coldfusion.filter.FormScope.parseQueryString(FormScope.java:283) 在 Coldfusion.filter.FormScope.parsePostData(FormScope.java:255) 在 Coldfusion.filter.FormScope.fillForm(FormScope.java:206) 在 Coldfusion.filter.FusionContext.SymTab_initForRequest(FusionContext.java:384) 在coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:33) 在 Coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 在 Coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:115) 在coldfusion.CfmServlet.service(CfmServlet.java:107) 在 Coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:78) 在 jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:91) 在 jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) 在 jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:259) 在 jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) 在 jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 在 jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) 在 jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
我已经尝试了解决方案 Handling 500 JRun servlet in ColdFusion。这停止了屏幕上显示的错误,但我什么也没显示
以下代码是我调用coldfusion页面的方式
var xmlString:String = "<rootNode>";
// More xml
xmlString += "</rootNode>";
var xmlObj = new XML(xmlString);
xmlObj.contentType = "text/xml";
xmlObj.send( "https://domainname.com/printme.cfm", "_blank");
从测试中我注意到,如果我将 xmlString 设为空字符串,则上述错误将停止,但只要是任何文本,上述错误就会再次出现
有没有人有任何想法, 谢谢
编辑 这里要求的是来自 ServiceCapture 的标头
第一个来自 FireFox,使用 flash player 15.0.0.233 并给出 500 错误。 第二个来自 IE,使用 flash player 10.2.153.1 并正确打印。 两者都访问同一个网站
我从 ServiceCapture 注意到的一件事是,当它工作时,xml 文本会列在请求端的“文本”选项卡中。当它不起作用时,xml 会显示在“参数”选项卡中
POST /printme.cfm HTTP/1.1
Host: domainname.com
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: CFID=8989; CFTOKEN=556456456456; JSESSIONID=4544545f93bea93a591513
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 2100
POST /printme.cfm HTTP/1.1
Accept: */*
Content-Type: text/xml
Accept-Language: en-gb
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: domainname.com
Content-Length: 2100
Cookie: CFID=23232; CFTOKEN=656565656; JSESSIONID=583078632234aa20506970
编辑 2; 我注意到在第一个 POST 块中,内容类型设置为“application/x-www-form-urlencoded” 这是默认设置。由于某种原因,较新版本的 Flash 播放器接缝忽略了这一行
xmlObj.contentType = "text/xml";
另外,如果我删除此行,我会收到两个版本的播放器的 500 错误
【问题讨论】:
-
您需要发布 CF 代码。 500 错误是通用的,并且会掩盖实际错误。尝试在 application.log 中查找它。
-
感谢您的回复,我最初并没有发布 CF 代码,因为我上面提到的胎面说这个错误是由 jrun 引起的,甚至在 CF 被调用之前。即使是简单的
hello world 也会产生同样的结果 -
嗯...好吧,这个怎么样。首先,使用 firebug 或 wireshark 发布 RAW http 数据——XML 数据包和 http post headers。然后,在 CF 端查看标准 Java 输出日志的 /runtime/logs - 有时标题为“cfusion-out.log”。该日志包含 CF 日志中未找到的信息。也许会出现一个线索。
-
cfusion-out.log 在 javax.servlet 的 javax.servlet.http.HttpUtils.parseQueryString(HttpUtils.java:149) 解析 POST 数据 java.lang.IllegalArgumentException 时也出现此“警告错误”。 http.HttpUtils.parsePostData(HttpUtils.java:252) 在 jrun.servlet.JRunRequest.parsePostData(JRunRequest.java:381) 在 jrun.servlet.JRunRequest.getParameters(JRunRequest.java:361) '...
-
这是一个很好的线索!让我们看看您发布的 RAW xml 是什么。
标签: coldfusion actionscript flash