是否有java api访问bugzilla?

是否有一个(独立的!)java api将XML-RPC接口包装到bugzilla中? 我不想为它编写自己的api,我实际上找不到一个这样做的库(只有这个)。

更新:

我正在寻找像这样只用Java编写的http://oss.dbc.dk/bugzproxy/

我知道这是一个有点旧的线程,但因为很有可能有相同问题的人可以登陆这里我想共享一篇博文,我写了四篇关于访问Bugzilla的Java客户端库:J2Bugzilla,B4J(Bugzilla) for Java),Bugzilla Library,LightingBugAPI。

http://www.dzone.com/links/r/bugzilla_web_service_and_java_client_libraries.html

最诚挚的问候,南达娜

有Apache WS XML-RPC (现在已经满口了!) ,这是一个可以使用的完整XML-RPC实现。 我不太了解BugZilla,但假设它支持XML-RPC,那么使用我刚刚链接的可怕的一口应该没有任何问题。

库/ API称为JAX-WS(或JAXB),允许您调用任何性质的WS。 获取架构,生成bean和代理,调用它们。

这是一个使用Java的bugzilla api的简单示例.http://codehelpline.blogspot.com/2010/08/how-to-access-bugzilla-webservice-api.html

以下是Nandana Mihindukulasooriya 对4个Bugzilla API库的比较 ,我从中摘录:

  • J2Bugzilla , http://code.google.com/p/j2bugzilla/
  • B4J – Bugzilla for Java
  • ConQuat Bugzilla图书馆
  • LightingBugAPI

还有Mylyn应该在Eclipse之外独立运行。 但是,我没有管理它独立。 您可以试试我自己的Bugzilla Java API,它试图满足最迫切的需求: http : //techblog.ralph-schuster.eu/b4j-bugzilla-for-java/

Mylyn可能是你的不错选择。

如果您需要更简单的设置或更好地控制事情的发生,您可以编写自己的XML-RPC调用到Bugzilla Web服务接口。 我在我的博客上总结了这个过程: 使用Apache XML-RPC从Java聊天到Bugzilla 。

把它们加起来:

  • 获取Apache XML-RPC库
  • 从commons获取Apache HTTP Client(旧版本)

然后使用以下类作为基类(它处理cookie等)并覆盖它:

/** * @author joshis_tweets */ public class BugzillaAbstractRPCCall { private static XmlRpcClient client = null; // Very simple cookie storage private final static LinkedHashMap cookies = new LinkedHashMap(); private HashMap parameters = new HashMap(); private String command; // path to Bugzilla XML-RPC interface private static final String BZ_PATH = "https://localhost/bugzilla/xmlrpc.cgi"; /** * Creates a new instance of the Bugzilla XML-RPC command executor for a specific command * @param command A remote method associated with this instance of RPC call executor */ public BugzillaAbstractRPCCall(String command) { synchronized (this) { this.command = command; if (client == null) { // assure the initialization is done only once client = new XmlRpcClient(); XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); try { config.setServerURL(new URL(BZ_PATH)); } catch (MalformedURLException ex) { Logger.getLogger(BugzillaAbstractRPCCall.class.getName()).log(Level.SEVERE, null, ex); } XmlRpcTransportFactory factory = new XmlRpcTransportFactory() { public XmlRpcTransport getTransport() { return new XmlRpcSunHttpTransport(client) { private URLConnection conn; @Override protected URLConnection newURLConnection(URL pURL) throws IOException { conn = super.newURLConnection(pURL); return conn; } @Override protected void initHttpHeaders(XmlRpcRequest pRequest) throws XmlRpcClientException { super.initHttpHeaders(pRequest); setCookies(conn); } @Override protected void close() throws XmlRpcClientException { getCookies(conn); } private void setCookies(URLConnection pConn) { String cookieString = ""; for (String cookieName : cookies.keySet()) { cookieString += "; " + cookieName + "=" + cookies.get(cookieName); } if (cookieString.length() > 2) { setRequestHeader("Cookie", cookieString.substring(2)); } } private void getCookies(URLConnection pConn) { String headerName = null; for (int i = 1; (headerName = pConn.getHeaderFieldKey(i)) != null; i++) { if (headerName.equals("Set-Cookie")) { String cookie = pConn.getHeaderField(i); cookie = cookie.substring(0, cookie.indexOf(";")); String cookieName = cookie.substring(0, cookie.indexOf("=")); String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length()); cookies.put(cookieName, cookieValue); } } } }; } }; client.setTransportFactory(factory); client.setConfig(config); } } } /** * Get the parameters of this call, that were set using setParameter method * @return Array with a parameter hashmap */ protected Object[] getParameters() { return new Object[] {parameters}; } /** * Set parameter to a given value * @param name Name of the parameter to be set * @param value A value of the parameter to be set * @return Previous value of the parameter, if it was set already. */ public Object setParameter(String name, Object value) { return this.parameters.put(name, value); } /** * Executes the XML-RPC call to Bugzilla instance and returns a map with result * @return A map with response * @throws XmlRpcException */ public Map execute() throws XmlRpcException { return (Map) client.execute(command, this.getParameters()); } } 

通过提供自定义构造函数和添加方法来覆盖类:

 public class BugzillaLoginCall extends BugzillaAbstractRPCCall { /** * Create a Bugzilla login call instance and set parameters */ public BugzillaLoginCall(String username, String password) { super("User.login"); setParameter("login", username); setParameter("password", password); } /** * Perform the login action and set the login cookies * @returns True if login is successful, false otherwise. The method sets Bugzilla login cookies. */ public static boolean login(String username, String password) { Map result = null; try { // the result should contain one item with ID of logged in user result = new BugzillaLoginCall(username, password).execute(); } catch (XmlRpcException ex) { Logger.getLogger(BugzillaLoginCall.class.getName()).log(Level.SEVERE, null, ex); } // generally, this is the place to initialize model class from the result map return !(result == null || result.isEmpty()); } }