2011-06-08 19 views
16

another thread'da açıklandığı gibi bir sınıf yolu protokolü için özel bir URL işleyicisi kaydettirmeyi denedim. İşte kod:Java - Özel URL protokolü işleyicileri kaydediliyor

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"); 
    } 
} 

test durumu aşağıdaki JVM bağımsız değişkeni vardır: mülkiyet ayarlanırken bu yüzden System.out.println çizgi düzgün, com.mycompany.protocol çıkışı

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

. Ancak, yukarıdaki çağrının bir java.net.MalformedURLException: unknown protocol: classpath istisnasını atacağı için, yürürlüğe girmemiş gibi görünüyor.

İşleyiciye yorumlanan satırdaki gibi açıkça izin verirseniz, her şey yolundadır. Ancak, bunu açıkça vermektense - otomatik olarak yapılmalıdır.

Neyi yanlış yapıyorum?

+0

İşleyiciyi URL yapıcısına iletirseniz işe yarar mı? (Bu sadece bir hata ayıklama teklifi, nihai çözüm değil). –

+0

Evet, ilk ifadeyi açıklarsam ve bunu kullanırsam çalışır. – Dario

+0

Ah, pardon, tam olarak şu soruyu okumadı :-(. –

cevap

12

Sorunu buldum. Kullandığım original classpath handler class, varsayılan olmayan bir kurucuya sahipti. Tabii ki, sadece varsayılan olmayan bir kurucu olduğundan, işleyici başlatılamadı. Bu sorunu ayıklamayı deneyen herkesten özür dilerim, bu bağlantıyı göremedim.

+2

özür dilerim, onlar da bu tür bir sorunun nasıl çözüleceğini bilirler. –

0

Muhtemelen bu tür sorunlarda hata ayıklamanın en kolay yolu kayıtlı protokol işleyicilerini sıralamaktır.

+2

Bu teorik olarak soruyu cevaplayabilirken, [tercih edilir] (http://meta.stackexchange.com/q/8259) cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak – oers

+2

Link artık geçerli değil (11/03/2014 itibariyle) –