0

我有一个将 CSV 转换为 XML 文件的 Google App Engine 应用程序。它适用于较小的 XML 输入,但拒绝为较大的输入 XML 完成文件。在一个长期运行(多天的持续时间)任务中,在最终确定之前多次读取 XML,并将生成的 csv 文件写入其中。我的问题不同于这个FileServiceFactory getBlobKey throws IllegalArgumentException,因为我的代码在使用小输入文件的生产和开发中都可以正常工作。所以这并不是说我在关闭/完成之前忽略了写入文件。但是,当我尝试从更大的 XML 文件中读取数据时。输入 XML 文件约为 150MB,而生成的 5 个 CSV 文件集每个都小得多(可能每个 10MB)。我保留了新 csv 文件的文件 url,甚至尝试用一些静态代码关闭它们,但我只是重现了相同的错误,即

java.lang.IllegalArgumentException: creation_handle: String properties must be 500 characters or less.  Instead, use com.google.appengine.api.datastore.Text, which can store strings of any length.
    at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:242)
    at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:207)
    at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:173)
    at com.google.appengine.api.datastore.Query$FilterPredicate.<init>(Query.java:900)
    at com.google.appengine.api.datastore.Query$FilterOperator.of(Query.java:75)
    at com.google.appengine.api.datastore.Query.addFilter(Query.java:351)
    at com.google.appengine.api.files.FileServiceImpl.getBlobKey(FileServiceImpl.java:329)

但我知道这不是字符串/文本数据类型的问题,因为我已经在使用类似长度的文件服务 url 来成功尝试使用较小的文件。对于我上面链接的其他 stackoverflow 帖子来说,这也不是问题。我还尝试在完成之前写最后一篇毫无意义的文章,以防万一它会像对另一篇文章一样有所帮助,但这没有任何区别。所以我真的没有办法调试这个......这是我的文件关闭代码不起作用。它与http://developers.google.com/appengine/docs/java/blobstore/overview#Writing_Files_to_the_Blobstore上的 Google 操作方法示例非常相似 。

log.info("closing out file 1");
try {
    //locked set to true
    FileWriteChannel fwc1 = fileService.openWriteChannel(csvFile1, true);
    fwc1.closeFinally();
} catch (IOException ioe) {ioe.printStackTrace();}

// You can't get the blob key until the file is finalized
BlobKey blobKeyCSV1 = fileService.getBlobKey(csvFile1);
log.info("csv blob storage key is:" + blobKeyCSV1.getKeyString());
csvUrls[i-1] = blobKeyCSV1.getKeyString();
break;

在这一点上,我只想完成我有 URL 但不能的新 blob 文件。我怎样才能解决这个问题,还有,可能是什么原因?同样,我的代码适用于小文件(〜60 kB),但〜150MB的输入文件失败)。感谢您就导致此问题的原因或如何解决此问题提供任何建议!另外,我的未定稿文件在被删除之前会保留多久?

4

1 回答 1

0

这个问题是 Java MapReduce 和 Files API 中的一个错误,最近由 Google 修复。在此处阅读公告:groups.google.com/forum/#!topic/google-appengine/NmjYYLuSizo

于 2013-06-10T04:04:14.930 回答