3

OracleWeblogic10.3.6でのDozer5.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)

また、JAXPのoracle実装をXercesに置き換えようとしました。Xercesライブラリを構成<prefer-web-inf-classes>true</prefer-web-inf-classes>し、デプロイされているライブラリに追加することで、これを実行しました。WEB-INF/weblogic.xmlしかし、ライブラリを置き換えようとすると、アプリケーションのデプロイ中に次の例外が発生します。Xerces 2.11.0(JAXP 1.4)とXerces 2.9.1(JAXP 1.3、Weblogic 10.3.6の適切な代替品)を試しました。(xercesImpl.jarxml-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で次のctorがあります。

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

したがって、両方のバージョンで例外が発生する理由がわかりません。

また、構成によってフィルタークラスローダーによってロードされるようにxercesを構成しようとしましたが、実装が混同されたため<prefer-application-packages> <package-name>org.apache.xerces.*<package-name>、結果としてsになります。ClassCastException

誰かがWebLogic10.3.6でDozerを実行するのを手伝ってくれることを願っています。

よろしく、

マックス

4

2 に答える 2

0

この問題は、クラスのロード順序を変更することで解決できます。次のコンテンツを含むファイル 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>                      
于 2014-01-09T03:39:33.217 に答える
0

私も同じような状況になりました。

これ以上の方法は見つかりませんでしたが、jar ファイル META-INF のファイル javax.xml.parsers.DocumentBuilderFactory を削除すると機能します。しかし、別の問題を引き起こす可能性があります。

于 2012-08-03T09:13:40.000 に答える