【问题标题】:Objectify+Eclipse+Generate Cloud Endpoint Client Library: "Variable does not conform to style guide"Objectify+Eclipse+Generate Cloud Endpoint 客户端库:“变量不符合样式指南”
【发布时间】:2014-07-16 13:34:57
【问题描述】:

我使用的是:Eclipse、Java、Objectify、Google App Engine SDK

如果这个问题已经解决,我很抱歉。但我找不到任何解决方案。情况如下:

我尝试了大约 3 周的时间来完成我的项目。起初,我有一个 Android 项目。然后,使用 Google Eclipse 插件,我生成了一个 App Engine 后端(在 Eclipse 上)并开始使用 JPA。但是,我在人际关系方面遇到了太多问题。我只是失去了时间和耐心。所以,我决定转向物化。

我按照 Objectify 文档的所有步骤构建了我的类。我定义了我的端点,用新的代码替换了以前的代码(使用 JPA)。 objectify 和 guava jar 都在 WEB-INF/lib 和构建路径中。

问题:当我尝试生成 Cloud Endpoint 客户端库时,出现此错误:

为您的 Cloud Endpoints 类生成 API 元数据时出现问题:

com.google.appengine.repackaged.com.google.api.client.http.HttpResponseException: 
400 Bad Request
{"error": {"message": "Bad Request", "code": 400, "errors": [{"message": "api exception", "debug_info": "Variable  does not conform to style guide"}]}} 

错误日志:

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:121)
Caused by: com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmGenerationException: com.google.appengine.repackaged.com.google.api.client.http.HttpResponseException: 400 Bad Request
{"error": {"message": "Bad Request", "code": 400, "errors": [{"message": "api exception", "debug_info": "Variable  does not conform to style guide"}]}}
    at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createClientLibFromApiConfig(SwarmApiCreator.java:144)
    at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createSwarmApi(SwarmApiCreator.java:258)
    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.appengine.repackaged.com.google.api.client.http.HttpResponseException: 400 Bad Request
{"error": {"message": "Bad Request", "code": 400, "errors": [{"message": "api exception", "debug_info": "Variable  does not conform to style guide"}]}}
    at com.google.appengine.repackaged.com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1054)
    at com.google.api.server.spi.tools.CloudClientLibGenerator.postRequest(CloudClientLibGenerator.java:53)
    at com.google.api.server.spi.tools.CloudClientLibGenerator.generateClientLib(CloudClientLibGenerator.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createClientLibFromApiConfig(SwarmApiCreator.java:142)
    ... 4 more
Root exception:
com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmGenerationException: com.google.appengine.repackaged.com.google.api.client.http.HttpResponseException: 400 Bad Request
{"error": {"message": "Bad Request", "code": 400, "errors": [{"message": "api exception", "debug_info": "Variable  does not conform to style guide"}]}}
    at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createClientLibFromApiConfig(SwarmApiCreator.java:144)
    at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createSwarmApi(SwarmApiCreator.java:258)
    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)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Caused by: com.google.appengine.repackaged.com.google.api.client.http.HttpResponseException: 400 Bad Request
{"error": {"message": "Bad Request", "code": 400, "errors": [{"message": "api exception", "debug_info": "Variable  does not conform to style guide"}]}}
    at com.google.appengine.repackaged.com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1054)
    at com.google.api.server.spi.tools.CloudClientLibGenerator.postRequest(CloudClientLibGenerator.java:53)
    at com.google.api.server.spi.tools.CloudClientLibGenerator.generateClientLib(CloudClientLibGenerator.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.google.gdt.eclipse.appengine.swarm.wizards.helpers.SwarmApiCreator.createClientLibFromApiConfig(SwarmApiCreator.java:142)
    ... 4 more

一些示例(包括实体注册)。我将禁止打包、导入和 getter/setter。如果有人知道如何提供帮助,我将不胜感激。如果有任何代码我应该放在这里,请告诉我。

用户.java

@Entity
    public class User {
    @Id
    private Long id;

    private String name;

    @Index
    private PhoneNumber phoneNumber;

    private String friendCode;

    @Load
    private List<Ref<Group>> groups = new ArrayList<Ref<Group>>(); //groups that a User can be simple member

    //...
    }

Group.java

@Entity
public class Group {
    @Id
    private Long id;

    @Index(IfNotNull.class)
    private String name;

    @Load
    @Index
    private Ref<User> owner; // Owner of the group. The creator.

OfyService.java

import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyFactory;
import com.googlecode.objectify.ObjectifyService;

public class OfyService {
    static {
        factory().register(Group.class);
        factory().register(User.class);      
    }

    public static Objectify ofy() {
        return ObjectifyService.ofy();
    }

    public static ObjectifyFactory factory() {
        return ObjectifyService.factory();
    }
}

UserEndpoint.java

import static com.uandq.lychee.OfyService.ofy;
@Api(name = "sampleEndpoint", namespace = @ApiNamespace(ownerDomain = "sample.com", ownerName = "sample.com", packagePath = ""))
public class UserEndpoint {


    @ApiMethod(name = "listUser")
    public List<User> listUser() {
        List<User> result = new ArrayList<User>();
        result = ofy().load().type(User.class).list();
        return result;
    }

    @ApiMethod(name = "getUser")
    public User getUser(@Named Long id) {
        User user = ofy().load().type(User.class).id(id).now();
        return user;
    }

    @ApiMethod(name = "insertUser")
    public User insertUser(User user) {
        ofy().save().entity(user).now();
        return user;
    }

    @ApiMethod(name = "removeUser")
    public void removeUser(@Named Long id) {
        ofy().delete().type(User.class).id(id).now();
    }

    @ApiMethod(name = "findUserByPhoneNumber")
    public User findUserByPhoneNumber(PhoneNumber phone) {

        User user = ofy().load().type(User.class)
                .filter("phoneNumber ==", phone).first().now();

        return user;
    }
}

GroupEndpoint.java

import static com.uandq.lychee.OfyService.ofy;

@Api(name = "sampleEndpoint", namespace = @ApiNamespace(ownerDomain = "sample.com", ownerName = "sample.com", packagePath = ""))
public class GroupEndpoint {

    @ApiMethod(name = "listGroup")
    public List<Group> listGroup() {
        List<Group> result = new ArrayList<Group>();
        result = ofy().load().type(Group.class).list();
        return result;
    }

    @ApiMethod(name = "getGroup")
    public Group getGroup(@Named Long id) {
        Group group = ofy().load().type(Group.class).id(id).now();
        return group;
    }

    @ApiMethod(name = "insertGroup")
    public Group insertGroup(Group group) {
        ofy().save().entity(group).now();
        return group;
    }

    @ApiMethod(name = "removeGroup")
    public void removeGroup(@Named Long id) {
        ofy().delete().type(Group.class).id(id).now();
    }

}

web.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?><web-app version="2.5">
    <servlet>
        <servlet-name>SystemServiceServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.SystemServiceServlet
        </servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>com.sample.GroupEndpoint, com.sample.UserEndpoint</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>SystemServiceServlet</servlet-name>
        <url-pattern>/_ah/spi/*</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>ObjectifyFilter</filter-name>
        <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ObjectifyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

此外,我现在尝试按照以下步骤生成端点库: 使用 endpoints.sh 为 Android 生成客户端库 通过终端。它也没有奏效。我仍然得到:

Error: 400 Bad Request

{"error": {"message": "Bad Request", "code": 400, "errors": [{"message": "api exception", "debug_info": "Variable  does not conform to style guide"}]}}

欢迎任何帮助。 问题也发布在:https://groups.google.com/forum/?hl=en-GB#!topic/objectify-appengine/981f4LlXscg

【问题讨论】:

  • 您可能想要添加 google-cloud-endpoints 标签;最有可能理解该错误消息的专家将关注该标签。
  • 哦,我就是这么做的。谢谢!
  • 您可以发布终端输出的额外错误详细信息吗?根据此链接stackoverflow.com/questions/23568970/… 的答案
  • 嘿,其实我解决了。我只是没有声誉,所以我不能在晚上 10 点之前发布我的答案:/
  • 这是个好消息 - 不要忘记发布您的答案!

标签: android eclipse google-app-engine google-cloud-endpoints objectify


【解决方案1】:

现在问题已经解决了。

解决方案:https://groups.google.com/forum/?hl=en-GB#!topic/objectify-appengine/981f4LlXscg

我发现了问题。实际上,我关注了此链接 https://cloud.google.com/developers/articles/google-cloud-endpoints-for-android 上的所有内容。然后,有:

大多数参数类型必须是可序列化的,因为 JSON 要求 对象是可序列化的。您也可以使用任何 JavaBean,它 包括您模型中的任何内容,因为您的模型对象应该 符合上述 JavaBean 标准。 一组有限的 类型不必是可序列化的,但必须使用@Named 进行注释。 这些是类型:String、int/Integer、boolean/Boolean、long/Long。

在我的端点中,一些参数以错误的方式使用注释 @Named:没​​有参数的实际名称。我什至不需要实现可序列化。我刚换了:

public User getUser(@Named Long id)

通过

public User getUser(@Named("id") Long id)

以及所有其他@Named 参数。现在我可以生成端点库了。

【讨论】:

  • 刚遇到这个问题,想评论一下,如果注释包含一个包含空格字符的字符串,就会出现这个错误。
猜你喜欢
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多