0

昨日からの私の問題は、ソートされたと言うことです。解決していませんが。

私が持っていた NPE は、TRACE ロギング (org.jboss.util.xml.JBossEntityResolver) に切り替えるまで隠されていた FileNotFoundException によってトリガーされました...


1.) JBoss にデプロイされたコードから Web サービスに接続しようとしています2.) JBossWsは、次のよう
に wsdl をtmpフォルダーに保存します。

file:/home/xxx/dev/XXXX/jboss-4.2.3.GA/server/yyy/tmp/jbossws/JBossWS_www.company.xx_99_server_soap.php?wsdl=get8489235369016302536.xsd

3.) そして、WSDL を読み戻そうとすると、次のようになります。

TRACE [org.jboss.util.xml.JBossEntityResolver] Failed to obtain URL.InputStream from systemId: file:/home/xxx/dev/xxx-PAN/jboss-4.2.3.GA/server/xxxxxxx/tmp/jbossws/JBossWS_www.comany.xx_99_server_soap.php?wsdl=get8489235369016302536.xsd
java.io.FileNotFoundException: /home/xxx/dev/xxx-PAN/jboss-4.2.3.GA/server/xxxxxxx/tmp/jbossws/JBossWS_www.comany.xx_99_server_soap.php

明らかに切り捨てられ、読み返すことができません。

ディスクへの書き込み方法または読み取り方法のパターンを何らかの形で構成できると思いますが、解決策を見つけました (前述の JBoss クラスのコードからではありません)。どんなアイデアでも大歓迎です。

編集:

Linux サーバー上に、次のコードを含む同じファイルを指す簡単なテスト アプリケーションを作成しました。

URL url = new URL("file:/home/abos/xxx/xxxx/jboss-4.2.3.GA/server/xxxxxxx/tmp/jbossws/JBossWS_www.company.xx_99_server_soap.php?wsdl=get8489235369016302536.xsd");
    url.openStream();

Exception in thread "main" java.io.FileNotFoundException: /home/xxx/dev/xxxx/jboss-4.2.3.GA/server/anchorage/tmp/jbossws/JBossWS_www.bdmglobal.xx_99_server_soap.php (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:120)
    at java.io.FileInputStream.<init>(FileInputStream.java:79)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
    at java.net.URL.openStream(URL.java:1010)
    at Main.main(Main.java:11)

だからここに私の結論があります:
1.) 実際には、名前を切り捨てるのは URL クラスです
2.) しかし、それが適切に保存されていれば、問題にはなりません。

だから私はまだそれを設定する方法を探しています。

4

1 に答える 1

1

jboss.server.temp.dir プロパティを /tmp などに設定して、テスト ケースを再度実行してみましたか? ハードコーディングされた長さがある可能性があり、パスを短くしようとすると問題が解決する場合があります...別のトリックは、.sar Jboss サービスをセットアップして、wsdl を要求し、JNDI を介してそれらを公開して、クライアントの観点からパス f に関するすべての問題を回避することです。 ? ストリームを処理して JNDI ツリーに配置するだけで済みます。パスは必要ありません。

JBossがファイルを保存するときに問題が発生する場合、保存しないと問題が解決しませんか? そのため、wsdl をストリーム (または、必要に応じて Reader または InputStream を使用してテキスト) として取得し、JNDI ツリーに直接配置することをお勧めします.... HTH Jerome

于 2012-02-07T10:53:14.487 に答える