【问题标题】:ClassCastException in casting DTMManagerDefault into DTMManager during maven jaxb codegenClassCastException 在 maven jaxb codegen 期间将 DTMManagerDefault 转换为 DTMManager
【发布时间】:2011-04-19 10:41:59
【问题描述】:

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

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

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

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

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
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"

【问题讨论】:

    标签: java maven-2 classcastexception jaxb2


    【解决方案1】:

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

    更新

    我找到了这样的答案 - 请参阅 http://www.mail-archive.com/dev@qpid.apache.org/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
    

    【讨论】:

    • 您好,您能解释一下我该怎么做吗?我对 Debian+Jboss 有同样的问题,无法在 Linux 上修复它,但在 Windows/Mac 上运行良好。谢谢。
    • 运行 {mvn dependency:tree > dependencies.txt} 然后将排除添加到应排除的 jar 的依赖项中。
    【解决方案2】:

    排除 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>
    

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

    【讨论】:

      【解决方案3】:

      对我来说,设置以下 JVM 属性有效。

      -Dorg.apache.xml.dtm.DTMManager=org.apache.xml.dtm.ref.DTMManagerDefault
      

      【讨论】:

        猜你喜欢
        • 2014-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多