2011-06-08 152 views
16

我試圖爲類路徑協議註冊自定義URL處理程序,如another thread中所述。下面是代碼:Java - 註冊自定義URL協議處理程序

package com.mycompany; 

import org.junit.Test; 
import java.net.MalformedURLException; 
import java.net.URL; 
import com.mycompany.protocol.classpath.Handler; 

public class ParserTest { 
    @Test 
    public void testParsing() throws MalformedURLException {  
     System.out.println(System.getProperty("java.protocol.handler.pkgs")); 

     //URL url = new URL(null, "classpath://com.mycompany/hello-world.xml", new Handler(ClassLoader.getSystemClassLoader())); 
     URL url = new URL("classpath://com.mycompany/hello-world.xml"); 
    } 
} 

測試用例具有以下JVM參數:

-Djava.protocol.handler.pkgs=com.mycompany.protocol 

System.out.println線正常輸出com.mycompany.protocol,所以屬性被設置。不過,它看起來並沒有生效,因爲上面的調用會拋出異常。

如果我在註釋行中顯式提供處理程序,一切都很好。但是,我寧願不明確提供它 - 它應該自動完成。

我在做什麼錯?

+0

如果您將處理程序傳遞給URL的構造函數,它工作嗎? (這只是一個調試提議,而不是最終解決方案)。 – 2011-06-08 12:16:34

+0

是的,如果我註釋掉第一條語句並使用該語句,它就可以工作。 – Dario 2011-06-08 12:36:25

+0

啊,對不起,完全沒有讀到這個問題:-(。 – 2011-06-08 12:37:51

回答

12

我發現了這個問題。我使用的original classpath handler class有一個非默認的構造函數。當然,因爲它只有一個非默認的構造函數,所以處理程序不能被實例化。我向所有試圖調試此問題的人道歉,但我未能看到這一關聯。

+2

不要抱歉,他們也會知道如何解決這類問題。 – 2012-08-17 13:29:50

0

調試此類問題的最簡單方法可能是枚舉已註冊的協議處理程序。

+2

雖然這可能在理論上回答這個問題,[這將是更可取的]( http://meta.stackexchange.com/q/8259)包括答案的基本部分,並提供參考鏈接。 – oers 2012-10-26 10:50:05

+2

該鏈接似乎不再有效(截至2014年3月11日) – 2014-03-11 15:01:15

相關問題