【问题标题】:Dozer 5.3.2 on Oracle Weblogic 10.3.6Oracle Weblogic 10.3.6 上的推土机 5.3.2
【发布时间】:2012-07-10 07:41:32
【问题描述】:

我在 Oracle Weblogic 10.3.6 上运行 Dozer 5.3.2 时遇到问题。 如果我在容器中运行 Dozer,则会发生以下异常。 在我的 JUnit 测试中,Dozer 工作正常。

java.lang.IllegalArgumentException   
oracle.xml.jaxp.JXDocumentBuilderFactory.setAttribute(JXDocumentBuilderFactory.java:147) 
weblogic.xml.jaxp.RegistryDocumentBuilderFactory.setAttribute(RegistryDocumentBuilderFactory.java:176) 
org.dozer.loader.xml.XMLParserFactory.createDocumentBuilderFactory(XMLParserFactory.java:56) 
org.dozer.loader.xml.XMLParserFactory.createParser(XMLParserFactory.java:35) 
org.dozer.loader.xml.MappingFileReader.<init>(MappingFileReader.java:46) 
org.dozer.loader.CustomMappingsLoader.<init>(CustomMappingsLoader.java:52) 
org.dozer.DozerBeanMapper.loadCustomMappings(DozerBeanMapper.java:212) 
org.dozer.DozerBeanMapper.getMappingProcessor(DozerBeanMapper.java:186) 
org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:111) 
myProject.myObject.MyDefaultMapper.map(MyDefaultMapper.java:23) 
myProject.myObject.mapToClientDS(XYZService.java:162) 
myProject.myObject.read(XYZService.java:42) 
myProject.myObject.search(MyController.java:64) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
java.lang.reflect.Method.invoke(Method.java:597) 
com.sun.el.parser.AstValue.invoke(Unknown Source) 
com.sun.el.MethodExpressionImpl.invoke(Unknown Source) 
oracle.adf.controller.internal.util.ELInterfaceImpl.invokeMethod(ELInterfaceImpl.java:173) 
.... 
weblogic.work.ExecuteThread.run(ExecuteThread.java:178)

问题似乎是org.dozer.loader.xml.XMLParserFactory中的方法:

private DocumentBuilderFactory createDocumentBuilderFactory() { DocumentBuilderFactory     
factory = DocumentBuilderFactory.newInstance(); 
factory.setValidating(true); 
factory.setNamespaceAware(true); 
factory.setIgnoringElementContentWhitespace(true); 
factory.setAttribute(SCHEMA_FEATURE, true); // For Xerces implementation 
return factory; }

此方法设置factory.setAttribute(SCHEMA_FEATURE, true)。 Oracle 实现不支持属性SCHEMA_FEATURE 并引发IllegalArgumentException,包括以下堆栈跟踪:

oracle.xml.jaxp.JXDocumentBuilderFactory.setAttribute(JXDocumentBuilderFactory.java:147) 
weblogic.xml.jaxp.RegistryDocumentBuilderFactory.setAttribute(RegistryDocumentBuilderFactory.java:176)

我还尝试用 Xerces 替换 JAXP 的 oracle 实现。我通过在WEB-INF/weblogic.xml 中配置&lt;prefer-web-inf-classes&gt;true&lt;/prefer-web-inf-classes&gt; 并将Xerces 库添加到部署的库中来完成它。但是,如果我尝试替换我在部署应用程序时收到以下异常的库。我已经尝试过 Xerces 2.11.0 (JAXP 1.4) 和 Xerces 2.9.1 (JAXP 1.3,它应该是 Weblogic 10.3.6 的正确替代品)。 (xercesImpl.jar, xml-apis.jar)

Caused By: java.lang.NoSuchMethodError: 

org.apache.xerces.impl.xpath.regex.RegularExpression.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Locale;)V at 

org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl.applyFacets(Unknown Source) at 

org.apache.xerces.impl.dv.xs.XSSimpleTypeDecl.applyFacets1(Unknown Source) at 

org.apache.xerces.impl.dv.xs.BaseSchemaDVFactory.createBuiltInTypes(Unknown Source) at 

org.apache.xerces.impl.dv.xs.SchemaDVFactoryImpl.createBuiltInTypes(Unknown Source) at 

org.apache.xerces.impl.dv.xs.SchemaDVFactoryImpl.<clinit>(Unknown Source) Truncated. see log file for complete stacktrace

如果您查看 org.apache.xerces.impl.xpath.regex.RegularExpression 的源代码,您会发现 RegularExpression 在 2.11.0 版本中具有以下 ctor:

(String a) 
(String b, String d) 
(String c, String f, Locale l) 
(String d, Token t, int p, boolean h, int o)

RegularExpression 在 2.9.1 版本中具有以下 ctors:

(String a) 
(String b, String d) 
(String c, Token t, int p, boolean h, int o) 

所以我无法理解为什么两个版本都会出现异常。

我还尝试通过配置 &lt;prefer-application-packages&gt; &lt;package-name&gt;org.apache.xerces.*&lt;package-name&gt; 来配置要由过滤器类加载器加载的 xerces,但这会导致 ClassCastExceptions 因为实现混淆了。

我希望有人可以帮助我在 WebLogic 10.3.6 上运行 Dozer。

问候,

最大

【问题讨论】:

  • 有人遇到并解决了这个问题吗?

标签: java weblogic dozer


【解决方案1】:

我遇到了类似的情况。

除了删除文件 javax.xml.parsers.DocumentBuilderFactory 我还没有找到更好的方法 在你的 jar 文件中 META-INF 可以使它工作。 但可能会导致另一个问题。

【讨论】:

    【解决方案2】:

    改变类加载顺序可以解决问题。添加具有以下内容的文件 weblogic-application.xml:

    <prefer-application-packages>
      <package-name>org.dozer.*</package-name>
      <package-name>org.apache.*</package-name>
      <package-name>antlr.*</package-name>    
    </prefer-application-packages>                      
    

    【讨论】:

      猜你喜欢
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2016-02-22
      • 2014-07-10
      • 1970-01-01
      相关资源
      最近更新 更多