java 在 maven jaxb 代码生成期间将 DTMManagerDefault 转换为 DTMManager 时出现 ClassCastException

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3832414/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 03:35:11  来源:igfitidea点击:

ClassCastException in casting DTMManagerDefault into DTMManager during maven jaxb codegen

javamaven-2classcastexceptionjaxb2

提问by Sankalp

I'm having a strange problem when trying to run a maven build that uses the jaxb2 plugin to do JAXB codegen (see stacktrace below). The best that I can figure is that there's some implementation of DTMManager that's being class loaded from a different JAR than the one in xalan-2.7.1; however, I have verified that the classpath that is used for running the jaxb:generate goal only has the one xalan-2.7.1.jar that contains a DTMManager or a DTMManagerDefault - so I have no clue what else might be getting in the way.

在尝试运行使用 jaxb2 插件执行 JAXB 代码生成的 Maven 构建时,我遇到了一个奇怪的问题(请参阅下面的堆栈跟踪)。我能想到的最好的情况是,有一些 DTMManager 实现是从不同于 xalan-2.7.1 中的 JAR 加载的类;但是,我已经验证用于运行 jaxb:generate 目标的类路径只有一个 xalan-2.7.1.jar 包含 DTMManager 或 DTMManagerDefault - 所以我不知道还有什么可能会妨碍.

One final data point: our build specifies a 'snapshot' profile, which really only serves to also JAR up the sources (using maven-source-plugin) and publish them as artifacts. The failure scenario I described above onlyoccurs when this profile is specified in addition to the default.

最后一个数据点:我们的构建指定了一个“快照”配置文件,它实际上仅用于 JAR 源(使用 maven-source-plugin)并将它们作为工件发布。我上面描述的失败场景在除了默认配置文件之外还指定了此配置文件时发生。

I'm using Maven 2.2.1 running on Sun's 64-bit JDK 1.6.0_21 on Linux x64 (Fedora 13) - see below the stacktrace for the 'mvn -v' info.

我正在使用在 Linux x64 (Fedora 13) 上的 Sun 64 位 JDK 1.6.0_21 上运行的 Maven 2.2.1 - 有关“mvn -v”信息,请参阅下面的堆栈跟踪。

Any ideas on what the problem may be and/or how to go about debugging it? This has been causing me grief for the past few days and it's now blocking progress :(

关于问题可能是什么和/或如何调试它的任何想法?过去几天这一直让我感到悲伤,现在它阻碍了进展:(

java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault cannot be cast to org.apache.xml.dtm.DTMManager
    at org.apache.xml.dtm.DTMManager.newInstance(DTMManager.java:137)
    at org.apache.xpath.XPathContext.<init>(XPathContext.java:102)
    at org.apache.xpath.jaxp.XPathImpl.eval(XPathImpl.java:207)
    at org.apache.xpath.jaxp.XPathImpl.evaluate(XPathImpl.java:281)
    at com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:224)
    at com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:289)
    at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:134)
    at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:96)
    at com.sun.tools.xjc.reader.internalizer.DOMForest.transform(DOMForest.java:448)
    at com.sun.tools.xjc.ModelLoader.buildDOMForest(ModelLoader.java:342)
    at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:374)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:167)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:113)
    at org.jvnet.jaxb2.maven2.XJC2Mojo.runXJC(XJC2Mojo.java:1119)
    at org.jvnet.jaxb2.maven2.XJC2Mojo.execute(XJC2Mojo.java:720)
...

mvn -v:

mvn -v:

# mvn -v
Apache Maven 2.2.1 (r801777; 2009-08-06 14:16:01-0500)
Java version: 1.6.0_21
Java home: /usr/java/jdk1.6.0_21/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.33.3-85.fc13.x86_64" arch: "amd64" Family: "unix"

回答by raisercostin

The solution is to search for all dependencies on Xalan and xercesImpl in the classpath . These dependencies should be excluded.

解决方案是在 classpath 中搜索所有对 Xalan 和 xercesImpl 的依赖。应该排除这些依赖项。

Updated

更新

I found an answer like this - see http://www.mail-archive.com/[email protected]/msg07295.html

我找到了这样的答案 - 见http://www.mail-archive.com/[email protected]/msg07295.html

Had a look at this closely and figured it was due to a classpath class
due to Sun bundling an older version of Xalan jar.
I have disabled this test until we come up with a decent solution.

Rajith

回答by Ondra ?i?ka

To exclude the xalanand xercesImpldependencies in Maven:

要排除Maven 中的xalanxercesImpl依赖项:

    <dependency> <!-- ClassNotFoundException: org.jaxen.dom.DOMXPath -->
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
        <version>1.1.3</version>
        <exclusions>
            <exclusion>
                <artifactId>maven-findbugs-plugin</artifactId>
                <groupId>maven-plugins</groupId>
            </exclusion>
            <exclusion>
                <artifactId>maven-cobertura-plugin</artifactId>
                <groupId>maven-plugins</groupId>
            </exclusion>
            <!-- ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault -> org.apache.xml.dtm.DTMManager -->
            <exclusion>
                <artifactId>xercesImpl</artifactId>
                <groupId>xerces</groupId>
            </exclusion>
            <exclusion>
                <artifactId>xalan</artifactId>
                <groupId>xalan</groupId>
            </exclusion>
        </exclusions>
    </dependency>

See also https://community.jboss.org/wiki/FreeMarkerAndJBossAS7.

另见https://community.jboss.org/wiki/FreeMarkerAndJBossAS7