【问题标题】:Unable to run Java command无法运行 Java 命令
【发布时间】:2013-07-23 15:06:47
【问题描述】:

我们正在使用 Webmethods 8.2,我们正在尝试从 linux 机器在 SQL 服务器上设置初始数据库。命令格式为,

./dbConfigurator.sh -a create -d sqlserver -c storage -v latest -l jdbc:wm:sqlserver://<sqlserverip>:1433;databaseName=DBNAME" -u DBUSER -p Passwd -au ADMIN -ap Passwd

我们收到以下错误。有人可以破译我们的错误是什么。我们感谢我们能得到的任何帮助。谢谢!

Exception in thread "main" java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at org.apache.xerces.parsers.AbstractDOMParser.startDocument(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.startDocument(Unknown Source)
    at org.apache.xerces.impl.dtd.XMLDTDValidator.startDocument(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity(Unknown Source)
    at org.apache.xerces.impl.XMLVersionDetector.startDocumentParsing(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at com.webmethods.common.cdbc.engine.definition.ComponentStore.initialize(ComponentStore.java:128)
    at com.webmethods.common.cdbc.engine.definition.ComponentStore.instance(ComponentStore.java:98)
    at com.webmethods.common.cdbc.engine.definition.DatabaseDefinitionManager.<init>(DatabaseDefinitionManager.java:42)
    at com.webmethods.common.cdbc.engine.definition.DatabaseDefinitionManager.instance(DatabaseDefinitionManager.java:49)
    at com.webmethods.common.cdbc.install.DatabaseComponentInstaller.isValidComponentName(DatabaseComponentInstaller.java:258)
    at com.webmethods.common.cdbc.install.DatabaseComponentInstaller.validateDCIParams(DatabaseComponentInstaller.java:1021)
    at com.webmethods.common.cdbc.install.DatabaseComponentInstaller.checkMissingArgsAndValidate(DatabaseComponentInstaller.java:148)
    at com.webmethods.common.cdbc.install.DatabaseComponentInstaller.execute(DatabaseComponentInstaller.java:341)
    at com.webmethods.common.cdbc.client.CommandLineClient.main(CommandLineClient.java:19)
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 31 more[/code]

这是我的 dbConfigurator.sh

#!/bin/sh
# set env for CDC

ENV_PATH=/opt/softwareag/DB/common/db/bin/setEnv.sh
export ENV_PATH
source=$ENV_PATH
. ./setEnv.sh

if [ -z "$JAVA_HOME" ]; then
echo "The environment variable JAVA_HOME must be set"
    echo "Can't run the database component installer."
    exit
fi

if [ -z "$CDBS_HOME" ]; then
    echo "The environment variable CDBS_HOME must be set."
    echo "Can't run the database component installer."
    exit
fi

if [ -z "$DCI_HOME" ]; then
    echo "The environment variable DCI_HOME must be set."
    echo "Can't run the database component installer."
    exit
fi

#runJava

RUN="$JAVA_HOME/bin/java"

$RUN $JAVA_OPTS com.webmethods.common.cdbc.client.CommandLineClient "$@"

还有这个文件调用的setEnv.sh,

    #!/bin/sh
# set env for CDC

JAVA_HOME=/opt/softwareag/DB/jvm/jvm160
DCI_HOME=/opt/softwareag/DB/common/db
CDBS_HOME=/opt/softwareag/DB/common/db

#exportStartHeap


DCI_START_HEAP="${DCI_START_HEAP:-10}";export DCI_START_HEAP

DCI_MAX_HEAP="${DCI_MAX_HEAP:-512}";export DCI_MAX_HEAP

#exportJavaOpts

JAVA_OPTS="$JAVA_OPTS -DCDBS.home.path=$CDBS_HOME"
JAVA_OPTS="$JAVA_OPTS -DDCI.home.path=$DCI_HOME"
JAVA_OPTS="$JAVA_OPTS -Dlog.dir=$DCI_HOME/logs"
JAVA_OPTS="$JAVA_OPTS  -DtermOutOn=true"
JAVA_OPTS="$JAVA_OPTS  -DspoolOn=true"

##==================To enable debug, change this property to 'DEBUG'==========
JAVA_OPTS="$JAVA_OPTS  -DlogLevel=INFO"
##============================================================================

JAVA_OPTS="$JAVA_OPTS  -Xms${DCI_START_HEAP}m"
JAVA_OPTS="$JAVA_OPTS  -Xmx${DCI_MAX_HEAP}m"
JAVA_OPTS="$JAVA_OPTS  -Xss256k"

export JAVA_OPTS

##exportClassPath
CLASSPATH="$CLASSPATH:$DCI_HOME"
CLASSPATH="$CLASSPATH:$DCI_HOME/lib/wm-cdc-client.jar"
for file in $DCI_HOME%/lib/wm-cdc-client_*
do
  CLASSPATH=${CLASSPATH}:$file
done
CLASSPATH="$CLASSPATH:$DCI_HOME/lib/CDC_PELP_ja_Messages-ALL-Any.jar"
CLASSPATH="$CLASSPATH:$DCI_HOME/lib/CDC_PELP_ar_Messages-ALL-Any.jar"
CLASSPATH="$CLASSPATH:$DCI_HOME/../lib/wm-cdc-core.jar"
CLASSPATH="$CLASSPATH:$DCI_HOME/../lib/ext/jargs.jar"
CLASSPATH="$CLASSPATH:$DCI_HOME/../lib/wm-g11nutils.jar"
CLASSPATH="$CLASSPATH:$DCI_HOME/../lib/ext/log4j.jar"
CLASSPATH="$CLASSPATH:$DCI_HOME/../lib/ext/derby.jar"
CLASSPATH="$CLASSPATH:$DCI_HOME/../lib/wm-caf-common.jar"
for file in $DCI_HOME/../lib/ext/sl53*
do
  CLASSPATH=${CLASSPATH}:$file
done
CLASSPATH="$CLASSPATH:$DCI_HOME/../lib/ext/xercesImpl.jar"
CLASSPATH="$CLASSPATH:$JAVA_HOME/lib/tools.jar"
CLASSPATH="$CLASSPATH:$JAVA_HOME/jre/lib/charsets.jar"
export CLASSPATH

【问题讨论】:

  • 关于 SO 有点离题。这应该在 SU 上。
  • 请同时发布 dbConfigurator.sh
  • 我刚刚添加了文件调用的 dbConfigurator.sh 和 setEnv.sh。谢谢。
  • 你的类路径中需要xml-apis.jar
  • 实际上,java 命令运行得很好。但是你的类路径中有一些混乱。确切地说,很难说 - NoClassDefFoundError 是一个非常模糊的异常,可以在许多不同的场景中引发,具有不同的基本原因。

标签: java


【解决方案1】:

NoClassDefFoundError 出现在 Java 虚拟机无法在运行时找到编译时可用的特定类时。

在你的特定情况下,JAVA 找不到 xml-apis.jar,像这样将它添加到 setEnv.sh(找到路径并编辑)

CLASSPATH="$CLASSPATH:$DCI_HOME/../lib/xml-apis.jar"

【讨论】:

    【解决方案2】:

    根据一篇帖子,他们遇到了这个问题:

    我在尝试使用 2.0.2 版本时遇到了问题,但在我使用 2.0.2 时发现 恢复到 1.4.01 版,一切都恢复正常了。

    如果您使用的是 Maven:

    <dependency> 
        <groupId>xml-apis</groupId>
        <artifactId>xml-apis</artifactId>
        <version>1.4.01</version> 
    </dependency>
    

    如果您根本没有必要的库,您也可以下载它:

    http://www.jarfinder.com/index.php/java/info/org.w3c.dom.ElementTraversal

    参考1:Eclipse java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal

    参考2:http://www.coderanch.com/t/534171/XML/org-dom-ElementTraversal

    【讨论】:

      【解决方案3】:

      首先你需要确定你是在处理一个缺失的类,还是某个类的缺失类:

      http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html

      你有一个java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal,所以你正在处理一个缺失的类(一个更简单的场景)。您需要查看 JAR 通常包含什么 org.w3c.dom.ElementTraversal。我喜欢使用http://search.maven.org/,即使您不使用 Maven,只是因为它是常用 Java 库的综合索引。要搜索课程,请使用fc:org.w3c.dom.ElementTraversal

      http://search.maven.org/#search%7Cga%7C1%7Cfc%3Aorg.w3c.dom.ElementTraversal

      您会发现 1.401 版本的 xml-apis 等等。例如,搜索结果中的任何常见 JAR 似乎都不在您的 CLASSPATH 中,除非它们位于 $DCI_HOME/../lib/ext/sl53 内部的某个位置。您可以通过在#runJava 之后输入一行来验证这一点,例如echo $CLASSPATH,然后查找上面搜索结果中列出的任何 JAR。

      如果它们不存在,您需要将 JAR 放在盒子上的某个位置并编辑 setEnv.sh 以包含它(除非您可以将它放在 $DCI_HOME/../lib/ext/sl53 中,它会自动被拾取)。

      【讨论】:

        【解决方案4】:
        java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
        

        大概你的类路径错过了一些库org/w3c/dom/ElementTraversal

        【讨论】:

        • 谢谢大卫。我不知道如何搜索这个类。大概是我刚刚附加的setEnv.sh文件上要加类路径吧?
        猜你喜欢
        • 2017-01-03
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        • 2015-07-12
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        相关资源
        最近更新 更多