【问题标题】:FlatXmlDataSetBuilder throw "java.net.MalformedURLException" when using a StringBuffer使用 StringBuffer 时,FlatXmlDataSetBuilder 抛出“java.net.MalformedURLException”
【发布时间】:2015-04-24 09:59:48
【问题描述】:

我正在尝试创建一个可以将 XML 数据库提取解析为 FlatXMLDataSet 的解析器。

我正在使用 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 本身?

【问题讨论】:

    标签: java xml dataset dbunit in-memory-database


    【解决方案1】:

    问题在于“D:\test.xml”不是一个有效的 URL,因为如异常消息所示,它没有指定协议。

    正确的字符串应该是“file:D:\test.xml”(其中“file:”是协议)。

    【讨论】:

    • 该文件有效,它是来自 StringBuffer 本身的 DataSet 无效
    【解决方案2】:

    经过数小时的测试,我终于找到了问题所在:我的 StringBuffer 没有指定任何协议或 InputSource,所以我的 FlatXmlDataSetBuilder 无法知道如何处理我的字符串。

    所以我改变了我的 InputSource 声明并且它起作用了:

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

    【讨论】:

      猜你喜欢
      • 2016-05-21
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多