我在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更改为另一个项目时,它只会提供错误消息
为了您的信息,当我使用相同的网址在浏览器中打开时,网址运行正常,我可以看到那里的门票,但它在程序中不起作用
我为上面的代码
得到了这个 ????????? 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());
请帮我解决这个问题
答案 0 :(得分:0)
似乎在Trac服务器(例如Apache Httpd)上有关于第二个url的一些特定配置。您可以尝试其他方法来获取网址。也许它会产生更详细的异常或其他东西。
我尝试使用Trac而不是常规的'URL'/'URLConnection'java类,它可以正常工作,并且你也控制整个过程,因为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找到更多示例。