2016-02-11 56 views
0

我試圖使用java發佈 - 訂閱客戶端得到一個名爲話題:用於發佈訂閱無法找到谷歌API客戶端話題

@Value("projects/${pubsub.projectId}/topics/${environment}-events") 
String topic; 

Pubsub client = PubsubUtils.getClient(); 
     if (enabled) { 
      logger.info("PubSub event logging: enabled"); 
      Topic t = null; 
      try { 
       t = client.projects().topics().get(topic).execute(); 
       if (t != null) { 
        logger.info("PubSub topic {} already exists. Continuing ...", topic); 
        return client; 
       } 
      } catch (Exception ex) { 
       logger.info("Failed to get topic: {}", topic, ex); 
      } 

      // create topic 
      if (t == null) { 
       createTopic(client); 
      } 
     } else { 
      logger.info("PubSub event logging: disabled"); 
     } 

不幸的是,當我跑這跟

String topic = "projects/projectid/topics/topicid"; 

我不斷地得到回404響應:

Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found 
<!DOCTYPE html> 
<html lang=en> 
    <meta charset=utf-8> 
    <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> 
    <title>Error 404 (Not Found)!!1</title> 
    <style> 
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} 
    </style> 
    <a href=//www.google.com/><span id=logo aria-label=Google></span></a> 
    <p><b>404.</b> <ins>That’s an error.</ins> 
    <p>The requested URL <code>/v1/projects%2Fbrightcove-rna-master%2Ftopics%2Fdev_achauhan-events</code> was not found on this server. <ins>That’s all we know.</ins> 

    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
    at com.brightcove.collector.beans.PubSubProducerBean.createTopic(PubSubProducerBean.java:54) 
    at com.brightcove.collector.beans.PubSubProducerBean.getPublisher(PubSubProducerBean.java:45) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 54 more 

從它的外觀來看,客戶端庫似乎是url轉義主題名稱在網址和谷歌服務器失敗。

有沒有辦法解決這個問題或者更好的方法來讓谷歌API客戶端不逃避主題名稱。

編輯按照要求,這是完整的源代碼:

@Value("projects/${pubsub.projectId}/topics/${environment}-events") 
String topic; 

Pubsub getPublisher() throws Exception { 
    Pubsub client = PubsubUtils.getClient(); 
    if (enabled) { 
     logger.info("PubSub event logging: enabled"); 
     Topic t = null; 
     try { 
      t = client.projects().topics().get(topic).execute(); 
      if (t != null) { 
       logger.info("PubSub topic {} already exists. Continuing ...", topic); 
       return client; 
      } 
     } catch (Exception ex) { 
      logger.info("Failed to get topic: {}", topic, ex); 
     } 

     // create topic 
     if (t == null) { 
      createTopic(client); 
     } 
    } else { 
     logger.info("PubSub event logging: disabled"); 
    } 
    return client; 
} 

Topic createTopic(Pubsub client) throws IOException { 
    return client.projects().topics().create(topic, new Topic().setName(topic)).execute(); 
} 
+0

您使用的是哪個版本的客戶端庫? –

+0

另外,它似乎在createTopic失敗,沒有得到。你可以顯示createTopic的代碼嗎? –

+0

用完整的源代碼更新了問題。 –

回答

2

有沒有在你的項目中使用的任何其他谷歌API? 我剛剛解決了這個問題。我使用Google DataStore API和jar google-http-client 1.15將主題從'/'編碼爲'%2F',這是不正確的。 您可以排除谷歌-HTTP客戶端1.15從其他谷歌的API

Maven code: 
    <exclusion> 
     <groupId>com.google.http-client</groupId> 
     <artifactId>google-http-client</artifactId> 
    </exclusion> 

請使用1.20或更高版本! 正確的主題如下。

<code>/v1/projects/brightcove-rna-master/topics/dev_achauhan-events</code>