- PR -

LinuxでのJarファイル内のファイルの読み込み

1
投稿者投稿内容
250tr
会議室デビュー日: 2007/03/25
投稿数: 1
投稿日時: 2007-03-25 14:46
LinuxでJarファイル内のファイルを読み込もうとすると、うまく読み込むことができません。
同様のソースでWindowsでは動作することを確認しています。

jar内のリファイルはXML Schemaの定義ファイルで、jarを解凍した状態で実行するとlinuxでも正常に動作します。
-------------------------------------------
/home/
   container.jar
   config.xml
   a.jar
    |
    --XMLValidate.class
    --xmlschema.xsd
-------------------------------------------
1.container.jarからURLClassLoaderでa.jarのXMLValidate.classを読み込みを実行。
2.XMLValidateでconfig.xmlの妥当性検査をxmlschema.xsdを使用して実施。
すると、xmlschema.xsdが見つからないようでparseの部分で妥当性検査に引っかかってしまいます。

ソースは以下です。  
XMLValidate

  DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
  dbfactory.setNamespaceAware(true);
  dbfactory.setValidating(true);
  dbfactory.setAttribute(
   "http://java.sun.com/xml/jaxp/properties/schemaLanguage",
   "http://www.w3.org/2001/XMLSchema");
  URL url = this.getClass().getResource("/xmlschema.xsd");
  dbfactory.setAttribute(
   "http://java.sun.com/xml/jaxp/properties/schemaSource",url);
  
  DocumentBuilder dbuilder = dbfactory.newDocumentBuilder();
  dbuilder.parse("/home/config.xml");

urlには「jar:file://home/a.jar!/xmlschema.xsd」というアドレスが入っています。
またgetResourceの部分をgetResourceAsStreamに変え、setAttributeでInputStreamを渡すようにしても駄目でした。

解決方法にお心当たりのある方いらっしゃいましたらお願い致します。
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2007-03-26 17:06
はずしてるかもしれませんが、
Windows側とLinux側で使われているjaxpのライブラリが違うのではないですか?
# 自分はそれではまったことがあるので

System.out.println(dbfactory.getClass().getName());

のようにして実装の型が同じかどうか確かめてみるとよいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)