我正在使用Java中的XML-RPC插件从Trac中提取票证信息。
到目前为止,我已经成功地使用了以下代码
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运行正常,我可以在那里看到票证,但它在程序中不起作用。
我在上面的代码中得到了这个
????????? 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());请帮我解决这个问题
发布于 2015-01-29 20:55:29
看起来你在Trac服务器(例如Apache Httpd)上有一些关于第二个url的特定配置。您可以尝试其他方法来访问url。也许它会产生更详细的异常或其他东西。
我试着在常规的'URL‘/ 'URLConnection’java类上使用Trac,它工作得很好,而且你也可以控制整个过程,因为http/rpc的东西是低级实现的。
唯一棘手的事情是票证版本时间戳-它应该被指定为RPC票证修改方法的附加参数。
一个简短的例子。
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。
https://stackoverflow.com/questions/24321583
复制相似问题