Redmine Java Api-org.json.JSONException:JSONObject文本必须以';{';在字符1处

Redmine Java Api-org.json.JSONException:JSONObject文本必须以';{';在字符1处,java,redmine,redmine-api,Java,Redmine,Redmine Api,当我尝试运行此代码时(问题示例取自此web): 它以这个例外结束 Exception in thread "main" com.taskadapter.redmineapi.RedmineFormatException: org.json.JSONException: A JSONObject text must begin with '{' at character 1 at com.taskadapter.redmineapi.internal.Transport.parseResp

当我尝试运行此代码时(问题示例取自此web):

它以这个例外结束

Exception in thread "main" com.taskadapter.redmineapi.RedmineFormatException: org.json.JSONException: A JSONObject text must begin with '{' at character 1
    at com.taskadapter.redmineapi.internal.Transport.parseResponse(Transport.java:456)
    at com.taskadapter.redmineapi.internal.Transport.addObject(Transport.java:186)
    at com.taskadapter.redmineapi.RedmineManager.createIssue(RedmineManager.java:135)
    at javaapplication146.JavaApplication146.main(JavaApplication146.java:27)
Caused by: org.json.JSONException: A JSONObject text must begin with '{' at character 1
    at org.json.JSONTokener.syntaxError(JSONTokener.java:410)
    at org.json.JSONObject.<init>(JSONObject.java:179)
    at org.json.JSONObject.<init>(JSONObject.java:402)
    at com.taskadapter.redmineapi.internal.RedmineJSONParser.getResponseSingleObject(RedmineJSONParser.java:609)
    at com.taskadapter.redmineapi.internal.Transport.parseResponse(Transport.java:454)
    ... 3 more
Java Result: 1
线程“main”com.taskadapter.redmineapi.RedmineFormatException:org.json.jsoneexception:JSONObject文本必须在字符1处以“{”开头 位于com.taskadapter.redmineapi.internal.Transport.parseResponse(Transport.java:456) 位于com.taskadapter.redmineapi.internal.Transport.addObject(Transport.java:186) 位于com.taskadapter.redmineapi.RedmineManager.createIssue(RedmineManager.java:135) 位于javaapplication146.javaapplication146.main(javaapplication146.java:27) 由以下原因引起:org.json.JSONException:JSONObject文本必须在字符1处以“{”开头 位于org.json.JSONTokener.syntaxError(JSONTokener.java:410) 位于org.json.JSONObject(JSONObject.java:179) 位于org.json.JSONObject(JSONObject.java:402) 位于com.taskadapter.redmineapi.internal.RedmineJSONParser.getResponseSingleObject(RedmineJSONParser.java:609) 位于com.taskadapter.redmineapi.internal.Transport.parseResponse(Transport.java:454) …还有3个 Java结果:1 对于任何其他“获取某些对象”(有效)和“创建某些对象”(无效)也有相同的行为

我正在使用maven()及其对版本1.23的依赖关系,但是我尝试了1.12.0,并引发了相同的异常


我们正在使用最新的redmine 2.5.1.stable,但是基于stacktrace,redmine web和此redmine api之间的通信不会发生,因为异常被抛出到应用程序的“parseRespone”部分。

不幸的是,根据与库所有者的讨论,此问题似乎仍未解决:

但是GET请求可以工作。对于更新/创建,您可以使用纯API,如下所示。警告:禁用SSL是危险的,仅用于测试目的(例如“它能工作吗?”)

导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.io.OutputStreamWriter;
导入java.io.StringWriter;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入javax.net.ssl.HttpsURLConnection;
导入javax.net.ssl.TrustManager;
导入javax.net.ssl.X509TrustManager;
导入javax.net.ssl.*;
导入java.security.SecureRandom;
导入java.security.cert.x509证书;
/**
*
*@author libik
*/
公共类JavaApplication147{
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args)引发异常{
禁用证书规避();
URL=新URL(“https://redmine.***.cz/issues.xml”);
HttpsURLConnection httpCon=(HttpsURLConnection)url.openConnection();
httpCon.setRequestProperty(“X-Redmine-API-Key”,“****”);
setRequestProperty(“内容类型”、“应用程序/xml”);
httpCon.setDoOutput(真);
httpCon.setRequestMethod(“POST”);
OutputStreamWriter out=新的OutputStreamWriter(
httpCon.getOutputStream());
out.write(“\n”+
“\n”+
“泛独角兽机器人\n”+
“按名称从netbeans创建,无优先级\n”+
"");
out.close();
BufferedReader br=null;
StringBuilder sb=新的StringBuilder();
弦线;
试一试{
br=新的BufferedReader(新的InputStreamReader(httpCon.getInputStream());
而((line=br.readLine())!=null){
某人附加(行);
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
如果(br!=null){
试一试{
br.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
System.out.println(sb.toString());
}
公共静态无效禁用CertificateValidation(){
//创建不验证证书链的信任管理器
TrustManager[]trustAllCerts=新的TrustManager[]{
新X509TrustManager(){
公共X509证书[]getAcceptedIssuers(){
返回新的X509证书[0];
}
public void checkClientTrusted(X509Certificate[]证书,字符串authType){
}
public void checkServerTrusted(X509Certificate[]证书,字符串authType){
}
}};
//忽略给定主机名和证书主机名之间的差异
HostnameVerifier hv=新的HostnameVerifier(){
公共布尔验证(字符串主机名、SSLSession会话){
返回true;
}
};
//安装所有信任管理器
试一试{
SSLContext sc=SSLContext.getInstance(“SSL”);
sc.init(null,trustAllCerts,new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hv);
}捕获(例外e){
}
}
}
Exception in thread "main" com.taskadapter.redmineapi.RedmineFormatException: org.json.JSONException: A JSONObject text must begin with '{' at character 1
    at com.taskadapter.redmineapi.internal.Transport.parseResponse(Transport.java:456)
    at com.taskadapter.redmineapi.internal.Transport.addObject(Transport.java:186)
    at com.taskadapter.redmineapi.RedmineManager.createIssue(RedmineManager.java:135)
    at javaapplication146.JavaApplication146.main(JavaApplication146.java:27)
Caused by: org.json.JSONException: A JSONObject text must begin with '{' at character 1
    at org.json.JSONTokener.syntaxError(JSONTokener.java:410)
    at org.json.JSONObject.<init>(JSONObject.java:179)
    at org.json.JSONObject.<init>(JSONObject.java:402)
    at com.taskadapter.redmineapi.internal.RedmineJSONParser.getResponseSingleObject(RedmineJSONParser.java:609)
    at com.taskadapter.redmineapi.internal.Transport.parseResponse(Transport.java:454)
    ... 3 more
Java Result: 1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.net.ssl.*;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;

/**
 *
 * @author libik
 */
public class JavaApplication147 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        disableCertificateValidation();        

        URL url = new URL("https://redmine.***.cz/issues.xml");
        HttpsURLConnection httpCon = (HttpsURLConnection) url.openConnection();
        httpCon.setRequestProperty("X-Redmine-API-Key", "*****");
        httpCon.setRequestProperty("Content-Type", "application/xml");
        httpCon.setDoOutput(true);
        httpCon.setRequestMethod("POST");
        OutputStreamWriter out = new OutputStreamWriter(
                httpCon.getOutputStream());
        out.write("<?xml version=\"1.0\"?>\n" +
"<issue>\n" +
"  <project_id>pan-unicorn-bot</project_id>\n" +
"  <subject>Created from netbeans by name without priority</subject>\n" +
"</issue>");
        out.close();

        BufferedReader br = null;
        StringBuilder sb = new StringBuilder();

        String line;
        try {

            br = new BufferedReader(new InputStreamReader(httpCon.getInputStream()));
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println(sb.toString());
    }

    public static void disableCertificateValidation() {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }

                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }

                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            }};

        // Ignore differences between given hostname and certificate hostname
        HostnameVerifier hv = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };

        // Install the all-trusting trust manager
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            HttpsURLConnection.setDefaultHostnameVerifier(hv);
        } catch (Exception e) {
        }
    }

}