我有一个在4台服务器上运行的java web应用程序。最新的服务器(刚刚设置(出现故障,并出现错误"java.lang.NoSuchMethodError:org.htmlparser.lexer.parseCDATA((Lorg/htmlparser/Node"当运行下面的代码时。
我有一台服务器正在我的mac上本地运行。2台服务器正在运行Centos 6.10/java 1.8.0_242/tomcat-8.5.54最新的服务器(出现故障的服务器(正在运行Centos 6.10/java 1.8.0_242/tomcat-8.5.54
我已经将所有罐子从正在工作的Centos服务器复制到损坏的
我不知所措。很想听听关于如何调试/解决此问题的一些想法。。。。
运行代码非常简单另一个让我困惑的部分是,如果找不到jar,那么Parser.createParser就会爆炸,我添加了调试代码来确保Parser_c不是空
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.ParserException;
public class SignatureTools {
public static String getURLFromSignature(String signature) throws ParserException {
System.out.println("[getURLFromSignature]");
if ( signature == null ){ return null;}
Parser parser_c = Parser.createParser(signature, null);
Node nodes_c[] = parser_c.extractAllNodesThatAre(LinkTag.class);
String mkURL = null;
for (Node node : nodes_c) {
if (node != null && node instanceof LinkTag && ((LinkTag) node).getAttribute("href") != null) {
String href = ((LinkTag) node).getAttribute("href");
if ( href.contains("https://www.thedomain.com") ){
mkURL = href;
}
}
}
return URL;
}
}
发现问题。。
我使用了这段代码,发现Lexer是从另一个jar加载的,而不是从htmllexer.jar 加载的
Lexer lexer = new Lexer();
try {
System.out.println( "Lexer---->" + new File(Lexer.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getPath());
} catch (URISyntaxException e) {
e.printStackTrace();
}