使用XmlBeans生成的类时出错

时间:2011-12-15 10:07:31

标签: java maven xmlbeans

我已经从xsd文件生成了带有XMLBeans的类,并将它们打包在一个jar文件中。然后我在eclipse中将jar添加到项目类路径中,所有内容都编译并运行正常。 我使用Maven从我的项目中构建了一个独立的jar文件,并且构建成功,但是当我尝试运行它时,我得到了这个错误:

 Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.oblicore.oblisync.resolutions.TestsDocument$Factory.parse(TestsDo
cument.java:126)
    at com.oblicore.oblisync.handlers.TransferEntitiesHandler.getResolution(
TransferEntitiesHandler.java:117)
    at com.oblicore.oblisync.handlers.TransferEntitiesHandler.resolveConflic
ts(TransferEntitiesHandler.java:103)
    at com.oblicore.oblisync.main.Orchestrator.run(Orchestrator.java:107)
    at com.oblicore.oblisync.main.Orchestrator.main(Orchestrator.java:58)
Caused by: java.lang.RuntimeException: Cannot load SchemaTypeSystem. Unable to l
oad class with name schemaorg_apache_xmlbeans.system.s8B21CFFFCFED0B2438C2585C61
F113F7.TypeSystemHolder. Make sure the generated binary files are on the classpa
th.
    at org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(XmlBeans.java:7
83)
    at com.oblicore.oblisync.resolutions.TestsDocument.<clinit>(TestsDocumen
t.java:19)
    ... 5 more
Caused by: java.lang.ClassNotFoundException: schemaorg_apache_xmlbeans.system.s8
B21CFFFCFED0B2438C2585C61F113F7.TypeSystemHolder
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(XmlBeans.java:7
69)
    ... 6 more

缺少的类在我使用XmlBeans创建的jar中,我如何告诉maven将它添加到它从我的项目创建的jar中?

5 个答案:

答案 0 :(得分:7)

在执行WSDL2Java时,将创建名为resources的目录。将在资源下显示的schemaorg_apache_xmlbeans复制到项目的类路径中。这应该是修复。

答案 1 :(得分:4)

在生成的jar文件中,确保已包含从xmlbeans生成的类文件。

来自stacktrace:

Caused by: java.lang.ClassNotFoundException: schemaorg_apache_xmlbeans.system.s8
B21CFFFCFED0B2438C2585C61F113F7.TypeSystemHolder

它表明在编译期间所需的类文件位于类路径中,但在您构建的jar中,这些文件丢失了。

检查你的jar文件,看看这些类是否存在。

编辑:根据问题改写

要在Maven中使用jar-with-dependencies选项构建具有dependecies的jar,example

两个非常好的参考:

  1. http://www.sonatype.com/books/mvnref-book/reference/assemblies-sect-basics.html

  2. http://thomassundberg.wordpress.com/2011/03/05/create-an-executable-jar-from-maven/

  3. 在第二个中,如果你的jar不是可执行jar,你不需要主类

答案 2 :(得分:4)

当你遇到这种错误时 由WSDL2Java生成的TypeSystemHolder.class不会放在类路径中以避免此错误。

请从&#34; resource / schemaorg_apache_xmlbeans / system / s68C41DB812F52C975439BA10FE4FEE54&#34;复制TypeSystemHolder.class。文件夹中。

将TypeSystemHolder.class文件粘贴到你的classpath文件夹(build / classes / schemaorg_apache_xmlbeans / system / s68C41DB812F52C975439BA10FE4FEE54)文件夹

答案 3 :(得分:3)

请在pom.xml中添加以下标记。错误将会消失

        <!--
            this tells maven to copy the openejb-javaagent jar into your target/
            directory
        -->
        <!-- where surefire can see it -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>org.apache.openejb</groupId>
                                <artifactId>openejb-javaagent</artifactId>
                                <version>3.0-beta-2</version>
                                <outputDirectory>${project.build.directory}</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>target/generated-sources/axis2/wsdl2code/resources</directory>
        </resource>
        <resource>
            <directory>target/generated-sources/xmlbeans/resources</directory>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

答案 4 :(得分:0)

提取要包含schemaorg_apache_xmlbeans文件夹的jar。 在提取的文件夹中复制schemaorg_apache_xmlbeans文件夹(从jar提取结果)。 在解压缩的文件夹中打开命令提示符。

使用jar cf命令再次制作jar。例如jar cf test.jar *,  包括所有文件夹。

部署那个jar。