W3C home > Mailing lists > Public > public-mobileok-checker@w3.org > December 2007

Preprocessor supported protocols

From: Guido García Bernardo <ggarciab@itdeusto.com>
Date: Mon, 03 Dec 2007 12:46:57 +0100
Message-ID: <4753ECB1.5050406@itdeusto.com>
To: public-mobileok-checker <public-mobileok-checker@w3.org>

Hello again :)

Links like :
<a href="mailto:myemail@host.com">
<a href="javascript:dosomething();">
<a href="skype:user?chat">
...

are followed because the method Preprocessor#hasSupportedProtocol
doesn't find the substring "://", so it thinks it is http.

For example, if you try it using
http://www2.paginasamarillas.es/sites/119/058/644/034/languages/ES/pda/home.html

you'll get this exception:
Exception in thread "main" java.lang.IllegalStateException: unsupported
protocol: 'javascript'
    at
org.apache.commons.httpclient.protocol.Protocol.lazyRegisterProtocol(Protocol.java:149)
    at
org.apache.commons.httpclient.protocol.Protocol.getProtocol(Protocol.java:117)
    at org.apache.commons.httpclient.HttpHost.<init>(HttpHost.java:107)
    at
org.apache.commons.httpclient.HttpMethodBase.setURI(HttpMethodBase.java:280)
    at
org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:220)
    at
org.apache.commons.httpclient.methods.GetMethod.<init>(GetMethod.java:89)
    at org.w3c.mwi.mobileok.basic.HTTPResource.<init>(HTTPResource.java:69)
    at org.w3c.mwi.mobileok.basic.HTTPResource.<init>(HTTPResource.java:60)
    at
org.w3c.mwi.mobileok.basic.HTTPTextResource.<init>(HTTPTextResource.java:37)
    at
org.w3c.mwi.mobileok.basic.Preprocessor.preprocess(Preprocessor.java:108)
    at
org.w3c.mwi.mobileok.basic.Tester.getPreprocessorResults(Tester.java:79)
    at org.w3c.mwi.mobileok.basic.Tester.main(Tester.java:134)

This is the current code:

private static boolean hasSupportedProtocol(URI uri) {
    final String uriString = uri.toString();
    // Either no protocol (assume http), or http or https specified;
ignore anything else
    return !uriString.contains("://") || uriString.startsWith("http://")
|| uriString.startsWith("https://");
}

I don't know what is the best way to solve it, maybe if we find ":"
without the two slashes, we should reject the URI.  Another "uglier" 
solution could be to catch the IllegalStateException
and continue.

Regards,
guido
Received on Monday, 3 December 2007 11:49:15 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 8 January 2008 14:13:04 GMT