Yan*_*eve 11 java xml validation jdk1.6 xerces
我确信我不是第一个遇到这种冲突的人.
我继承的代码执行以下操作:
org.w3c.dom.Document dom; // declaration
javax.xml.validation.Schema schema; // declaration
...
...
...
javax.xml.validation.Validator validator = schema.newValidator();
validator.validate(new DOMSource(dom));
Run Code Online (Sandbox Code Playgroud)
其中...
代表看似不重要/无关代码
使用JDK 6编译和运行代码可以工作(并且始终有......)
最近,我不得不将我公司其他地方编写的另一个组件集成到我的代码中.该组件绝对需要包含在类路径中xercesImpl-2.8.1.jar
我绝对需要这个第三方组件,但现在运行上面的代码不再有效,我得到以下内容:
org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'Root'.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
at org.apache.xerces.jaxp.validation.DOMValidatorHelper.beginNode(Unknown Source)
at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
at javax.xml.validation.Validator.validate(Validator.java:127)
Run Code Online (Sandbox Code Playgroud)
作为一个解决方案,我想也许以某种方式在自己的类加载器中屏蔽xercesImpl-2.8.1.jar,但是没有设法这样做,可能是因为缺乏类加载器知识或者可能是因为它不是要走的路.关于我的环境的另一件事,我的应用程序运行在tomcat 5.5和6 ...
顺便说一下调试时我注意到我跑的时候 dom.getImplementation()
xercesImpl-2.8.1.jar
结果添加
到类路径时
org.apache.xerces.dom.DeferredDOMImplementationImpl@5f15c
com.sun.org.apache.xerces.internal.dom.DeferredDOMImplementationImpl@6c6ae3
[我觉得你这些小心的读者并不感到惊讶]
有什么建议?
小智 7
而不是使用:
// Uses first classloader-available implementation found:
//import javax.xml.validation.SchemaFactory;
SchemaFactory schemaFactory= SchemaFactory.newInstance(
XMLConstants.W3C_XML_SCHEMA_NS_URI);
Run Code Online (Sandbox Code Playgroud)
尝试使用(自Java 1.6起):
// Uses org.apache.xerces.jaxp.validation.XMLSchemaFactory subclass
//of SchemaFactory as implementation:
//import javax.xml.validation.SchemaFactory;
SchemaFactory schemaFactory= SchemaFactory.newInstance(
XMLConstants.W3C_XML_SCHEMA_NS_URI,
"org.apache.xerces.jaxp.validation.XMLSchemaFactory",
null);
Run Code Online (Sandbox Code Playgroud)
请参阅相关的JavaDoc.
或者使用META-INF /服务工程:带有示例的文章
希望它仍然有助于某人.
加布里埃尔
根据http://xml.apache.org/xalan-j/faq.html#faq-N100EF
要使用更新版本的Xalan-Java并覆盖与JDK一起打包的版本:
使用背书标准覆盖机制.将xalan.jar,serializer.jar,xercesImpl.jar和xml-apis.jar放在JRE的\ lib\endorsed目录中,运行时软件的安装位置在这里
归档时间: |
|
查看次数: |
19362 次 |
最近记录: |