Appengine批量下载程序不下载列表属性

时间:2010-12-01 18:46:56

标签: java google-app-engine google-cloud-datastore

这与a previous question of mine有关,但有新信息。

我正在尝试配置bulkdownloader以从我的Java appengine应用程序下载数据,使得拥有对象列表转换为每个父对象内的嵌套XML路径。我一直在使用导出转换transform.child_node_from_list。但是,list属性实际上从未被下载并传递给该转换!

这看起来类似于在appengine数据存储区查看器中查看实体时所获得的效果 - 父实体根本不显示list属性。您必须通过代码访问它。

我的问题是:如何使用批量下载程序访问此列表属性?如果我使用--kind=ParentEntity下载,您认为这会阻止它下载任何ChildEntity的内容吗? (有没有办法指定“所有种类”或其他什么?)

在python下载配置中,模型实际上直接引用到配置文件中。我是否需要模拟一个模仿我的JDO模型并使用该引用的python模型?

作为参考,我的每个文件的缩写版本如下:

downloadconfig.yaml:

transformers:

- kind: ParentEntity
  connector: simplexml
  connector_options:
    xpath_to_nodes: /Parents/Parent
    style: element_centric
  property_map:
    - property: __key__
      external_name: key
      export_transform: transform.key_id_or_name_as_string

    - property: name
      external_name: name
      # Type: String Stats: 30 properties of this type in this kind.

    - property: children
      external_name: Children
      import_transform: 
        transform.list_from_child_node('Children/Child')
      export_transform:
        transform.empty_if_none(transform.child_node_from_list('Child'))

ParentEntity.java:

package experiment.dataexport;

import java.util.List;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import com.google.appengine.api.datastore.Key;

@PersistenceCapable
public class ParentEntity
{
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    public Key key;

    @Persistent
    public String name;

    @Persistent(defaultFetchGroup = "true")
    public List<ChildEntity> children;
}

示例XML输出:

<Parents>
 <Parent>
  <name>Parent 5613</name>
  <key>72001</key>
  <Children></Children>
 </Parent>
 <Parent>
  <name>Parent 1237</name>
  <key>73001</key>
  <Children></Children>
 </Parent>
</Parents>

(每个<Child>节点中应该有多个<Children>元素,但下载程序正在检索None而不是正确的子列表。

0 个答案:

没有答案