2016-04-12 23 views
0

ile bir istekte Content-Length nasıl ayarlanır Bir GitHub kullanıcısını askıya almak için Groovy içinde HttpBuilder kullanmaya çalışıyorum, ancak son satırda boş bir işaretçi hatası aldım. REST API burada tanımlanır: https://developer.github.com/v3/users/administration/Groovy HttpBuilder

String path = "http://github.mycompany.com/api/v3/users/$username/suspended"   
print "path: $path \n" 
log.info("Suspend GitHub users") 

def httpBuilder = getHTTPBuilder() 
httpBuilder.request(Method.PUT, ContentType.TEXT) { req -> 
    uri.path = path 
    headers.'Content-Length' = 0 


path: http://github.mycompany.com/api/v3/users/jasionb/suspended 
16:59:46.467 [main] INFO c.o.devops.tools.GitHubUserManager - Suspend GitHub users 
16:59:46.898 [main] ERROR c.o.devops.tools.GitHubUserManager - GithubUserManager FAILED 
java.lang.NullPointerException: null 
    at groovyx.net.http.HTTPBuilder.request(HTTPBuilder.java:383) ~[http-builder-0.7.1.jar:na] 
    at groovyx.net.http.HTTPBuilder$request$0.call(Unknown Source) ~[na:na] 
    at com.otpp.devops.tools.GitHubUserManager.suspendUsers(GitHubUserManager.groovy:105) ~[GitHubUserManager.groovy:na] 
    at com.otpp.devops.tools.GitHubUserManager$suspendUsers.call(Unknown Source) ~[na:na] 
    at com.otpp.devops.tools.GitHubUserManager.main(GitHubUserManager.groovy:150) ~[GitHubUserManager.groovy:na] 



baseUrl='http://github.otpp.com/api/v3' 

HTTPBuilder getHTTPBuilder() { 
     def httpBuilder = new HTTPBuilder(baseUrl) 
     httpBuilder.ignoreSSLIssues() 

     httpBuilder.client.addRequestInterceptor(new HttpRequestInterceptor() { 
      void process(HttpRequest httpRequest, HttpContext httpContext) { 
       httpRequest.addHeader('Authorization', 'Basic ' + "$user:$password".bytes.encodeBase64().toString()) 
      } 
     })   

     return httpBuilder 
    } 

cevap

1
  1. Eğer HTTPBuilder yapıcı varsayılan URI belirtin veya request yöntemin bir parametre olarak URI sağlamanız gerekir NPE önlemek için.
  2. Content-Length başlığını açıkça belirtmenize gerek yoktur, bunun üzerinde istisna vardır. Content-Length otomatik olarak hesaplanır ve sizin durumunuzda, istek gövdesini belirtmediğiniz için 0 olur.

deneyin

String path = "http://github.mycompany.com/api/v3/users/$username"   
print "path: $path \n" 
log.info("Suspend GitHub users") 

def httpBuilder = getHTTPBuilder() 

//path as a parameter of request 
httpBuilder.request(path, Method.PUT, ContentType.TEXT) { req -> 
    uri.path = '/suspended' 
    //no need to specify 
    //headers.'Content-Length' = 0 
    ... 
+0

. BaseUrl, GitHub REST API'sı için varsayılan URI'dır. –

0

Üzgünüm şu, ben baseURL null düşündüm. Yardım için teşekkürler, sadece benim getHTTPBuilder() işlevini gönderdim