`

使用Java调用Mantis提供的webservice, 获得Mantis数据

阅读更多

写在前面

 

如果使用Mantis来管理bug, 项目比较小, 项目比较少的情况下,项目的bug状况还是一目了然,

 

但对于我们公司来说, 现在运行中的mantis有上百个项目, 1W余件bug,

在这种情况下, mantis提供管理功能就稍显薄弱,

比如, Mantis提供的能帮助管理层把握全局的功能比较少, 对bug数据的分析功能也比较少.

 

为此我们希望能够针对mantis做一些自己的工具,

一来,希望能够对上面的功能做一个补充,

二来,也希望透过这个工具, 让所有人都能够, 更方便的了解到他们应该知道的,以及他们想知道的bug信息.

 

我打了一个比方, 这个工具更像是我们的一个朋友, 或者一个很贴心的秘书.

针对bug的各种各样的问题, 我们都可以把答案交给他/她来办~

这些问题包括: 日常的, 例行的, 统计起来枯燥繁琐的, 还有一些靠我们自己不太好办到的....

 

 

明确了目标, 接下来是调查工作

 

为了办到上面的事情, 首先面临的第一步就是如何从mantis中,把bug数据取出来.

我们的做法正如标题那样:

使用Java调用Mantis提供的webservice, 获得Mantis数据

 

MantisBT Frequently Asked Questions 上面, 有下面这样的介绍.

写道
Does MantisBT provide a webservice interface?

See the MantisConnect project which provides a PHP webservice that can be used from any language that supports SOAP webservices. MantisConnect also includes client libraries for .NET, Java and Cocoa.

MantisConnect also includes sample applications that uses the provided client libraries to provide useful tools. This includes an Eclipse plug-in written in Java, a NAnt task to submit MantisBT issues written in .NET, and many others.

MantisConnect now comes as part of the standard MantisBT installation package and can be found under the ‘{$mantis_install_dir}/api/soap’ directory. To see what functionality is currently provided via MantisConnect, check the WSDL available here.

 

就是说,有一个项目叫做MantisConnect, 他可以在server端, 为我们提供webservice服务. 而且这个项目现在已经默认集成到了mantis的安装包中. 也就是这些webservices会随mantis安装自带. 另外这个项目还未我们提供了client端, 方便我们连接这些webservice借口, 包括java, .net, 还有cocoa的.

 

我们来到了MantisConnect 这个项目, 查看了他的许可 , 如下:

写道
There are three levels of license:

■Professional - This license allows distributing an application with MantisConnect client libraries as part of it. It also allows installation of MantisConnect web service on a single website.
■Standard - This license allows the use of MantisConnect client libraries and an installation of the web service on a single website. This license doesn't allow distributing MantisConnect outside the licensed company.
■Free for Open Source - This license allows free usage of MantisConnect client libraries and web service for Mantis instances that ONLY host open source or freeware applications.

 

看来在公司内部使用, 只要不发布他, 没有问题.

 

 

所以下面上来的就是demo

下载MantisConnect client的source包的时候, 里面有对应的单元测试文件.

这个demo及时我参照单元测试抽出来的.

 

 

import java.math.BigInteger;
import java.net.URL;

import org.mantisbt.connect.axis.AccountData;
import org.mantisbt.connect.axis.IssueData;
import org.mantisbt.connect.axis.IssueHeaderData;
import org.mantisbt.connect.axis.MantisConnectLocator;
import org.mantisbt.connect.axis.MantisConnectPortType;

/**
 * see the following links for the document of APIs.
 * http://www.mantisforge.org/dev/phpxref/api/soap/index.html
 * http://www.mantisforge.org/dev/phpxref/nav.html?api/soap/mc_project_api.php.html
 * http://www.mantisforge.org/dev/phpxref/nav.html?api/soap/mc_issue_api.php.html
 */
public class GetDataFromMantisDemo {

	public static void main(String[] args) throws Exception {
		String user = "administrator";
		String pwd = "mypassword";
		URL url = new URL("http://localhost/mantis/api/soap/mantisconnect.php");

		MantisConnectLocator mcl = new MantisConnectLocator();
		MantisConnectPortType portType = mcl.getMantisConnectPort(url);

		BigInteger project_id = new BigInteger("1030");

		// demo 01
		// get a bug by bug_id
		IssueData aIssueData = portType.mc_issue_get(user, pwd, new BigInteger("13547"));
		System.out.println(aIssueData.getId());
		System.out.println(aIssueData.getSummary());

		// demo 02
		// get the account of a project.
		AccountData[] users = portType.mc_project_get_users(user, pwd,project_id, new BigInteger("90"));
		for (AccountData ad : users) {
			System.out.println(ad.getName());
		}

		// demo 03
		// get the issue headers of a project.
		IssueHeaderData[] headers = portType.mc_project_get_issue_headers(user,pwd, project_id, BigInteger.valueOf(1), BigInteger.valueOf(50));
		for (IssueHeaderData header : headers) {
			System.out.println(header.getId() + "\t" + header.getSummary());
		}

		//demo 04
		// get the issues of a project.
		IssueData[] issues = portType.mc_project_get_issues(user, pwd, project_id, BigInteger.valueOf(1), BigInteger.valueOf(10));
		for (IssueData issueData : issues) {
			System.out.println(issueData.getId() + "\t"+ issueData.getStatus().getName() + "\t"+ issueData.getSummary());
		}
	}
}
 

 

最后上的是trouble shooting.

在调上面的程序的时候, 我的确遇到了很多trouble(都是些让人郁闷的问题), 下面说说怎么解决的.

 

首先要确定我们的用户名密码还有url写的没错.

关于url, 我下载的客户端中的build.properties.sample文件里是这样配置的:

http://localhost:8080/mantis-1.1.1/api/soap/mantisconnect.php

但是很多公司的端口可能不是8080,

使用的url名字也很可能不是mantis-1.1.1, 而是形如<mycompanyname><myprojectname>这样的名字.

 

接下来就要搞懂各个函数的参数的意义, 确保你给各个函数传递了正确的参数.

关于参数的意义, 比较遗憾的是: 下载的javadoc中不够详细.

不过还好, 我们可以求助下面的链接.

http://www.mantisforge.org/dev/phpxref/api/soap/index.html
http://www.mantisforge.org/dev/phpxref/nav.html?api/soap/mc_project_api.php.html
http://www.mantisforge.org/dev/phpxref/nav.html?api/soap/mc_issue_api.php.html

 

这些文档是webservices的server端php代码.

因为java client端在包装这些代码的时候使用了相同的方法名字,所以我们可以很容易确认到服务器端对应的php source.

比如下面这段:

写道
mc_project_get_issues( $p_username, $p_password, $p_project_id, $p_page_number, $p_per_page ) X-Ref
No description

从上面的信息一看, mc_project_get_issues的参数意义就一目了然了.

参数的类型就交给编译器,

通过上面方法可以找到你想要的函数, 如果需要上面函数的示例, 参见对应函数的单元测试代码.

 

通常情况下, 故事到这里就差不多该结束了.

因为一般情况下通过上面的步骤, client端的代码应该就没有问题,

而server端的代码是随安装过程自带的, 而且理论上你也应该没有动过他, 所以他也应该没有问题.

但是我的情况没有那么幸运,

因为我们的mantis已经被前仆后继的定制过了.

(如果一个mantis达到了我前面提到的规模, 很多重量级人物必然都知道了他的存在, 然后大家就会提出很多关怀性质的改善意见, 然后自己定制mantis的过程就开始了.....)

 

其中便有两处改动影响到了mc_project_get_issues和mc_project_get_issue_headers这两个方法.

使其不能正常运行, 抛出了很深的异常(如果我把它贴上来, 我想你一定会因为太长而感到郁闷 ^_^).

因为我用java调用mc_project_get_users和mc_issue_get这些方法都没有问题.

所以我确定,

一定是server端的mc_project_get_issues和mc_project_get_issue_headers这两个函数对应的代码出了问题.

 

 

我的解决办法是参照服务器端调试PHP程序 这篇blog, 配置好debug环境,

然后找个入口, 直接debug服务器端对应的php函数, 这些php函数调通了.

webservices调用的异常也自然跟着修正了.

 

 

 

 

分享到:
评论
2 楼 wjason 2012-06-12  
昨天有发现了一个问题,
当我把用于连接soap的账号的语言设置改成中文的时候,soap无法成功
改回英文,便又成功了.
继续把语言改成日语, 成功
再把语言改成bulgarian(据字典说这叫保加利亚语),依然成功

我们在定制mantis的时候,平时主要注重的是英语和日语,简体中文对应和确认都不全
其他语言从来没有对应过.

问题很明显, 出现在简体中文的语言文件上面,
把问题写在这里, 希望对做类似事情的人有所帮助.
1 楼 wjason 2012-06-07  
另外的链接
http://www.mantisbt.org/bugs/api/soap/mantisconnect.php#
http://www.mantisbt.org/bugs/api/soap/mantisconnect.php?wsdl

相关推荐

    mantis 简单使用说明

    本篇将详细讲解Mantis的基本概念、安装与配置,以及如何进行日常使用。 **一、Mantis基本概念** 1. **问题(Issue)**: 在Mantis中,问题指的是软件开发过程中发现的任何错误、需求或建议。每个问题都有唯一的ID,...

    学习mantis

    本文将围绕Mantis的备份与恢复展开,结合Oracle 10G数据库的相关操作,为初学者提供详尽的学习资料。 1. 数据库数据安全的重要性 在数字化时代,数据已成为企业和组织决策的基础。数据安全不仅关乎网络安全,更直接...

    Mantis基本使用教程

    ### Mantis基本使用教程知识点详解 #### 一、Mantis简介 Mantis是一款非常流行的开源缺陷跟踪系统,它主要用于管理软件开发过程中的错误报告、需求变更以及任务分配等。Mantis支持多种数据库,并且可以通过插件扩展...

    mantis1.2.11搭建使用手册

    《Mantis1.2.11搭建与使用详解》 Mantis是一款开源的缺陷跟踪系统,常用于项目管理和软件开发中的问题追踪。本文将详细阐述如何在Linux环境下搭建并使用Mantis1.2.11。 首先,我们需要将Mantis的压缩文件上传至...

    Mantis缺陷管理系统使用手册

    Mantis 缺陷管理系统使用手册 Mantis 缺陷管理系统是一种功能强大且灵活的缺陷跟踪系统,它提供了完善的项目管理、团队协作和缺陷跟踪功能,旨在帮助开发团队和项目经理更好地管理项目中的缺陷和问题。本手册将从...

    使用开源软件 Mantis 实施缺陷跟踪的成功实践

    通过Mantis,团队可以更好地协调工作,确保每个bug都能得到及时处理。 首先,让我们了解Mantis的基本功能: 1. **问题报告**:用户可以通过Mantis的直观界面提交新问题,包括详细描述、复现步骤、影响版本等信息。...

    Mantis提交问题页面响应超慢问题解决

    Mantis 默认添加用户时 Email 提醒设置如下:可以看出很多情况下 Mantis 都是默认发送邮件,如果 Mantis 里面的用户和项目过多且操作频繁时就会有大量的邮件数据产生并写入数据库。 解决问题 解决问题的关键是检查...

    Mantis详细使用教程

    ### Mantis详细使用教程知识点概览 #### 一、Mantis简介及登录流程 - **Mantis**是一款开源的问题跟踪系统,主要用于管理软件缺陷、需求变更等项目中的问题跟踪任务。 - **登录流程**: - 访问Mantis登录界面...

    mantis资源,直接解压使用

    标题提到的"mantis资源,直接解压使用",意味着你得到了一个MantisBT的压缩包,版本为1.2.4,可以直接解压到本地环境中进行安装和使用。下面我们将详细探讨MantisBT的安装、配置和使用。 首先,你需要准备一个合适...

    mantis简介及使用方法

    ### Mantis简介及使用方法详解 #### 一、Mantis概述 Mantis是一款非常流行的开源缺陷跟踪系统,专为软件开发团队提供了一种简便的方法来记录、管理和追踪软件中的问题和缺陷。它不仅具备基本的功能,如缺陷提交、...

    Mantis使用教程

    《Mantis使用教程详解》 Mantis是一款开源的缺陷跟踪系统,广泛应用于软件开发和项目管理中。本教程将深入浅出地介绍如何配置、使用Mantis,帮助用户熟悉其核心功能。 首先,获取Mantis的用户名是使用系统的第一步...

    mantis_Version1.1.8

    此外,Mantis支持多语言,这极大地扩展了其在全球范围内的适用性,使得不同地区的团队成员都能无障碍地使用。 在功能性方面,Mantis Version 1.1.8增加了许多实用的功能。例如,图形报表功能使得管理者能够通过图表...

    mantis自定义字段与使用

    1. **统计分析**:通过自定义字段,您可以收集特定数据,然后使用Mantis的内置报表功能或导出数据进行进一步分析。 2. **自动化流程**:利用自定义字段可以实现某些工作流程的自动化,例如,基于优先级自动分配任务...

    mantis安装配置文档_mantis操作使用相关文档

    Mantis提供了丰富的功能集,包括但不限于: - **项目管理**:允许创建多个项目并为每个项目分配不同的访问权限。 - **错误追踪**:提供强大的错误报告和追踪机制,支持通过Web界面或电子邮件提交错误。 - **自定义...

    Mantis的IIS配置问题

    在IT领域,Mantis是一款广泛使用的开源缺陷跟踪系统,它能有效地帮助开发团队管理软件开发过程中的各种问题和缺陷。然而,在将Mantis部署到IIS(Internet Information Services)服务器时,用户可能会遇到一系列配置...

    Mantis BUG管理系统

    在实际使用中,Mantis提供了一些关键功能: 1. **问题报告**:用户可以详细描述问题,包括标题、描述、严重性、优先级、所属模块等,并附上日志、截图等辅助信息。 2. **分类与优先级**:管理者可以定义问题类别和...

Global site tag (gtag.js) - Google Analytics