0

私は、Oracle WCCが Excel ファイルからメタデータの更新を読み込んで処理するためのカスタム コンポーネントを作成しています。

ただし、コンポーネントが (バージョン: 3.11) でファイルを読み込もうとすると、次の例外が発生します。

!csUserEventMessage,weblogic,localhost:16200!$!csUnableToExecMethod,runTheMassUpdate!syJavaExceptionWrapper,java.lang.NoClassDefFoundError: org/xml/sax/EntityResolver
intradoc.common.ServiceException: !csUnableToExecMethod,runTheMassUpdate
*ScriptStack LOWES_MMU_SERVICE
3:runTheMassUpdate,**no captured values**
        at intradoc.server.ServiceRequestImplementor.buildServiceException(ServiceRequestImplementor.java:2176)
        at intradoc.server.Service.buildServiceException(Service.java:2404)
        at intradoc.server.Service.createServiceExceptionEx(Service.java:2398)
        at intradoc.server.Service.createServiceException(Service.java:2393)
        at intradoc.server.Service.doCodeEx(Service.java:673)
        at intradoc.server.Service.doCode(Service.java:594)
        at intradoc.server.ServiceRequestImplementor.doAction(ServiceRequestImplementor.java:1693)
        at intradoc.server.Service.doAction(Service.java:566)
   /* Lines removed for brevity */
Caused by: java.lang.NoClassDefFoundError: org/xml/sax/EntityResolver
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at intradoc.loader.IdcClassLoader.defineClass(IdcClassLoader.java:639)
        at intradoc.loader.IdcClassLoader.findClass(IdcClassLoader.java:794)
        at intradoc.loader.IdcClassLoader.loadClass(IdcClassLoader.java:677)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at intradoc.loader.IdcClassLoader.defineClass(IdcClassLoader.java:639)
        at intradoc.loader.IdcClassLoader.findClass(IdcClassLoader.java:794)
        at intradoc.loader.IdcClassLoader.loadClass(IdcClassLoader.java:677)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at org.apache.poi.util.SAXHelper.<clinit>(SAXHelper.java:53)
        at org.apache.poi.util.DocumentHelper.newDocumentBuilder(DocumentHelper.java:45)
        at org.apache.poi.util.DocumentHelper.<clinit>(DocumentHelper.java:100)
        at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:376)
        at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.<init>(ContentTypeManager.java:102)
        at org.apache.poi.openxml4j.opc.internal.ZipContentTypeManager.<init>(ZipContentTypeManager.java:54)
        at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:192)
        at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:673)
        at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:226)
        at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:186)
        at com.lowes.content.edam.massMetaDataUpdate.file.impl.ExcelFileParser.readInputFile(ExcelFileParser.java:162)

hda ファイルのコンポーネント クラスパスにライブラリ ファイルを追加しました。

classpath=$COMPONENT_DIR/classes/:$COMPONENT_DIR/lib/poi-ooxml-3.11.jar:$COMPONENT_DIR/lib/stax-api-1.0.1.jar:$COMPONENT_DIR/lib/xmlbeans-2.3.0.jar:$COMPONENT_DIR/lib/httpcore-4.4.1.jar:$COMPONENT_DIR/lib/jna-4.1.0.jar:$COMPONENT_DIR/lib/guava-11.0.jar:$COMPONENT_DIR/lib/httpmime-4.4.1.jar:$COMPONENT_DIR/lib/javax.servlet-api-3.1.0.jar:$COMPONENT_DIR/lib/xml-apis-1.0.b2.jar:$COMPONENT_DIR/lib/poi-3.11.jar:$COMPONENT_DIR/lib/dom4j-1.6.1.jar:$COMPONENT_DIR/lib/owasp-java-html-sanitizer-1.1.jar:$COMPONENT_DIR/lib/ooxml-schemas-1.1.jar:$COMPONENT_DIR/lib/poi-ooxml-schemas-3.11.jar:$COMPONENT_DIR/lib/jsr173-1.0.jar:$COMPONENT_DIR/lib/jna-platform-4.1.0.jar:$COMPONENT_DIR/lib/httpclient-4.4.1.jar:$COMPONENT_DIR/lib/jsr305-2.0.1.jar
classpathorder=0
libpath=$COMPONENT_DIR/lib
libpathorder=0

注: 欠落しているクラスxml-apis-1.0.b2.jarは、Maven の依存関係であるによって提供され、コンポーネントのクラスパスに含まれ、lib フォルダーにコピーされる必要があります。

では、なぜ例外が発生するのですか? サーバーが見つからないのはなぜorg.xml.sax.EntityResolverですか?

さらなる質問 これを間違ったうさぎの穴に送っていないことを願っていますが、以前の同僚が IdcClassLoaderを使用しているときに fop で問題に遭遇しました。fopは独自のカスタム クラスローダーを使用するためです。にも同じ問題がありますか?


Manifest.hda (コンポーネントのリスト)

component
LowesMassMetadataUpdater/LowesMassMetadataUpdater.hda
componentExtra
LowesMassMetadataUpdater/readme.md
componentClasses
LowesMassMetadataUpdater/classes/
componentLib
LowesMassMetadataUpdater/lib/
4

5 に答える 5

1

システムで使用されている Jar ファイルを探します。依存関係の競合が発生している可能性があります。com.lowes.content.edam.massMetaDataUpdate.file.impl.ExcelFileParserクラスで次のチェックを使用できます。

System.out.println(EntityResolver.class.getProtectionDomain().getCodeSource().getLocation());

これにより、クラスの所有者の Jar ファイルが検索されます。SAX は、EntityResolver がまだ (または既に) 存在しない古い (または新しい?) ライブラリからロードされている可能性が最も高いです。

于 2016-07-27T13:09:34.317 に答える
0

http://search.maven.orgでクラスorg.xml.sax.EntityResolverを検索した ところ、欠落しているクラスが sax-2.0.1.jar にあることがわかりました

jar をダウンロードして、クラスパスに追加してください。 http://search.maven.org/#search|ga|1|fc%3A%22org.xml.sax.EntityResolver%22

質問もお読みください: Java で NoClassDefFoundError が発生するのはなぜですか?

于 2016-07-27T12:56:26.323 に答える