首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NoClassDefFoundError: org/w3c/dom/ls/DocumentLS with com.sun.msv.generator.Driver

NoClassDefFoundError: org/w3c/dom/ls/DocumentLS with com.sun.msv.generator.Driver
EN

Stack Overflow用户
提问于 2021-02-11 19:31:30
回答 1查看 378关注 0票数 0

(编辑:查看问题的最短直接陈述的结尾)

我正在尝试从https://github.com/xmlark/msv运行msv-生成器。我下载了这个源代码,构建了它,并将以下jars放在一个文件夹中(跳过javadocs, sources, tests):

代码语言:javascript
运行
复制
ant.jar
crimson.jar
isorelax.jar
jdom.jar
junit.jar
maven-repository-importer.jar
msv-core-2017.2-SNAPSHOT.jar
msv-generator-2017.2-SNAPSHOT.jar
msv-rngconverter-2017.2-SNAPSHOT.jar
original-msv-rngconverter-2017.2-SNAPSHOT.jar
relaxngDatatype.jar
resolver.jar
saxon.jar
servlet.jar
xalan.jar
xercesImpl.jar
xmlParserAPIs.jar
xsdlib-2017.2-SNAPSHOT.jar

当我尝试运行它时,我得到了这个错误

代码语言:javascript
运行
复制
java -cp "c:/prog/msv/*" com.sun.msv.generator.Driver schema.rng
parsing a grammar: schema.rng
generating document #1
Exception in thread "main" java.lang.NoClassDefFoundError: org/w3c/dom/ls/DocumentLS

这个类出现在jars中:

代码语言:javascript
运行
复制
unzip -l xercesImpl.jar |grep DocumentLS
      329  11-11-2002 17:20   org/w3c/dom/ls/DocumentLS.class

但是我的java似乎在一个模块中查找org.w3c.dom,而不是在提供的jar中:

代码语言:javascript
运行
复制
java -version
java version "13.0.2" 2020-01-14
Java(TM) SE Runtime Environment (build 13.0.2+8)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)

java  -verbose:class -cp "c:/prog/msv/*" com.sun.msv.generator.Driver schema.rng|grep org.w3c.dom
parsing a grammar: schema.rng
[1.249s][info][class,load] org.w3c.dom.Node source: jrt:/java.xml
generating document #1
[2.470s][info][class,load] org.w3c.dom.Document source: jrt:/java.xml
[2.481s][info][class,load] org.w3c.dom.CharacterData source: jrt:/java.xml

我认为它是jdk.xml.dom模块,但它不提供org.w3c.dom.ls

代码语言:javascript
运行
复制
java --describe-module jdk.xml.dom
jdk.xml.dom@13.0.2
exports org.w3c.dom.css
exports org.w3c.dom.html
exports org.w3c.dom.stylesheets
exports org.w3c.dom.xpath
requires java.base mandated
requires java.xml transitive

显式添加模块不会有什么不同:

代码语言:javascript
运行
复制
java --add-modules jdk.xml.dom -cp "c:/prog/msv/*" com.sun.msv.generator.Driver schema.rng
parsing a grammar: schema.rng
generating document #1
Exception in thread "main" java.lang.NoClassDefFoundError: org/w3c/dom/ls/DocumentLS

https://stackoverflow.com/a/5756989/285364描述了java.lang.ClassNotFoundExceptionjava.lang.NoClassDefFoundError之间的区别。我得到的是后者,这可能意味着类初始化器中有一个错误。所以我试着直接加载它:

代码语言:javascript
运行
复制
java -cp c:/prog/msv/xercesImpl.jar org.w3c.dom.ls.DocumentLS
Error: Could not find or load main class org.w3c.dom.ls.DocumentLS
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.ls.DocumentLS

现在我被难住了,因为那个类在那个jar中:

代码语言:javascript
运行
复制
unzip -l c:/prog/msv/xercesImpl.jar |grep DocumentLS
      329  11-11-2002 17:20   org/w3c/dom/ls/DocumentLS.class

这个类会有什么问题呢?我用jad完成了它,它看起来没问题...除了它不是一个类而是一个接口?

代码语言:javascript
运行
复制
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 

package org.w3c.dom.ls;

import org.w3c.dom.DOMException;
import org.w3c.dom.Node;

public interface DocumentLS
{

    public abstract boolean getAsync();

    public abstract void setAsync(boolean flag)
        throws DOMException;

    public abstract void abort();

    public abstract boolean load(String s);

    public abstract boolean loadXML(String s);

    public abstract String saveXML(Node node)
        throws DOMException;
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-11 22:44:47

我从最新的xerces发行版https://xerces.apache.org/xerces2-j/install.html中获得了以下jars,这解决了问题:

代码语言:javascript
运行
复制
resolver.jar
serializer.jar
xercesImpl.jar
xml-apis.jar
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66153890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档