我在项目中使用了几种不同的模式。它们每个都使用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命名空间)指定名称空间?
答案 0 :(得分:1)
我认为问题在于XMLBeans使用某种内部架构缓存来混合它们。
您是否尝试过为您的架构(xsds)提供不同的命名空间?
答案 1 :(得分:0)
这可以通过使用parse方法的XMLOptions参数来解决。 例: XmlOptions opts = new XmlOptions(); opts.setDocumentType(YourDocument.Factory.newInstance()的SchemaType()); YourDocument.parse(String xml,opts);