title: java.net.MalformedURLException: no protocol: XML
body: <p>I am trying to output an XML String into a .xml file for debugging purpose. My String looks like this:</p>
  
  <pre><code>System.out.println("xmlString = \n" + xmlString);
  ===========================================================
  INFO: xmlString = 
  &lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;response&gt;
  &lt;lst name="responseHeader"&gt;
    &lt;int name="status"&gt;0&lt;/int&gt;
    &lt;int name="QTime"&gt;2&lt;/int&gt;
    &lt;lst name="params"&gt;
      &lt;str name="indent"&gt;true&lt;/str&gt;
      &lt;str name="q"&gt;source_t:ST&lt;/str&gt;
      &lt;str name="wt"&gt;xml&lt;/str&gt;
    &lt;/lst&gt;
  &lt;/lst&gt;
  ...
  </code></pre>
  
  <p>Now, the following code is to output the String into XML file.</p>
  
  <pre><code>try {
                  System.out.println("Writing xmlString to xml file");
  
                  File file = new File("xmlString.xml");
  
                  // if file doesnt exists, then create it
                  if (!file.exists()) {
                          file.createNewFile();
                  }
  
                  FileWriter fw = new FileWriter(file.getAbsoluteFile());
                  BufferedWriter bw = new BufferedWriter(fw);
                  bw.write(xmlString);
                  bw.close();
  
                  System.out.println("Done writing file");
  
          } catch (IOException e) {
                  e.printStackTrace();
          }
  </code></pre>
  
  <p>But this is the error I got from output log:</p>
  
  <pre><code>INFO: Writing xmlString to xml file
  INFO: Done writing file
  SEVERE: java.net.MalformedURLException: no protocol: &lt;?xml version="1.0" encoding="UTF-8"?&gt;
  </code></pre>
  
  <p>No file is created. 
  Can someone tell me what does this mean? And how to solve this?
  Thanks in advance</p>
  
  <p>======================================================================================
  Edit (I initially though that the error lies at the FileWritter, which is why I didn't post the whole code): I have edited my post to display my whole code. This code is actually called by a JSP file. Which passes the xmlString</p>
  
  <pre><code>public class SAXParserClass {
  
      //Declare as public since it needs to be redefined for appending into ArrayList
      public static String row[] = new String[5];         //id, full_message_t, source_t, news_t, link_t  
  
      public ArrayList&lt;String[]&gt; XMLReader(String xmlString)
      {
          //Output: GlassFish Server. Test if String is passed in correctly
          System.out.println("xmlString = \n" + xmlString);
          try {
                  System.out.println("Writing xmlString to xml file");
  
                  File file = new File("xmlString.xml");
  
                  // if file doesnt exists, then create it
                  if (!file.exists()) {
                          file.createNewFile();
                  }
  
                  FileWriter fw = new FileWriter(file.getAbsoluteFile());
                  BufferedWriter bw = new BufferedWriter(fw);
                  bw.write(xmlString);
                  bw.close();
  
                  System.out.println("Done writing file");
  
          } catch (IOException e) {
                  e.printStackTrace();
          }
  
            //Declaration
            final ArrayList&lt;String[]&gt; tableResult = new ArrayList&lt;String[]&gt;();    //Store ArrayList of row[]
  
            try {
  
                SAXParserFactory factory = SAXParserFactory.newInstance();
                SAXParser saxParser = factory.newSAXParser();
  
                DefaultHandler handler = new DefaultHandler() 
                {
                    //When these are TRUE, extract the content
                      boolean b_id = false;
                      boolean b_full_message_t = false;
                      boolean b_source_t = false;
                      boolean b_news_t = false;
                      boolean b_link_t = false;                
  
                      //############################################################################################
                      //Look for &lt;start&gt; tags
                      public void startElement(String uri, String localName,String qName, 
                              Attributes attributes) throws SAXException {
  
                              System.out.println("Start Element :" + qName);
  
                              //Only interested in &lt;str&gt;
                              if (qName.equalsIgnoreCase("str")) {
                                  String name = attributes.getValue("name");
  
                                      //Check for name="id"
                                  if(name.equalsIgnoreCase("id")){
                                      b_id = true;
                                  }                                
                                      //Check for name="full_message_t"
                                  else if(name.equalsIgnoreCase("full_message_t")){
                                      b_full_message_t = true;
                                  }
                                  else if(name.equalsIgnoreCase("source_t")){
                                      b_source_t = true;
                                  }
                                  else if(name.equalsIgnoreCase("news_t")){
                                      b_news_t= true;
                                  }
                                  else if(name.equalsIgnoreCase("link_t")){
                                      b_link_t = true;
                                  }                             
                              }//end if
  
                      }//end startElement
  
                      //############################################################################################
                      //Look for &lt;end&gt; tags
                      public void endElement(String uri, String localName,
                              String qName) throws SAXException {
  
                              System.out.println("End Element :" + qName);
  
                              //When reach &lt;/doc&gt;, row Array is complete. Add into ArrayList
                              if (qName.equalsIgnoreCase("doc")) {
                                      System.out.println("Push row into Arraylist : " + row[0]);
                                      tableResult.add(row);
                                      row = new String[5];    //reinitialize String[]
                              }
                      }//end endElement
  
                      //############################################################################################
                      //Get the content
                      public void characters(char ch[], int start, int length) throws SAXException {
  
                              if (b_id) {
                                      //System.out.println("id : " + new String(ch, start, length));
                                      row[0] = new String(ch, start, length);
                                      System.out.println("The id is " + row[0]);
                                      b_id = false;
                              }
                              else if (b_full_message_t) {
                                      //System.out.println("fullmsg : " + new String(ch, start, length));
                                      row[1] = new String(ch, start, length);
                                      System.out.println("The fullmsg is " + row[1]);
                                      b_full_message_t = false;
                              }
                              else if (b_source_t) {
                                      //System.out.println("fullmsg : " + new String(ch, start, length));
                                      row[2] = new String(ch, start, length);
                                      System.out.println("The source is " + row[2]);
                                      b_source_t = false;
                              }
                              else if (b_news_t) {
                                      //System.out.println("fullmsg : " + new String(ch, start, length));
                                      row[3] = new String(ch, start, length);
                                      System.out.println("The news is " + row[3]);
                                      b_news_t = false;
                              }
                              else if (b_link_t) {
                                      //System.out.println("fullmsg : " + new String(ch, start, length));
                                      row[4] = new String(ch, start, length);
                                      System.out.println("The link is " + row[4]);
                                      b_link_t = false;
                              }
  
                      }//end characters
  
             };//end DefaultHandler
  
                //############################################################################################
                //Read the String  
                //saxParser.parse("solrTest.xml", handler);
                //File file = new File("solrTest.xml");
                //InputStream inputStream= new FileInputStream(file);
  //            Reader reader = new InputStreamReader(xmlString,"UTF-8");
  // 
  //            InputSource is = new InputSource(reader);
  //            is.setEncoding("UTF-8");
  
                saxParser.parse(xmlString, handler);
  
             } catch (Exception e) {
               e.printStackTrace();
             }
  
            //Test output Arraylist
            System.out.println("Test Result!!!");
  
            for(String[] columns : tableResult){
                for(int i=0; i&lt;columns.length; i++){
                    System.out.println("Number = " + columns[i]);
                }
            }
  
            //Return the ArrayList of String[]          
            return tableResult;
        }//end XMLReader
  
  }//end class
  </code></pre>