无法使用 GAE Java API 删除域共享联系人

发布于 2024-12-19 16:30:14 字数 6243 浏览 7 评论 0原文

我正在尝试编写一个应用程序,使用 Java API 将域共享联系人添加/更新/删除到 Google。

当我尝试从 Google 删除创建的联系人时,出现以下异常。

没有身份验证标头信息

Caused by:
java.lang.NullPointerException: No authentication header information
    at com.google.gdata.util.AuthenticationException.initFromAuthHeader(AuthenticationException.java:96)
    at com.google.gdata.util.AuthenticationException.<init>(AuthenticationException.java:67)
    at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:564)
    at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:543)
    at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:536)
    at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:515)
    at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:515)
    at com.google.gdata.client.Service.delete(Service.java:1560)
    at com.google.gdata.client.GoogleService.delete(GoogleService.java:691)
    at com.google.gdata.data.BaseEntry.delete(BaseEntry.java:647)
    at com.visy.connector.synchronizer.impl.ContactSynchronizerImpl.deleteContact(ContactSynchronizerImpl.java:170)
    at com.visy.connector.TestServlet.doGet(TestServlet.java:54)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

以下是我用于 deleteContact 的代码

public String deleteContact(String contactId) {

        String resultString = "Failed"
        ContactEntry contactEntry = getContactFromGoogle(contactId);
        try {
              if (contactEntry != null) {
              // deleting contact from Google
               contactEntry.delete();
               resultString = "Sucess";
        } catch (IOException e) {
             LOGGER.log(Level.SEVERE, e.getMessage());
        } catch (ServiceException e) {
             LOGGER.log(Level.SEVERE, e.getMessage());
        }
        return resultString;
    }


         public ContactEntry getContactFromGoogle(String contactId) {
        ContactEntry contact = null;
        ContactsService myService = getOAuthContactService("getContact");
        try {
            String urlStr =      
                              http://www.google.com/m8/feeds/contacts/mydomain/full
                              + "/" + contactId 
                              + "?xoauth_requestor_id=" + domainAdminEmail;
              contact = myService.getEntry(new URL(urlStr), 
                                          ContactEntry.class);
                        }
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE, e.getMessage());
        }
        return contact;
    }

         public ContactsService getOAuthContactService(String serviceName) {
        final ContactsService myService = new ContactsService(serviceName);
        GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
        oauthParameters.setScope(Scope);
        oauthParameters.setOAuthConsumerKey(ConsumerKey);
        oauthParameters.setOAuthConsumerSecret(secret);                      OAuthSigner signer = new OAuthHmacSha1Signer();
        try {
            myService.setOAuthCredentials(oauthParameters, signer);
        } catch (OAuthException e) {
            LOGGER.log(Level.SEVERE, e.getMessage());
        }
        LOGGER.log(Level.INFO, "Created the Authenticated Contact Service");
        return myService;
    }

在上面的代码中 getContactFromGoogle() 方法返回适当的联系人(根据日志和调试结果)。但是当我调用 contactEntry.delete() 时,会抛出“无身份验证标头信息”异常。

请帮助我找出代码可能出了什么问题。

问候, 尼尔扎里

I am trying to write an application that adds/updates/deletes domain shared contacts in to Google using Java API.

I am getting following exception while I try to delete the created contact from Google.

No authentication header information

Caused by:
java.lang.NullPointerException: No authentication header information
    at com.google.gdata.util.AuthenticationException.initFromAuthHeader(AuthenticationException.java:96)
    at com.google.gdata.util.AuthenticationException.<init>(AuthenticationException.java:67)
    at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:564)
    at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:543)
    at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:536)
    at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:515)
    at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:515)
    at com.google.gdata.client.Service.delete(Service.java:1560)
    at com.google.gdata.client.GoogleService.delete(GoogleService.java:691)
    at com.google.gdata.data.BaseEntry.delete(BaseEntry.java:647)
    at com.visy.connector.synchronizer.impl.ContactSynchronizerImpl.deleteContact(ContactSynchronizerImpl.java:170)
    at com.visy.connector.TestServlet.doGet(TestServlet.java:54)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

Following is the code I am using for deleteContact

public String deleteContact(String contactId) {

        String resultString = "Failed"
        ContactEntry contactEntry = getContactFromGoogle(contactId);
        try {
              if (contactEntry != null) {
              // deleting contact from Google
               contactEntry.delete();
               resultString = "Sucess";
        } catch (IOException e) {
             LOGGER.log(Level.SEVERE, e.getMessage());
        } catch (ServiceException e) {
             LOGGER.log(Level.SEVERE, e.getMessage());
        }
        return resultString;
    }


         public ContactEntry getContactFromGoogle(String contactId) {
        ContactEntry contact = null;
        ContactsService myService = getOAuthContactService("getContact");
        try {
            String urlStr =      
                              http://www.google.com/m8/feeds/contacts/mydomain/full
                              + "/" + contactId 
                              + "?xoauth_requestor_id=" + domainAdminEmail;
              contact = myService.getEntry(new URL(urlStr), 
                                          ContactEntry.class);
                        }
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE, e.getMessage());
        }
        return contact;
    }

         public ContactsService getOAuthContactService(String serviceName) {
        final ContactsService myService = new ContactsService(serviceName);
        GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
        oauthParameters.setScope(Scope);
        oauthParameters.setOAuthConsumerKey(ConsumerKey);
        oauthParameters.setOAuthConsumerSecret(secret);                      OAuthSigner signer = new OAuthHmacSha1Signer();
        try {
            myService.setOAuthCredentials(oauthParameters, signer);
        } catch (OAuthException e) {
            LOGGER.log(Level.SEVERE, e.getMessage());
        }
        LOGGER.log(Level.INFO, "Created the Authenticated Contact Service");
        return myService;
    }

In above code getContactFromGoogle() method is returning the appropriate contact (as per the logs and debug results). But when I invoke contactEntry.delete(), the "No Authentication Header Information" exception is thrown.

Kindly help me to figure out what may have been wrong with the code.

Regards,
Nirzari

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦一生花开无言 2024-12-26 16:30:14

通过使用 myService.setCredentials(username,password) usermail 或 domainAdminMail 密码

您可以使用以上 3 种方法(用户名、密码、令牌)
检查一下......

catch()块之前的这段代码

{
     ContactsService myService = getOAuthContactService("getContact");
       try{
             String urlStr =http://www.google.com/m8/feeds/contacts/mydomain/full
                          + "/" + contactId 
                          + "?xoauth_requestor_id=" + domainAdminEmail;

               myService.setCredentials(username,password);

          contact = myService.getEntry(new URL(urlStr), 
                                      ContactEntry.class);
                    }
    }

By using myService.setCredentials(username,password) usermail or domainAdminMail Password

There are more 3 methods you can use any by using (username,password, token)
check it......

this code before catch() block

{
     ContactsService myService = getOAuthContactService("getContact");
       try{
             String urlStr =http://www.google.com/m8/feeds/contacts/mydomain/full
                          + "/" + contactId 
                          + "?xoauth_requestor_id=" + domainAdminEmail;

               myService.setCredentials(username,password);

          contact = myService.getEntry(new URL(urlStr), 
                                      ContactEntry.class);
                    }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文