opensamlライブラリを使用してSAML認証を行うプログラムを作成し、
Tomcat環境で動作確認後weblogicサーバーにデプロイした所NoClassDefFoundErrorが発生。
javaのバージョンは6。
opsensamlのバージョンは2.6.6。
ググってみたら同様の事象が下記に記載されていました。
上記に下記ライブラリを削除したらとりあえず動くと書いてあったのでこちらのサーバー上でも同じことを試してみたら確かにうまく動作しました。
・com.bea.core.bea.opensaml2_1.0.0.0_6-1-0-0
・com.bea.core.bea.opensaml_1.0.0.0_6-1-0-0
反対に上記のライブラリをTomcat環境に配置して動作させてみたところweblogic環境と同じエラーが発生。
上記結果からライブラリのロード順の問題の線で調査した所、下記にそれっぽいことが記載されてました。
http://otndnld.oracle.co.jp/document/products/wls/docs92/programming/classloading.html#wp1082452
どうやらweblogicはアプリで配置したライブラリのディレクトリ(~/WEB-INF/lib/)に優先して
ロードするライブラリのディレクトリがあり、今回はそちらに存在する上記opensamlにこちらで配置したアプリから呼んでいるopensamlのクラスが無いためエラーが発生した模様。
なのでこちらで配置したopensamlライブラリを優先できないか調べた所、weblogic.xmlに[prefer-application-packages]タグで優先したいパッケージ名を指定することで可能とのことだったので該当タグをweblogic.xml追記したところ問題解決しました(下記ドキュメントを参照しました)。
https://docs.oracle.com/cd/E72987_01/wls/WLPRG/classloading.htm
https://docs.oracle.com/cd/E28613_01/web.1211/b65890/weblogic_xml.htm
以下、追記した内容になります。
<prefer-web-inf-classes>false</prefer-web-inf-classes>
<prefer-application-packages>
<package-name>org.opensaml.*</package-name>
</prefer-application-packages>
prefer-application-packagesタグを使用する場合はprefer-web-inf-classesタグにfalseを指定することが必要の様です。ちなみにアプリで配置したライブラリ全てを優先してロードさせたい場合はprefer-web-inf-classesタグにtrueを指定するとよいみたい。
http://otndnld.oracle.co.jp/document/products/wls/docs92/webapp/weblogic_xml.html
xmlの全文は下記の通り。
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.3/weblogic-web-app.xsd">
<session-descriptor></session-descriptor>
<jsp-descriptor></jsp-descriptor>
<container-descriptor>
<prefer-web-inf-classes>false</prefer-web-inf-classes>
<prefer-application-packages>
<package-name>org.opensaml.*</package-name>
</prefer-application-packages>
</container-descriptor>
<context-root>/</context-root>
<wl-dispatch-policy>******</wl-dispatch-policy>
</weblogic-web-app>
もしかしたら同じ問題がまた出るかもしれないので残しとこーっと。