首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML-RPC在从Trac提取票证信息时出现错误

XML-RPC在从Trac提取票证信息时出现错误
EN

Stack Overflow用户
提问于 2014-06-20 14:54:24
回答 1查看 579关注 0票数 0

我正在使用Java中的XML-RPC插件从Trac中提取票证信息。

到目前为止,我已经成功地使用了以下代码

代码语言:javascript
复制
     config.setBasicUserName ("username");
     config.setBasicPassword ("password");
     config.setServerURL (new URL ("trac_url"));

     client = new XmlRpcClient();
     client.setConfig (config);

     Object [] params = new Object [] {};
     Object [] queryResult = null;

     try {
         queryResult = (Object []) client.execute ("ticket.query", params);

     } catch (XmlRpcException e) {
         System.out.println(e.getMessage());
         System.out.println(e.code);
         System.out.println(e.linkedException);
         System.out.println(e.getCause());
         e.printStackTrace();
     }

但是当我将url更改为另一个项目时,它只会给出错误消息。

供您参考,当我使用完全相同的url在浏览器中打开时,url运行正常,我可以在那里看到票证,但它在程序中不起作用。

我在上面的代码中得到了这个

代码语言:javascript
复制
    ????????? XML_RPC ???????    // from  System.out.println(e.getMessage());
    1  // from System.out.println(e.code);
    org.apache.xmlrpc.XmlRpcException: ????????? XML_RPC ???????
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:197)
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:156)
    at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:143)
    at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69)
    at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:137)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:126)
    at xmlropx.ListTracTicket.extractDataFromTrac(ListTracTicket.java:206)
    at xmlropx.ListTracTicket.main(ListTracTicket.java:263)
    null   // from  System.out.println(e.linkedException);
    null   // from  System.out.println(e.getCause());

请帮我解决这个问题

EN

回答 1

Stack Overflow用户

发布于 2015-01-29 20:55:29

看起来你在Trac服务器(例如Apache Httpd)上有一些关于第二个url的特定配置。您可以尝试其他方法来访问url。也许它会产生更详细的异常或其他东西。

我试着在常规的'URL‘/ 'URLConnection’java类上使用Trac,它工作得很好,而且你也可以控制整个过程,因为http/rpc的东西是低级实现的。

唯一棘手的事情是票证版本时间戳-它应该被指定为RPC票证修改方法的附加参数。

一个简短的例子。

代码语言:javascript
复制
public static JSONObject sendJsonRpc(String method, JSONArray parameters) throws IOException, JSONException {

    JSONObject rpc = new JSONObject();
    rpc.put("method", method);
    rpc.put("params", parameters);
    rpc.put("id", jsonIdSequence++);

    String tracUrl = Configuration.getTracApiUrl();
    String tracUsername = Configuration.getTracApiUsername();
    String tracPassword = Configuration.getTracApiPassword();

    URL url = new URL(tracUrl);
    URLConnection conn = url.openConnection();
    String userpass = tracUsername + ":" + tracPassword;
    String basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
    conn.setRequestProperty ("Authorization", basicAuth);
    conn.setRequestProperty ("Content-Type", "application/json");
    conn.setDoOutput(true);

    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

    Logger.debug("jsonrpc request:\n" + rpc.toString());

    wr.write(rpc.toString());
    wr.flush();
    wr.close();

    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String line;
    String jsonText = "";
    while ((line = rd.readLine()) != null) {
        jsonText += line;
    }
    rd.close();

    Logger.debug("jsonrpc response:\n" + jsonText);

    return new JSONObject(jsonText);
}

你可以在这里找到更多的例子Java, Trac, RPC and JSON

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24321583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档