【问题标题】:Is there a java api to access bugzilla? [closed]是否有访问 bugzilla 的 java api? [关闭]
【发布时间】:2010-10-12 10:04:52
【问题描述】:

是否有(独立的!)java api 将 XML-RPC 接口包装到 bugzilla?我不想为它编写自己的 api,而且我实际上找不到执行此操作的库(并且仅此)。

更新:

我正在寻找类似的东西http://oss.dbc.dk/bugzproxy/ 仅用 Java 编写

【问题讨论】:

    标签: java api xml-rpc bugzilla


    【解决方案1】:
    【解决方案2】:

    我知道这是一个有点旧的线程,但很有可能有相同问题的人会在这里登陆,我想分享一篇博客文章,我写了一篇关于我发现用于访问 Bugzilla 的四个 Java 客户端库:J2Bugzilla, B4J(Java 版 Bugzilla)、Bugzilla 库、LightingBugAPI。

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

    最好的问候, 难陀罗

    【讨论】:

    • 这是一个很好的概述,不幸的是大多数库都不完整。
    【解决方案3】:

    Mylyn 可能是您的不错选择。

    如果您需要更简单的设置或更好地控制事情的发生方式,您可以编写自己的 XML-RPC 调用来调用 Bugzilla Web 服务接口。我已经在我的博客上总结了这个过程:Chat to Bugzilla from Java using Apache XML-RPC.

    总结一下:

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

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

    /**
     * @author joshis_tweets
     */
    public class BugzillaAbstractRPCCall {
    
        private static XmlRpcClient client = null;
    
        // Very simple cookie storage
        private final static LinkedHashMap<String, String> cookies = new LinkedHashMap<String, String>();
    
        private HashMap<String, Object> parameters = new HashMap<String, Object>();
        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());
        }
    
    }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-03-28
              • 1970-01-01
              • 2010-10-11
              • 1970-01-01
              • 2015-12-04
              相关资源
              最近更新 更多