Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Mylyn could be a good choice for you.</p> <p>If you need simpler setup or better control of how things happen, you can write your own XML-RPC calls to Bugzilla web-service interface. I have summarized the process on my blog: <a href="http://indeadend.com/2011/03/05/chat-to-bugzilla-from-java-using-apache-xml-rpc/" rel="nofollow">Chat to Bugzilla from Java using Apache XML-RPC</a>.</p> <p>To sum it up:</p> <ul> <li>get the Apache XML-RPC libs</li> <li>get the Apache HTTP Client from commons (older version)</li> </ul> <p>Then use following class as a base class (it handles cookies etc.) and override it:</p> <pre><code>/** * @author joshis_tweets */ public class BugzillaAbstractRPCCall { private static XmlRpcClient client = null; // Very simple cookie storage private final static LinkedHashMap&lt;String, String&gt; cookies = new LinkedHashMap&lt;String, String&gt;(); private HashMap&lt;String, Object&gt; parameters = new HashMap&lt;String, Object&gt;(); 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() &gt; 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()); } } </code></pre> <p>Override the class by providing custom constructor and by adding methods:</p> <pre><code>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()); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload