3

アプリケーションの一部として、Apache の xerces jaxp パーサーを使用しています。アプリケーションを weblogic 9.2 にデプロイすると、次のエラーが発生します。

org.springframework.beans.factory.BeanCreationException: クラスパス リソース [META-INF/cxf/cxf.xml] で定義された名前 'org.apache.cxf.wsdl.WSDLManager' の Bean の作成中にエラーが発生しました: Bean のインスタンス化に失敗しました。ネストされた例外は org.springframework.beans.BeanInstantiationException: Bean クラスをインスタンス化できませんでした [org.apache.cxf.wsdl11.WSDLManagerImpl]: コンストラクターが例外をスローしました。ネストされた例外は java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl です

分析によると、weblogic は、Apache の xerces の代わりにweblogic.jarDocumentBuilderFactoryImplに存在する独自のものをロードしようとしています。

DocumentBuilderFactoryImplxerces からweblogic を強制的にロードするために、次のことを試しました。

i) 次のタグをweblogic.xml

<prefer-web-inf-classes>true</prefer-web-inf-classes>

ii) xalan の最新バージョンを jre/lib/endorced フォルダーに配置しました。これで問題は解決しませんでした。

ii) weblogic-application.xml にエントリを追加しました。

<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
 <application-param>
  <param-name>webapp.encoding.default</param-name>
  <param-value>UTF-8</param-value>
 </application-param>
 <prefer-application-packages>
  <package-name>javax.jws.*</package-name>
  <package-name>org.apache.xerces.*</package-name>
  <package-name>org.apache.xerces.jaxp.*</package-name>
 </prefer-application-packages>
</weblogic-application>

ii) weblogic-application.xml に次のエントリを追加

<xml> 
  <parser-factory> 
    <saxparser-factory>org.apache.xerces.jaxp.SAXParserFactoryImpl</saxparser-factory> 
    <document-builder-factory>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</document-builder-factory> 
    <transformer-factory>org.apache.xalan.processor.TransformerFactoryImpl</transformer-factory>
  </parser-factory> 
</xml>

iii) xerces から jre/lib へのjaxp.propertiesロードを追加しDocumentBuilderFactoryImpl、サーバーを起動しました。この場合、weblogic は起動しませんでした。

iv) 次に、最初にサーバーを起動し、サーバーのjaxp.properties起動時に実行時にファイルをコピーしましたが、成功しませんでした

上記のどれもうまくいきませんでした。

どんな助けでも大歓迎です。

4

4 に答える 4

2

あなたはあまりにも多くのことをしたので、正確な状況はわかりません。私のアドバイスは、私が過去に WLS 9.2 で成功裏に使用した、WebLogicのアプリケーション サーバー固有の構成ガイドに厳密に従うことです。

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
    <application-param>
        <param-name>webapp.encoding.default</param-name>
        <param-value>UTF-8</param-value>
    </application-param>
    <prefer-application-packages>
        <package-name>javax.jws.*</package-name>
    </prefer-application-packages>
</weblogic-application>

prefer-application-packagesWeblogic ClassLoader フィルタリングをセットアップするには、パッケージをさらに追加する必要がありますが、現在の質問の状態では、正確な回答を提供することは不可能です。


weblogic-application.xml念のため、このスレッドの をやみくもに使用してみてください:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
    <xml>
      <parser-factory>
        <saxparser-factory>
          org.apache.xerces.jaxp.SAXParserFactoryImpl
        </saxparser-factory>
        <document-builder-factory>
          org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
        </document-builder-factory>
        <transformer-factory>
          org.apache.xalan.processor.TransformerFactoryImpl
        </transformer-factory>
      </parser-factory>
    </xml>
    <application-param>
        <param-name>webapp.encoding.default</param-name>
        <param-value>UTF-8</param-value>
    </application-param>
    <prefer-application-packages>
        <package-name>javax.jws.*</package-name>
        <package-name>org.apache.xerces.*</package-name>
        <package-name>org.apache.xalan.*</package-name>
    </prefer-application-packages>
</weblogic-application> 

しかし、これは暗闇でのショットです。

于 2010-03-19T00:03:22.240 に答える
1

DocumentBuilderFactory が見つからない問題を簡単な解決策で解決できました。

xercesImpl.jar を weblogic MyDomain\servers\MyServer\lib のドメイン固有の lib ディレクトリにコピーしてみてください。

于 2011-04-05T06:37:21.403 に答える
1

コマンド ライン オプションとして、指定されたドキュメント ビルダー ファクトリの使用を強制することができます。

-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

これは、クラスパスに必要な Xerces ビルダー ファクトリ クラスがあることを前提としています。

一般に、レガシー コードで必要とされない限り、別の xerces.jar を使用するべきではありません。Xerces パーサー クラスは JRE に付属しており、パッケージ名は org.apache ではなく com.sun.org.apache で始まります。あなたも試すことができます

-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

クラスパスから xerces.jar を完全に削除します (これは、WLS 10.3 と Java 1.6 で行ったことです)。

于 2010-03-22T08:32:18.723 に答える
0

私の場合、問題は、commons-digesterに依存し、別のバージョンのxercesを使用したことでした (競合が発生しました)。そのため、他のバージョンのxercesが推移的に含まれていた場合に備えて、依存関係を確認できます。

于 2011-07-13T08:11:51.840 に答える