当我单击以生成云端点客户端库时,我在错误日志中收到以下内容。
java.lang.reflect.InvocationTargetException
at com.google.gdt.eclipse.appengine.swarm.wizards.GenerateSwarmApiAction$1.run(GenerateSwarmApiAction.java:82)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:122)
Caused by: com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmGenerationException: com.google.api.server.spi.config.validation.MissingParameterNameException: tuberservice.com.rune.tuber.server.TuberServiceImpl.TuberServiceImpl.getInitParameter parameter (type class java.lang.String): Missing parameter name. Parameter type (class java.lang.String) is not an entity type and thus should be annotated with @Named.
at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createSwarmApi(SwarmApiCreator.java:292)
at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmServiceCreator.create(SwarmServiceCreator.java:444)
at com.google.gdt.eclipse.appengine.swarm.wizards.GenerateSwarmApiAction$1.run(GenerateSwarmApiAction.java:80)
... 1 more
Caused by: com.google.api.server.spi.config.validation.MissingParameterNameException: tuberservice.com.rune.tuber.server.TuberServiceImpl.TuberServiceImpl.getInitParameter parameter (type class java.lang.String): Missing parameter name. Parameter type (class java.lang.String) is not an entity type and thus should be annotated with @Named.
at com.google.api.server.spi.config.validation.ApiConfigValidator.validateApiParameter(ApiConfigValidator.java:271)
at com.google.api.server.spi.config.validation.ApiConfigValidator.validateParameter(ApiConfigValidator.java:229)
at com.google.api.server.spi.config.validation.ApiConfigValidator.validateMethod(ApiConfigValidator.java:169)
at com.google.api.server.spi.config.validation.ApiConfigValidator.validateMethods(ApiConfigValidator.java:130)
at com.google.api.server.spi.config.validation.ApiConfigValidator.validate(ApiConfigValidator.java:93)
at com.google.api.server.spi.config.validation.ApiConfigValidator.validate(ApiConfigValidator.java:63)
at com.google.api.server.spi.config.jsonwriter.JsonConfigWriter.writeConfig(JsonConfigWriter.java:102)
at com.google.api.server.spi.tools.AnnotationApiConfigGenerator.generateConfig(AnnotationApiConfigGenerator.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createSwarmApi(SwarmApiCreator.java:288)
... 3 more
这是我的服务实现
@SuppressWarnings("serial")
@Api(name = "tuberservice")
public class TuberServiceImpl extends RemoteServiceServlet implements
TuberService {
@Override
@ApiMethod(name = "addClient")
public String addClientService(TuberClient t) {
if (t != null){
PersistenceManager pm = PMF.get().getPersistenceManager();
pm.makePersistent(t);
pm.close();
return t.toString();
}
return "Invalid client";
}
@SuppressWarnings("unchecked")
@Override
@ApiMethod(name = "listClients")
public TuberClient[] listAllClientsService() {
// TODO Auto-generated method stub
//select from TuberClient
PersistenceManager pm = PMF.get().getPersistenceManager();
Query q = pm.newQuery(TuberClient.class);
List<TuberClient> list = (List<TuberClient>) q.execute();
ArrayList<TuberClient> returnList = new ArrayList<TuberClient>();
for (TuberClient t : list){
returnList.add(t);
}//end for
pm.close();
return (TuberClient[])returnList.toArray(new TuberClient[0]);
}
}
我现在一直在寻找解决问题的方法。我尝试恢复到appengine1.8.8但它没有工作,我尝试重建,清理等,没有,我甚至尝试部署到appengine,但没有工作。
我实际上不知道从哪里开始解决错误,因为我的服务器实现中没有任何字符串可以注释,所以我整体上非常困惑。
答案 0 :(得分:0)
您无法从Cloud Endpoints方法返回String
。
这一行不会编译:
public String addClientService(TuberClient t)
这也是可疑的:
extends RemoteServiceServlet implements TuberService
检查您是否有任何返回String
的API方法。
请阅读guide。如果代码返回有效值并且每个必需参数都对应@Name
注释,请仔细检查您的代码。
在Endpoint方法中,返回值类型不能是简单类型 例如String或int。返回值必须是POJO,一个数组 或收藏品。此外,list()和get()作为HTTP GET公开, insert()作为HTTP POST公开,update()作为HTTP PUT公开, 和removeNote()作为HTTP DELETE公开。