2012-04-03 77 views
2

我創建了一個使用JavaPOS與用戶本地系統上的付款終端進行通信的小程序。Java applet找不到JavaPOS配置文件

從Eclipse IDE中運行時,applet可以正常工作,但在瀏覽器中運行時無法正常工作。在瀏覽器中,applet似乎無法找到jpos/res/jpos.properties和jposxml.cfg文件。

當下面的語句是在小程序執行(在start()方法,而不是的init()):

JposEntryRegistry registry = JposServiceLoader.getManager().getEntryRegistry(); 
registry.load(); 

這是輸出我在Java控制檯窗口中看到:

jpos/res/jpos.properties file not found 
jpos/res/jpos.properties file not found 
jpos/res/jpos.properties file not found 

並沒有條目加載在JposEntry註冊表中。

我試過下面讓小程序「看到」的兩個文件:

  1. 初級專業人員/ RES/jpos.properties已經存在於由小應用程序所引用的罐子之一。不過,我已經將該文件添加到小程序的主jar中。我也嘗試將其添加到包含罐子的服務器上的目錄(使用正確的相對路徑)。這些都不起作用。

  2. 我可以解決無法jpos.properties的通過與適當的值設置系統屬性,像這樣的發現:

    System.setProperty("jpos.loader.serviceManagerClass", "jpos.loader.simple.SimpleServiceManager"); 
    System.setProperty("jpos.config.populatorFile", "jposxml.cfg"); 
    System.setProperty("jpos.util.tracing.TurnOnNamedTracers", "JposServiceLoader,SimpleEntryRegistry,SimpleRegPopulator,XercesRegPopulator"); 
    System.setProperty("jpos.util.tracing.TurnOnAllNamedTracers", "ON"); 
    

    然而,小應用程序仍然無法找到jposxml.cfg。該文件存在於applet的主jar文件的根目錄中。我試着把服務器放在與罐子相同的目錄中。我也嘗試創建一個單獨的jar文件,其中只包含jposxml.cfg,但這也不起作用。我得到的Java控制檯窗口中下面的輸出:

    [AbstractRegPopulator]getPopulatorFileIS(): populatorFileName=jposxml.cfg 
    [JposServiceLoader]manager.getEntryRegistry().load() OK 
    [AbstractRegPopulator]getPopulatorFileIS(): populatorFileName=jposxml.cfg 
    

    但JposEntries的列表是空的。結果,小應用程序無法與付款終端進行通信。

該applet通過JNLP文件(以及所有需要的jar通過JNLP擴展)加載。兩個JNLP文件的安全性設置爲< all-permissions/>。所有瓶子都使用相同的證書籤名。 Eclipse中相同的代碼完美工作。關於什麼問題的任何想法?

+0

我有同樣的問題。它與嘗試加載jpos.properties文件時嘗試加載sunrsasign.jar有關,但該jar僅包含在較早的JDK中。任何想法爲什麼它試圖加載這個文件? – 2013-07-04 19:22:35

回答

5

這是供任何人面對類似問題的參考。

我無法獲得JavaPOS代碼來查看jpos.properties文件,但如上所述將值加載到系統屬性中,所以我現在要堅持這一點。

要讓JavaPOS從URL加載jpos.xml或jposxml.cfg,您需要設置屬性jpos.config.populatorFileURL而不是jpos.config.populatorFile。這可以在jpos.properties中設置,或者作爲一個System屬性來設置。

0

面臨同樣的問題。

JposServiceLoader使用類路徑來查找路徑的根。

例如,如果應用程序本地類路徑是

C:/myapp/target/classes 

然後jpos.properties應該是由路徑

C:/myapp/target/classes/jpos/res/jpos.properties 

P.S.也許這不是一個放置jpos文件的最佳方式,但至少可以從解決此問題開始。