【发布时间】:2014-08-12 03:25:26
【问题描述】:
Google 声明 Google App Engine Datastore 支持以下类型。
Java Properties and value types
其中有com.google.appengine.api.users.User。
但是,当我尝试保留我的实体时,它会抛出以下异常。
[INFO] java.lang.NullPointerException
[INFO] at com.google.storage.onestore.v3.OnestoreEntity$PropertyValue$UserValue.setAuthDomain(OnestoreEntity.java:1145)
[INFO] at com.google.appengine.api.datastore.DataTypeTranslator$UserType.toV3Value(DataTypeTranslator.java:994)
[INFO] at com.google.appengine.api.datastore.DataTypeTranslator.addPropertyToPb(DataTypeTranslator.java:165)
[INFO] at com.google.appengine.api.datastore.DataTypeTranslator.addPropertiesToPb(DataTypeTranslator.java:138)
[INFO] at com.google.appengine.api.datastore.EntityTranslator.convertToPb(EntityTranslator.java:61)
[INFO] at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$4.toPb(AsyncDatastoreServiceImpl.java:203)
[INFO] at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$4.toPb(AsyncDatastoreServiceImpl.java:180)
[INFO] at com.google.appengine.api.datastore.Batcher$BatchIterator.<init>(Batcher.java:177)
...
我尝试使用我自己的服务向 Objectify 注册它,但它只会说找不到实体,这并不奇怪,因为它没有使用 Objectify 的 @Entity 进行注释。
如何使用 Objectify 持久化 Google 用户类型?
** 更新 **
我似乎也遇到了其他 Google 类型的问题。
例如
com.google.appengine.api.datastore.Email
实体类
package com.propertywrassler.webservice.maintenance;
import com.google.api.server.spi.response.BadRequestException;
import com.google.appengine.api.users.User;
import com.googlecode.objectify.annotation.Entity;
import com.propertywrassler.webservice.util.ErrorMessage;
import com.propertywrassler.webservice.util.PropertyWrasslerChildEntity;
import lombok.Getter;
import lombok.Setter;
import org.joda.time.DateTime;
@Entity
public class Comment extends MyChildEntity<ThingYouComment, Comment> {
@Getter @Setter private User author;
@Getter @Setter private DateTime timeStamp = new DateTime();
@Getter @Setter private String text;
@Override
public void validate() throws BadRequestException {
super.validate();
if (author == null) {
throw new BadRequestException(ErrorMessage.requiredField("author"));
}
if (text == null) {
throw new BadRequestException(ErrorMessage.requiredField("text"));
}
}
}
在服务中我坚持这样。一切正常,直到服务。端点正确地序列化了对象。用户对象是完美的。问题出在下面一行。
ofy().save().entity(comment).now();
【问题讨论】:
-
粘贴您正在使用的代码可能会更好。
-
@BeroDotnet 粘贴了所有相关内容。如果您还需要更多信息,请告诉我。但这看起来像是一个 Objectify 问题。
-
与Objectify无关;您可以从堆栈跟踪中看到,Objectify 将用户对象按原样传递到 GAE 低级 API,并且低级 API 将其识别为用户对象。看起来 User.authDomain 的值为 null。
标签: java google-app-engine google-cloud-datastore objectify