1
Apache HTTPClientを使用してSharepointドキュメントライブラリ内のフィールドを更新しようとしていますが、HTTPエラー400が発生します。コードと出力は以下のようになります。これはHTTPエラー400の取得要求が不正です - SharePointフィールドを更新しようとすると無効なURL
public static boolean setFieldValue(CloseableHttpClient httpClient, String siteURL, String serverRelativeURL, String fieldName, String fieldValue) {
CloseableHttpResponse httpResponse = null;
try {
URI siteURI = new URI(siteURL);
URI postURI = new URIBuilder(siteURI)
.setPath(siteURI.getPath() + "/_api/web/GetFileByServerRelativeUrl('" + serverRelativeURL + "')/ListItemAllFields")
.build();
HttpPost httpPost = new HttpPost(postURI);
String formDigestValue = getFormDigestValue(httpClient, postURI);
if (StringUtils.isBlank(formDigestValue)) {
logger.error("FORM DIGEST VALUE IS = " + formDigestValue);
return false;
}
httpPost.addHeader(ACCEPT, APPLICATION_JSON);
httpPost.addHeader(CONTENT_TYPE, APPLICATION_JSON);
httpPost.addHeader(X_HTTP_Method, MERGE);
httpPost.addHeader(IF_MATCH, Punctuation.ASTERISK);
httpPost.addHeader(X_REQUEST_DIGEST, formDigestValue);
JSONObject jsonObject = new JSONObject();
jsonObject.put(fieldName, fieldValue);
jsonObject.put("__metadata", new JSONObject().put("type", "SP.Data.PuneetsLibraryItem"));
logger.debug(jsonObject);
httpPost.setEntity(new StringEntity(jsonObject.toString()));
logger.trace(httpPost.getRequestLine());
logger.trace(httpPost.getURI());
httpResponse = httpClient.execute(httpPost);
HttpEntity entity = httpResponse.getEntity();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent()));
if (bufferedReader != null) {
int cp;
StringBuilder sb = new StringBuilder();
while ((cp = bufferedReader.read()) != -1) {
sb.append((char) cp);
}
logger.debug("String Response......." + sb);
bufferedReader.close();
}
logger.debug("Response......." + entity.getContent());
logger.trace(httpResponse.getStatusLine().getReasonPhrase());
int status = httpResponse.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
return true;
} else {
logger.error("ERROR: " + httpResponse.getStatusLine().toString().toUpperCase());
}
} catch (URISyntaxException | IOException e) {
logger.error(e.getMessage(), e);
} finally {
try {
if (httpResponse != null) {
httpResponse.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
コンソールログが起こっている理由を教えてください:
13:57:44.089 [main] DEBUG com.nextlabs.smartclassifier.sharepoint.SharePointUtil - POST http://sp2013w2k12r2/_api/contextinfo HTTP/1.1
13:57:45.417 [main] TRACE com.nextlabs.smartclassifier.sharepoint.SharePointUtil - HTTP/1.1 200 OK
13:57:45.417 [main] DEBUG com.nextlabs.smartclassifier.sharepoint.SharePointUtil - {"TestField":"Puneet","__metadata":{"type":"SP.Data.PuneetsLibraryItem"}}
13:57:45.433 [main] TRACE com.nextlabs.smartclassifier.sharepoint.SharePointUtil - POST http://sp2013w2k12r2/_api/web/GetFileByServerRelativeUrl('/PuneetsLibrary/Three.docx')/ListItemAllFields HTTP/1.1
13:57:45.433 [main] TRACE com.nextlabs.smartclassifier.sharepoint.SharePointUtil - http://sp2013w2k12r2/_api/web/GetFileByServerRelativeUrl('/PuneetsLibrary/Three.docx')/ListItemAllFields
13:57:45.448 [main] DEBUG com.nextlabs.smartclassifier.sharepoint.SharePointUtil - String Response.......<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid URL</h2>
<hr><p>HTTP Error 400. The request URL is invalid.</p>
</BODY></HTML>
13:57:45.448 [main] DEBUG com.nextlabs.smartclassifier.sharepoint.SharePointUtil - [email protected]5
13:57:45.448 [main] TRACE com.nextlabs.smartclassifier.sharepoint.SharePointUtil - Bad Request
13:57:45.448 [main] ERROR com.nextlabs.smartclassifier.sharepoint.SharePointUtil - ERROR: HTTP/1.1 400 BAD REQUEST
13:57:45.448 [main] INFO com.nextlabs.smartclassifier.util.HTTPClientUtil - Trying to close HTTP Connections
13:57:45.448 [main] INFO com.nextlabs.smartclassifier.util.HTTPClientUtil - HTTP Connections closed successfully.
あなたはURLがコンソールログに印刷されて@pushpendra URL –
を印刷しようとすることができます。 – Puneet
あなたはこの回答を見たことがありますか?http://stackoverflow.com/questions/21383707/sp-web-getfilebyserverrelativeurlfileurl-not-working –