我是一位XMLBean的使用者,我在项目中需要对3个XML文件进行解析,我用3个文件的Schema文件生成了3个jar包(3个jar包中class没放在同一个包下).不过这3个XML文件的根元素都是 <Envelope> . 这时我写了3个类:A,B,C(我先导入的是含有sampleA包的jar,然后是含有sampleB包的,最后是含有sampleC包的) 我在A类中使用
EnvelopeDocument doc = EnvelopeDocument.Factory.parse(new FileInputStream( "C:\\a.xml "));
EnvelopeDocument所在的包我引用为sampleA.xmlbean.EnvelopeDocument 我在B类中使用
EnvelopeDocument doc = EnvelopeDocument.Factory.parse(new FileInputStream( "C:\\b.xml "));
EnvelopeDocument所在的包我引用为sampleB.xmlbean.EnvelopeDocument 我在B类中使用
EnvelopeDocument doc = EnvelopeDocument.Factory.parse(new FileInputStream( "C:\\c.xml "));
EnvelopeDocument所在的包我引用为sampleC.xmlbean1.EnvelopeDocument 在使用A类的时候没有问题,但是在使用B类,C类的时候出现了java.lang.ClassCastException
问题的源头是EnvelopeDocument$Factory.parse(Unknown Source.如果要是更换jar包的顺序,结果是先导入哪个jar包,哪个jar中所包含的类在使用的时候就没有问题。
例如:如果你先导入含有sampleB包的jar,结果就是B类没有问题,而A类和C类就有问题了。如果你先导入含有sampleC包的jar,那C类就没有问题,A类,B类就有问题。 我不知道是JDK的原因,还是XMLBean的问题。请知道的人告诉我一下。
以上引用一网友文字描叙,但我也遇到相同问题求解答。
EnvelopeDocument doc = EnvelopeDocument.Factory.parse(new FileInputStream( "C:\\a.xml "));
EnvelopeDocument所在的包我引用为sampleA.xmlbean.EnvelopeDocument 我在B类中使用
EnvelopeDocument doc = EnvelopeDocument.Factory.parse(new FileInputStream( "C:\\b.xml "));
EnvelopeDocument所在的包我引用为sampleB.xmlbean.EnvelopeDocument 我在B类中使用
EnvelopeDocument doc = EnvelopeDocument.Factory.parse(new FileInputStream( "C:\\c.xml "));
EnvelopeDocument所在的包我引用为sampleC.xmlbean1.EnvelopeDocument 在使用A类的时候没有问题,但是在使用B类,C类的时候出现了java.lang.ClassCastException
问题的源头是EnvelopeDocument$Factory.parse(Unknown Source.如果要是更换jar包的顺序,结果是先导入哪个jar包,哪个jar中所包含的类在使用的时候就没有问题。
例如:如果你先导入含有sampleB包的jar,结果就是B类没有问题,而A类和C类就有问题了。如果你先导入含有sampleC包的jar,那C类就没有问题,A类,B类就有问题。 我不知道是JDK的原因,还是XMLBean的问题。请知道的人告诉我一下。
以上引用一网友文字描叙,但我也遇到相同问题求解答。
对于不带命名空间的xml文件,我想到的办法是:在xsd文件设置好namespace,在操作读写的时候设置好namespace就行了。
例如:
读取不带namespace的xml文件时加上如下代码:
Map map=new HashMap();
XmlOptions xml=new XmlOptions();
map.put("", "http://www.ecds005.org");
xml.setLoadSubstituteNamespaces(map);
默认为xml添加namespace,就能正常读取数据。写xml文件时加入如下代码,就能生成不带namespace的xml文件。
Map<String,String> map = new HashMap<String,String>();
map.put("","http://www.ecds005.org");
XmlOptions options = new XmlOptions();
options.setUseDefaultNamespace();
options.setSaveImplicitNamespaces(map);
options.setSavePrettyPrint();
//DocumentDocument dd = DocumentDocument.Factory.newInstance(options);
//String aa=dd.xmlText(options);
//System.out.println(aa);
//dd.save(xmlFile,options);
生成的xml如果子节点带namespace,问题在于schema文件声明namespace。针对该问题解决办法如下:
namespace写法:
xmlns:ps="http://www.ecds005.org" targetNamespace="http://www.ecds005.org" elementFormDefault="qualified" (elementFormDefault默认为unqualified)以上为个人实际操作总结的方法,语言表达不好,也忘加注释,将就看吧,俺菜鸟,欢迎讨论该问题。