- どんなInterfaceを持っているのか?
- これは、TracのURLの末尾に「/xmlrpc」を付加してリクエストすると表示される。もちろん、Trac側でXML-RPCPluginの導入が必要!
- mavenでプロジェクトを作成し、apache xmlrpc-clientへの依存を追加する
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.blogspot.shin1o</groupId> <artifactId>studyTrac</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>studyTrac</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.apache.xmlrpc</groupId> <artifactId>xmlrpc-client</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> </dependencies> </project>
- Java側は以下のようなカンジで操作する。
@Test public void test01() throws MalformedURLException, XmlRpcException { XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); config.setBasicUserName(USERNAME); config.setBasicPassword(PASSWORD); config.setServerURL(new URL(TRACRPCURL)); XmlRpcClient client = new XmlRpcClient(); // "system.listMethods"APIでAPIの一覧を取得する。 String apiName = "system.listMethods"; // 引数は不要。 Object[] params = new Object[] {}; Object[] apis = (Object[]) client.execute(config, apiName, params); for (Object api : apis) { // "system.methodHelp"APIでAPIのHelpを取得する。 apiName = "system.methodHelp"; // APIの名称を引数に設定する。 params = new Object[] { api }; Object help = client.execute(config, apiName, params); System.out.println("--" + api + " help--"); System.out.println(help); // "system.methodSignature"APIでAPIの引数を取得する。 apiName = "system.methodSignature"; Object[] signatures = (Object[]) client.execute(config, apiName, params); System.out.println("--" + api + " sigunatures--"); for (Object signature : signatures) { System.out.println(signature); } } }
これでxmlrpcのページで出力されているような、使用できる全APIとその引数、が出力できる。--ticket.create help-- int ticket.create(string summary, string description, struct attributes={}, boolean notify=False) Create a new ticket, returning the ticket ID. --ticket.create sigunatures-- int,string,string int,string,string,struct int,string,string,struct,boolean --ticket.changeLog help-- struct ticket.changeLog(int id, int when=0) Return the changelog as a list of tuples of the form (time, author, field, oldvalue, newvalue, permanent). While the other tuple elements are quite self-explanatory, the `permanent` flag is used to distinguish collateral changes that are not yet immutable (like attachments, currently). --ticket.changeLog sigunatures-- struct,int struct,int,int
2008年3月31日月曜日
Trac XMLRPCをJavaから使用する
最近のエントリでTracで不便している事について書いたけど、これはTracに何かかぶせる事でなんとかなるんじゃないか、と。データ自体はTracのものをそのまま使用するが、外からかぶせる側でTicketの関連を保持するだけのDatabaseを独自にもってそれをうまく見せればいいだけかもしれない。
というワケでJavaからXMLRPCでTracを操作する方法について少しだけメモ。TracだしPythonがいいのかもしれんが、Pythonは興味が無いし、そもそもJava好きなのでJavaで。しかも、手を抜くためにApache XMLRPC-clientを使用するという事で。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿