从错误的jar加载类并获得类转换异常

时间:2014-01-22 05:44:08

标签: java web-services axis2 wsdl2java xmlbeans

我在项目中使用了几种不同的模式。它们每个都使用xmlbeans ant任务编译成一个单独的jar,每个jar使用一个单独的包。我似乎只能成功解析xml(使用。Factory.parse(String xml)方法)为类路径中的第一个架构jar,否则我会得到{bug}中描述的ClassCastException。如果我更改了jar顺序,那么另一个模式将能够成功解析,并且ClassCastException将被抛出用于其他类。

我做了一些调试,我得出的结论是schemaorg_apache_xmlbeans.namespace包的结构可能是负责任的。由于我的模式没有名称空间,因此我构建的每个jar共享一些在相同包中具有相同名称的文件。具体来说,我已经看到每个jar都有一个schemaorg_apache_xmlbeans.namespace._nons.xmlns.xsb文件,似乎指向该jar的实际模式。如果工厂使用此文件来确定它将用于解析它所拥有的xml的某些类,这可以解释ClassCastException,因为它只查看类路径上的第一个文件而不是正确的类文件。它有XML。 是否有任何选项可以在wsdls或xsds或ant任务“wsdl to java”编译中为生成的模式(如java命名空间)指定名称空间?

2 个答案:

答案 0 :(得分:1)

我认为问题在于XMLBeans使用某种内部架构缓存来混合它们。

您是否尝试过为您的架构(xsds)提供不同的命名空间?

答案 1 :(得分:0)

这可以通过使用parse方法的XMLOptions参数来解决。 例:     XmlOptions opts = new XmlOptions();         opts.setDocumentType(YourDocument.Factory.newInstance()的SchemaType());     YourDocument.parse(String xml,opts);

请参阅xmloptions.setDocumentType