2012-12-19 7 views
8

Ich habe eine Eigenschaftendatei, die eine Eigenschaft enthält, die die URL einer NOAA-Website angibt, die einen Temperaturdatensatz enthält. Die Eigenschaft enthält ein Token [DATE_REPLACE], da sich die URL täglich ändert, wenn NOAA eine neue Prognose generiert.Überwindung java.net.MalformedURLException: kein Protokoll Ausnahme

In meiner Properties-Datei, ich bin Angabe:

WEATHER_DATA_URL="http://weather.noaa.gov/pub/SL.us008001/DF.anf/DC.mos/DS.mex/RD.[DATE_REPLACE]/cy.00.txt" 

Ich habe eine Methode withing eine PropertyHelper Klasse (ein Wrapper für java.util.Properties) erklärt die URL String für den aktuellen Tag zu generieren WEATHER_DATA_URL mit wie der Name, "JJJJMMTT" als das Datumsformat, ein heutiges Datum.

public String getPropertyWithDateReplaceToken(String name, String dateFormat, Date dateToFormat) 
{ 
    String value = this.properties.getProperty(name); 

    if (StringHelper.isNullOrWhitespace(value) || !value.contains("[DATE_REPLACE]")) 
    { 
     throw new UnsupportedOperationException("The property value should specify the [DATE_REPLACE] token"); 
    } 

    StringBuilder sb = new StringBuilder(value); 
    int index = sb.indexOf("[DATE_REPLACE]"); 
    while (index != -1) 
    { 
     String replacement = StringHelper.getTodayAsDateString(dateFormat, dateToFormat); 
     sb.replace(index, index + "[DATE_REPLACE]".length(), replacement); 
     index += replacement.length(); 
     index = sb.indexOf(value, index); 
    } 

    return sb.toString(); 
} 

ich den Text von der Webseite dann mit dem folgenden Verfahren einen weiteren Hilfsklasse aufrufen zu lesen:

public static List<String> readLinesFromWebPage(String urlText) throws Exception 
{ 
    List<String> lines = new ArrayList<String>(); 
    if (StringHelper.isNullOrWhitespace(urlText)) 
    { 
     throw new NullPointerException("URL text cannot be null or empty"); 
    } 

    BufferedReader dataReader = null; 
    try 
    { 
     System.out.println("URL = " + urlText); 
     String trimmedUrlText = urlText.replaceAll("\\s", ""); 

     URL url = new URL(trimmedUrlText); 
     dataReader = new BufferedReader(new InputStreamReader(url.openStream())); 

     String inputLine; 
     while((inputLine = dataReader.readLine()) != null) 
     { 
      lines.add(inputLine); 
     } 

     return lines; 
    } 
    catch(Exception e) 
    { 
     logger.logThrow(Level.SEVERE, e, "Exception (" + e.getMessage() + ") attempting to " + 
       "read data from URL (" + urlText + ")"); 
     throw e; 
    } 
} 

Wie Sie sehen, ich Leerzeichen aus der generierten URL String zu trimmen versucht haben, in der Ich hoffe, dass dies das Problem verursacht hat. Die URL-Zeichenfolge richtig erzeugt, aber ich erhalte die folgende Ausnahme:

java.net.MalformedURLException: no protocol: "http://weather.noaa.gov/pub/SL.us008001/DF.anf/DC.mos/DS.mex/RD.20121219/cy.00.txt" 

Wenn ich die Zeichenfolge manuell einstellen, alles funktioniert ... was bin ich dabei?

Antwort

15

Ihre Eigenschaftendatei enthält doppelte Anführungszeichen um den Wert der URL. Entferne diese.

+1

Vielen Dank ** Erickson **. Entschuldigung für den Anfängerfehler. – msomarr

+7

Jeder braucht manchmal ein frisches Augenpaar. – erickson