我是一位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的问题。请知道的人告诉我一下。
以上引用一网友文字描叙,但我也遇到相同问题求解答。

解决方案 »

  1.   

    lz怎么解决的,分享下,thanks
      

  2.   

    操作单个xml建议别往下看。如果xml里存在命名空间不会出现该问题,但往往xml文件不带命名空间,xmlbeans生成java文件操作xml文件,就会存在了该问题。
        对于不带命名空间的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)以上为个人实际操作总结的方法,语言表达不好,也忘加注释,将就看吧,俺菜鸟,欢迎讨论该问题。