2012-05-07 38 views
1

我正在尝试发送用户更新到valance,我正在寻找一个如何执行put的示例,具体来说,就是put更新用户。Java PUT示例请

我环顾四周,但没有看到如何使用UserContext发送使用Java的json块的示例。

任何指向文档的指针,将不胜感激。

回答

1

这种修修补补之后,以及从我的同事建议(谁我不知道大量希望被鉴定所以我只会叫他比尔)。我们想出了以下Java方法(实际上应该分成不同的方法,但它是可以理解的)

private static String getValanceResult(ID2LUserContext userContext, 
     URI uri, String query, String sPost, String sMethod, int attempts) { 

    String sError = "Error: An Unknown Error has occurred"; 
    if (sMethod == null) { 
     sMethod = "GET"; 
    } 

    URLConnection connection; 
    try { 
     URL f = new URL(uri.toString() + query); 

     //connection = uri.toURL().openConnection(); 
     connection = f.openConnection(); 
    } catch (NullPointerException e) { 
     return "Error: Must Authenticate"; 
    } catch (MalformedURLException e) { 
     return "Error: " + e.getMessage(); 
    } catch (IOException e) { 
     return "Error: " + e.getMessage(); 
    } 


    StringBuilder sb = new StringBuilder(); 

    try { 
     // cast the connection to a HttpURLConnection so we can examin the 
     // status code 
     HttpURLConnection httpConnection = (HttpURLConnection) connection; 
     httpConnection.setRequestMethod(sMethod); 
     httpConnection.setConnectTimeout(20000); 
     httpConnection.setReadTimeout(20000); 
     httpConnection.setUseCaches(false); 
     httpConnection.setDefaultUseCaches(false); 
     httpConnection.setDoOutput(true); 


     if (!"".equals(sPost)) { 
      //setup connection 
      httpConnection.setDoInput(true); 
      httpConnection.setRequestProperty("Content-Type", "application/json"); 


      //execute connection and send xml to server 
      OutputStreamWriter writer = new OutputStreamWriter(httpConnection.getOutputStream()); 
      writer.write(sPost); 
      writer.flush(); 
      writer.close(); 
     } 

     BufferedReader in; 
     // if the status code is success then the body is read from the 
     // input stream 
     if (httpConnection.getResponseCode() == 200) { 
      in = new BufferedReader(new InputStreamReader(
        httpConnection.getInputStream())); 
      // otherwise the body is read from the output stream 
     } else { 
      in = new BufferedReader(new InputStreamReader(
        httpConnection.getErrorStream())); 
     } 

     String inputLine; 
     while ((inputLine = in.readLine()) != null) { 
      sb.append(inputLine); 
     } 
     in.close(); 

     // Determine the result of the rest call and automatically adjusts 
     // the user context in case the timestamp was invalid 
     int result = userContext.interpretResult(
       httpConnection.getResponseCode(), sb.toString()); 
     if (result == ID2LUserContext.RESULT_OKAY) { 
      return sb.toString(); 
      // if the timestamp is invalid and we haven't exceeded the retry 
      // limit then the call is made again with the adjusted timestamp 
     } else if (result == userContext.RESULT_INVALID_TIMESTAMP 
       && attempts > 0) { 
      return getValanceResult(userContext, uri, query, sPost, sMethod, attempts - 1); 
     } else { 
      sError = sb + " " + result; 
     } 
    } catch (IllegalStateException e) { 
     return "Error: Exception while parsing"; 
    } catch (FileNotFoundException e) { 
     // 404 
     return "Error: URI Incorrect"; 
    } catch (IOException e) { 
    } 
    return sError; 
} 
0

有一个php代码片段,我可以从一个项目中使用api(与java相同的粗糙逻辑)共享。用户上下文只准备url和特定环境(java运行时,或php库)的框架用于完成该帖子并检索结果(在这种情况下,它使用php CURL)。

 $apiPath = "/d2l/api/le/" . VERSION. "/" . $courseid . "/content/isbn/"; 
     $uri = $opContext->createAuthenticatedUri ($apiPath, 'POST'); 
     $uri = str_replace ("https", "http", $uri); 
     curl_setopt ($ch, CURLOPT_URL, $uri); 
     curl_setopt ($ch, CURLOPT_POST, true); 

     $response = curl_exec ($ch); 
     $httpCode = curl_getinfo ($ch, CURLINFO_HTTP_CODE); 
     $contentType = curl_getinfo ($ch, CURLINFO_CONTENT_TYPE); 
     $responseCode = $opContext->handleResult ($response, $httpCode, $contentType); 

     $ret = json_decode($response, true); 

     if ($responseCode == D2LUserContext::RESULT_OKAY) 
     { 
      $ret = "$response"; 
      $tryAgain = false; 
     } 
     elseif ($responseCode == D2LUserContext::RESULT_INVALID_TIMESTAMP) 
     { 
      $tryAgain = true; 
     } 
     elseif (isset ($ret['Errors'][0]['Message'])) 
     { 
      if ($ret['Errors'][0]['Message'] == "Invalid ISBN") 
      { 
       $allowedOrgId[] = $c; 
      } 
      $tryAgain = false; 
     } 

帖子消息的跟踪的样本是:

PUT https://valence.desire2learn.com/d2l/api/lp/1.0/users/3691?x_b=TwULqrltMXvTE8utuLCN5O&x_a=L2Hd9WvDTcyiyu5n2AEgpg&x_d=OKuPjV-a0ZoSBuZvJkQLpFva2D59gNjTMiP8km6bdjk&x_c=UjCMpy1VNHsPCJOjKAE_92g1YqSxmebLHnQ0cbhoSPI&x_t=1336498251 HTTP/1.1 
Accept-Encoding: gzip,deflate 
Accept: application/json 
Content-Type: application/json 

{ 
"OrgDefinedId": "85033380", 
"FirstName": "First", 
"MiddleName": "Middle", 
"LastName": "Last", 
"ExternalEmail": "[email protected]", 
"UserName": "Username", 
"Activation": { 
     "IsActive": true 
} 
} 
+0

谢谢你,我不是目前使用PHP的工作,但是这看起来像它会做的伎俩也。 –