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.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で次の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を実行するのを手伝ってくれることを願っています。
よろしく、
マックス