I recently had to use bugzilla's webservice API in a Java based project. And I was surprised to see that there was almost no sample code available for using bugzilla's webservice API especially for Java. So in the end I used the XmlRpcClient provided by Apache. Here's the sample code...
private XmlRpcClient getClient(String serverURL) {
try {
String apiURL = serverURL + "xmlrpc.cgi";
XmlRpcClient rpcClient;
XmlRpcClientConfigImpl config;
config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL(apiURL));
rpcClient = new XmlRpcClient();
rpcClient.setConfig(config);
return rpcClient;
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
public HashMap login(String serverURL, String login, String password) {
try {
XmlRpcClient rpcClient = getClient(serverURL);
ArrayList<Object> params = new ArrayList<Object>();
Hashtable<String, Object> executionData = new Hashtable<String, Object>();
executionData.put("login", login);
executionData.put("password", password);
executionData.put("remember", true);
params.add(executionData);
HashMap result = (HashMap) rpcClient.execute("User.login", params);
System.out.println(result);
return result;
} catch (XmlRpcException e) {
e.printStackTrace();
}
return null;
}
Here are the maven dependencies required by this code…
<repository>
<id>mvnrepository</id>
<url>http://mvnrepository.com/artifact/</url>
</repository>
<dependency>
<groupId>org.apache.xmlrpc</groupId>
<artifactId>xmlrpc-client</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.xmlrpc</groupId>
<artifactId>xmlrpc-common</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>ws-commons-util</groupId>
<artifactId>ws-commons-util</artifactId>
<version>1.0.1</version>
</dependency>
Or if you don’t use maven you can just download these libraries form Apache’s website…
- xmlrpc-client
- xmlrpc-common
- ws-commons-util
Hey thanks for the code! This is REALLY helpful! I can't make it work, I'm having the following exception:
ReplyDeleteorg.apache.xmlrpc.client.XmlRpcHttpTransportException: HTTP server returned unexpected status: Not Found
at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.getInputStream(XmlRpcSunHttpTransport.java:94)
at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:152)
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:158)
at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:147)
at com.bugzillaClient.controller.BugzillaController.login(BugzillaController.java:191)
at com.bugzillaClient.controller.BugzillaController.runYSEProcessXls(BugzillaController.java:153)
at com.bugzillaClient.runner.Launcher.main(Launcher.java:17)
Hi
ReplyDeleteIt looks like a problem with your bugzilla configuration. My guess is that you need to enable the webservice API or perhaps the API module is missing in your installation.
Hi,
ReplyDeleteI am getting one exception when using Bug.create API.
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at org.apache.xmlrpc.parser.XmlRpcResponseParser.addResult(XmlRpcResponseParser.java:61)
at org.apache.xmlrpc.parser.RecursiveTypeParserImpl.endValueTag(RecursiveTypeParserImpl.java:78)
at org.apache.xmlrpc.parser.XmlRpcResponseParser.endElement(XmlRpcResponseParser.java:186)
Any Idea?
Regards
Kondal
Try Integer.parseInt(string)
ReplyDeleteBTW this is not a problem with bugzilla..
I am sorry.get method is working fine.some prob with array initialization.
ReplyDeleteThanks
some rare piece of info it is. gr8 work ...
ReplyDeletehi..
ReplyDeletecan u tell me how to start for it ...from the initial...
Hi,I am trying to develop java code for reporting bugs in bugzilla and i am using bugzilla rest api. Can any one provide me sample code and necessary environment to run the code.Thanks in advance.
ReplyDeleteQ:: I am trying to develop code in java which automatically reports bugs in
ReplyDeleteBugzilla using j2BugZilla API. My Bugzilla Version is 2.16.4 and j2BugZilla
Version is 2.2. I am able to connect to BugZilla but after that i am not
able to login into bugzilla. Code is :
public class CreateBugInBugZilla {
public BugzillaConnector connector;
private String bugzillaurl="http://10.21.9.10/bugzilla-2.16.4";
public void connect() throws ConnectionException, BugzillaException {
BugZillaConnector connector;
connector = new BugzillaConnector();
connector.connectTo(bugzillaurl);
System.out.println("...connected.");
LogIn login=new LogIn(bugzillaUsername,bugzillaPassword);
connector.executeMethod(login);
System.out.println("logged in");
GetLegalValues get=new GetLegalValues(GetLegalValues.Fields.COMPONENT);
connector.executeMethod(get);
Set values=get.getLegalValues();
System.out.println(values);
BugSearch search = new BugSearch(new BugSearch.SearchQuery
(BugSearch.SearchLimiter.COMPONENT,"WEBMAIL"));
connector.executeMethod(search);
List searchResults=search.getSearchResults();
for(Bug bug:searchResults)
{
System.out.println(bug);
}
}
public static void main(String[]args) throws ConnectionException,
BugzillaException {
CreateBugInBugZilla createBugInBugZilla=new CreateBugInBugZilla();
createBugInBugZilla.connect();
}
Exception StackTrace is:---------------------------------------------
Exception in thread "main" com.j2bugzilla.base.BugzillaException: An unknown
error was encountered; fault code: 0
at com.j2bugzilla.base.XmlExceptionHandler.handleFault
(XmlExceptionHandler.java:96)
at com.j2bugzilla.base.BugzillaConnector.executeMethod
(BugzillaConnector.java:169)
at CreateBugInBugZilla.connect(CreateBugInBugZilla.java:33)
at CreateBugInBugZilla.main(CreateBugInBugZilla.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: org.apache.xmlrpc.client.XmlRpcHttpTransportException: HTTP
server returned unexpected status: Service Unavailable
at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.getInputStream
(XmlRpcSunHttpTransport.java:94)
at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest
(XmlRpcStreamTransport.java:152)
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 com.j2bugzilla.base.BugzillaConnector.executeMethod
(BugzillaConnector.java:164)
... 7 more
can anybody tell me how to get bug from a particular year.
ReplyDeleteAmazing work. Many thanks. Really appreciated the effort.
ReplyDelete