2015-04-24 3 views
0

Я пытаюсь создать парсер, который может анализировать извлечение базы данных XML в FlatXMLDataSet.FlatXmlDataSetBuilder throw "java.net.MalformedURLException" при использовании StringBuffer

Я использую StringBuffer, чтобы написать свой FlatXML, а затем преобразовать его в FlatXmlDataSet, но он бросил мне «java.net.MalformedURLException: no protocol».

Итак, я попытался создать файл из моего StringBuffer и проанализировать его в FlatXMLDataSet. И это работает! Но мне действительно нужно использовать StringBuffer, потому что все должно использоваться в памяти.

Вот пример моего FlatXML:

<?xml version='1.0' encoding='UTF-8'?> 
<dataset> 
    <TABLENAME COL1="1" 
    COL2="35" 
    /> 
</dataset> 

А вот пример кода, который я использую:

// Write the buffer into a file. 
writeBuffer(buffer, "D:\\test.xml"); 
// Parse the file into a DataSet. 
IDataSet test = createDataSet("D:\\test.xml"); 

// Cast the StringBuffer into an InputSource and give it to 
// a FlatXMLDataSetBuider. 
InputSource xmlInputStream = new InputSource(buffer.toString()); 

FlatXmlDataSetBuilder flatXmlBuilder = new FlatXmlDataSetBuilder(); 
flatXmlBuilder.setColumnSensing(true); // We do not have a dtd to give. 
IDataSet dataSet = flatXmlBuilder.build(xmlInputStream); // Error is thrown here 

private static void writeBuffer(StringBuffer buffer, String path) 
{ 
    try 
    { 
     String content = buffer.toString(); 

     File file = new File(path); 

     // 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(content); 
     bw.close(); 
    } 
    catch (Exception e) 
    { 

    } 
} 

private static IDataSet createDataSet(String filePath) 
{ 
    IDataSet dataSet = null; 
    try 
    { 
     InputStream is = new FileInputStream(filePath); 
     InputSource xmlInputStream = new InputSource(is); 

     FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder(); 
     builder.setColumnSensing(true); 
     dataSet = builder.build(xmlInputStream); 
    } 
    catch (Exception e) 
    { 

    } 
    return dataSet; 
} 

Что я делаю неправильно? Я имею в виду, почему мой файл из моего StringBuffer работает, а не сам StringBuffer?

ответ

0

После нескольких часов тестирования я наконец нашел, что происходит: мой StringBuffer не указал ни один протокол, ни мой InputSource, поэтому мой FlatXmlDataSetBuilder не мог знать, что делать с моей строкой.

Так что я изменить свой InputSource decalaration, и она работала:

InputSource xmlInputStream = new InputSource(new ByteArrayInputStream(buffer.toString().getBytes("utf-8"))); 
0

Проблема заключается в том, что «D: \ test.xml» не является допустимым URL-адресом, потому что, как указывает сообщение об исключении, он не указывает протокол.

Правильной строкой будет «файл: D: \ test.xml» (где «файл:» - это протокол).

+0

В файле работы, это DataSet из самого StringBuffer, которые не работают – KDelli