2015-12-17 10 views
6

プロパティファイル(サードパーティ製の瓶)私は、次の方法にプロパティファイルのURIを渡す必要が

defaultConfiguration = Factory.createDefaultConfiguration(propertiesUrl.toURI()); 
PayClient client = Factory.createClient(defaultConfiguration); 

私は、サーバー上の私のコードを配備するサーバのパスからURLの場所を取得する方法、I propertiesUrl.toURI()をabc://localhost/server/test/payment/ConfigLookup.properties

として取得します。サードパーティアプリケーションはこの値を拒否し、接続クライアントを作成するための構成を作成しません。

プロパティファイルがローカルのbinフォルダにあるサンプルコードは、渡されたときに正常に動作します。

パスpropertiesUrl.toURI()

file:/D:/Code/bin/ConfigLookup.properties 

上記の成功接続を作成として受信しました。

私はそれらの間に何が欠けているかについて親切に案内します。ローカルコードと同様の方法でサーバーコードを動作させる方法

+0

"abc:"スキームとは何ですか? –

+0

実際には、コードをデプロイするサーバーです。配備後、それはprojectname(私はabcという名前)のように見えます:: //localhost/server/test/payment/ConfigLookup.properties – user2967948

+0

「この値を拒絶する」という意味は明確ではありません。何らかのエラーがありますか?メッセージが表示されたり、設定がロードされていません。第三者のjarファイルはログを記録しますか?あなたが探しているものについてより多くの手掛かりを提供するかもしれないログを得ることができますか? –

答えて

0

クラスローダー経由でリソースを取得してから、URIのファイルについてはhereを参照してください。

+0

私はリソースを取得しましたが、サードパーティのjarが有効なURIとして受け入れないabc://localhost/server/test/payment/ConfigLookup.propertiesのように見えます。 – user2967948

1

第三者JARは、ローカルディスクファイルシステムベースのURIを想定しているようです。これは実際に彼らの側で間違いです。 URIが実際に入っているコンテキストを心配することなくuri.toURL().openStream()経由でコンテンツを取得することは可能です。値の拒否は、第三者がnew FileInputStream(new File(uri))を使用していることを示しています。まず第一に、これは彼らが適切に修正できるように、彼らの側で報告されるべきです。

一方、最善の方法は、仮想ファイルシステムまたはWebベースのURIを提供する代わりに、ローカルディスクファイルシステムベースのURIに変換することです。コンテナー管理された一時フォルダーにFile#createTempFile()の助けを借りて一時ファイルを作成し、その内容を書き込み、最後に一時ファイルをURIとして提供することで、これを行うことができます。

以下の例では、サーブレットの内部にあると仮定して、getServletContext()が既に手元にあることを前提としています。それ以外の場合、使用しているJava EEベースのフレームワークには、ServletContextを与える/注入する機能が必要です。

String tempDir = (String) getServletContext().getAttribute(ServletContext.TEMPDIR); 
File tempFile = File.createTempFile("temp-", ".properties", new File(tempDir)); 
Files.copy(propertiesUrl.openStream(), tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING); 
// ... 
defaultConfiguration = Factory.createDefaultConfiguration(tempFile.toURI()); 

言った、あなたは、このプロパティファイルではなく/WEB-INFフォルダに配置してはならないことを絶対に確信していますか?今は、世界の誰でもウェブブラウザーを持つことができます。 a.oを参照してください。 Where to place and how to read configuration resource files in servlet based application?

関連する問題