2016-05-26 3 views
1

Java/JQL/Jira API経由でJiraの問題を問い合わせるときに、404の応答コードが一貫して取得されています。以下のURLは、ブラウザに直接接続すると、両方に対して正しい結果が得られます。 Java APIを介してのみ404を取得します。私は何かURIのエンコーディングに間違っていると思うが、それを把握することはできません。404からJiraを使用してJava経由でJiraの問題を問い合わせる

サイドノート - HTTPGETは()何らかの理由のためだけではない、この特定の一つ、私は一緒に入れ、他のすべての要求のJIRA(ZAPI、REST呼び出し、ETCL)のために正常に動作します。

import java.net.HttpURLConnection; 
import java.net.InetSocketAddress; 
import java.net.Proxy; 
import java.net.URI; 
import java.net.URL; 

... 

String urlStr = "https://jira.xxxx.com//jira/rest/api/2/issue/search?jql=project=XXXXX and summary ~ \"Testing Jira Integration Pass\"&fields=id,key,summary"; 

logger.debug("Url: " + urlStr.toString()); 

URL url = new URL(urlStr); 
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef()); 
url = uri.toURL(); 

logger.debug("Url Encoded: " + url.toString()); 

HttpURLConnection conn = httpGet(url.toString(), null, null); 
logger.debug("Http Response Code: " + conn.getResponseCode()); 

結果:

2016-05-26 06:27:55 DEBUG - Url: https://jira.xxxx.com//jira/rest/api/2/issue/search?jql=project=XXXXX and summary ~ "Testing Jira Integration Pass"&fields=id,key,summary 
2016-05-26 06:27:55 DEBUG - Url Encoded: https://jira.xxxx.com//jira/rest/api/2/issue/search?jql=project=XXXXX%20and%20summary%20~%20%22Testing%20Jira%20Integration%20Pass%22&fields=id,key,summary 
2016-05-26 06:27:55 DEBUG - Http Response Code: 404 

答えて

1

私はそれがすべて間違っていました。 JSON文字列にリクエストを作成してから、正しいURLを使用してPOSTを実行しなければなりませんでした。

String url = buildUrl("jira/rest/api/2/search"); 
    String query = "project = XXXX AND issuetype = Test AND text ~ \"" + testId + "\""; 

JSONArray fields = new JSONArray(); 
fields.put("id"); 
fields.put("key"); 
fields.put("summary"); 

JSONObject reqObj = new JSONObject(); 
reqObj.put("jql", query); 
reqObj.put("startAt", 0); 
reqObj.put("maxResults", 15); 
reqObj.put("fields", fields); 

String requestBody = reqObj.toString(); 
logger.debug("Request body: " + requestBody); 

HttpURLConnection conn = httpPost(url, null, null, requestBody); 
logger.debug("HTTP response code: " + conn.getResponseCode()); 
String response = IOUtils.toString(conn.getInputStream()); 
logger.debug("HTTP res content: " + response); 
関連する問題