日期:2014-05-17  浏览次数:21056 次

在oracle soa里XMLParser类冲突
最近在做oracle bpm与我们自己公司工作流的一个集成,oracle bpm工程是部署在weblogic 里的oracle soa上的,
 当跑oracle bpm流程的时候,会回调我们的工作流,所以我们需要用到的jar都放在了$ORACLE_HOME$/Middleware/user_projects/domains/soa_domain/lib里
 因为回调我们的工作流的时候会解析一些xml配置文件,我们是用org.apache.commons.digester.Digester.parse(InputStream)(commons-digester-1.7.jar)去解析的,
 其中commons-digester-1.7.jar去解析的时候引用到了org.apache.xerces.parsers.XMLParser类(xercesImpl.jar)
 现在的情况是不管我们的jar包放在哪里(jdk的lib里,或者是oracle_home里的lib里,或者是加入到classpath里)
 在回调的时候是用调用到我们自己这边的代码,但在解析xml时却都调用到了oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:226)(xmlparserv2.jar包)去了
 异常信息:
 1 org.xml.sax.SAXParseException: <Line 19, Column 69>: XML-20190: (Fatal Error) Whitespace required.
 2 at oracle.xml.parser.v2.XMLError.flushErrorHandler(XMLError.java:422)
 3 at oracle.xml.parser.v2.XMLError.flushErrors1(XMLError.java:287)
 4 at oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:376)
 5 at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:226)
 6 at org.apache.commons.digester.Digester.parse(Digester.java:1666)
 7 at com.ai.appframe2.complex.xml.XMLHelper.createServices(XMLHelper.java:355)
 8 at com.ai.appframe2.complex.xml.XMLHelper.getServices(XMLHelper.java:107)
 9 at com.ai.appframe2.complex.service.impl.LocalServiceInvokeImpl.<clinit>(LocalServiceInvokeImpl.java:51)
 其中7、8、9行是我们自己的代码,6行是commons-digester-1.7.jar里的代码,2-5行却用到oracle的xmlparserv2.jar包里去了
 这个问题已经困扰我一周了,不知道哪位好心人有没有遇到这样的情况或者知道怎么去解决的,麻烦分享一下,非常感谢


------解决方案--------------------
这个和jar包没关系吧,调用哪个包里的类,取决于被调用类的全名。
这个由调用者决定的。