【发布时间】:2013-02-23 01:33:30
【问题描述】:
我正在运行一个带有 tomcat 和 Railo 的 linux 服务器。如果我尝试这个简单的代码:
check = "";
jSoupClass = createObject( "java", "org.jsoup.Jsoup" );
if(IsInstanceOf(jSoupClass,"org.jsoup.Jsoup")){
check = "ok";
}
writeDump(check );
如果我运行这个简单的代码,var check 总是空的。我用许多 java 类运行这个简单的测试,并且一切正常。
在我的应用程序中,我使用 jsoup 没有问题,但似乎无法运行这个简单的检查。我用它来检查文档的文档类型:
jSoupClass = createObject( "java", "org.jsoup.Jsoup" );
dom = jSoupClass.connect( "http://www.mutuiinpdap.net" ).userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6").timeout(10000).execute();
doc = dom.parse();
nods = doc.childNodes();
doctype = {};
for (key in nods) {
if(IsInstanceOf(key,"org.jsoup.nodes.DocumentType")){
doctype.string = key.toString();
switch(key) {
case "<!DOCTYPE html>":
doctype.declarations = "Html 5";
break;
case '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">':
doctype.declarations = "XHTML transitional";
break;
}
}
}
writeDump(doctype);
有没有办法解决这个问题?我可以使用不同的代码来检查哪个 doctype 是文档吗?
这段代码在我的本地 Windows 机器上完美运行。但是在我安装了 Ubuntu 的生产服务器上会中断...
[编辑]
我也用这段代码测试过:
public function getDoctype(){
myClass = {};
jSoupClass = createObject( "java", "org.jsoup.Jsoup" );
whois = createObject("java", "org.apache.commons.net.whois.WhoisClient");
myClass.jj = "ko";
myClass.ww = "ko";
writeDump(jSoupClass);
writeDump(whois);
if(IsInstanceOf(jSoupClass,"org.jsoup.Jsoup")){
myClass.jj = "ok";
}
if(IsInstanceOf(whois,"org.apache.commons.net.whois.WhoisClient")){
myClass.ww = "ok";
}
return myClass;
}
我会得到一个 myClass.jj = "ko";和 myClass.ww = "ok";
【问题讨论】:
-
我不明白为什么 isInstanceOf 不起作用 - 特别是如果它适用于一个安装而不是另一个安装 - 你能raise a bug 提供相关详细信息吗?
-
我想提出一个包含相关细节的错误,但没有更多要添加的。我在我的代码中添加了一个 try/catch 以查看有什么问题,但没有出错。我已经用进一步的例子更新了我的问题......我不能确定这是一个 railo 错误还是 Jsoup 错误。我对两组都提出了一些问题,但似乎没有人感兴趣......
-
参考链接:Railo Discussion 和Jsoup Discussion。
-
相关细节是 (1) 对行为不端的清晰描述(即 isInstanceOf 在可能不应该返回 false 时)(2) Railo、Jsoup 和您的 JVM 的版本,以及 (3 ) 一个可重现的测试用例 - 即问题中的代码 sn-ps 和 jsoup jar。如果您 raise it on Jira Micha/Igal 会看到并进一步调查 - 它可能会因为不是 Railo 问题而关闭,但这可能是 Micha 的问题,isInstanceOf 是否应该适用于静态/非初始化对象。
-
isInstanceOf 是否适用于静态/非初始化对象。 IMO 应该。这可能不是问题,但我在使用 javaLoader 时遇到了与 ACF8/9 类似的问题。
isInstanceOf返回 false,因为我的对象是由不同的类加载器创建的,即 javaLoader,而不是 CF 使用的主要类加载器。由于 Railo 支持动态类加载,它可能是相关的(?)。