Rien de spécial
Le blog de Régis

Maven est formidable

Maven, le gentoo-portage pour Java

J’ai découvert Maven il y a (trop) peu longtemps.

C’est assez génial, ça offre des archetypes de projet pour aller plus vite, un peu comme les scaffolds de Ruby on rails. Et ensuite ça gère la dépendence des jars, un peu comme une bonne distribution linux.

m2settings

Maven stocke les paramètres d’un utilisateur dans un fichier de configuration XML. Aujourd’hui, j’ai décidé de m’amuser à écrire une petite interface graphique pour modifier ce fichier…; Mon projet va s’appeler m2settings

Quel outil de mapping Java<->XML ?

Je ne me pose pas trop de questions, je vais faire ça en Java. Je commence par le lien JavaBean<->XML. Comme toujours en Java, il y a une pléthore de possibilité:

Je décide donc de commencer avec Xstream.

On démarre avec XStream

Je crée donc un projet Java, compatible avec eclipse

<br /> mvn create<br /> mvn eclipse:eclipse<br />

En pratique, voilà ce que je veux faire:

[java]

package org.sourceforge.m2settings.beans;

import org.sourceforge.m2settings.XMLBinder;

import junit.framework.TestCase;

public class XMLBinderTest extends TestCase {

private XMLBinder xmlbind;

private static final String XML_PROXY =

« \n true\n http\n user\n secretpwd\n 8080\n proxy.intra\n *.intra\n myproxy-id\n« ;

private static final Proxy proxy =

new Proxy(true, « http », « user »,

« secretpwd », « 8080 », « proxy.intra », « *.intra », « myproxy-id »);;

@Override

protected void setUp() throws Exception {

xmlbind = new XMLBinder();

}

/**

*/

public void testMarshallProxy() {

assertEquals(XML_PROXY, xmlbind.toXML(proxy));

}

/**

*

*/

public void testUnmarshallProxy() {

Proxy p=(Proxy) xmlbind.fromXML(XML_MIRROR);

assertEquals(proxy, p);

}

}

[/java]

Pour résoudre mes erreurs de compilation, il me fau vite écrire mon xmlbind qui étant Xstream:

[java]

package org.sourceforge.m2settings;

import org.sourceforge.m2settings.beans.Mirror;

public class XMLBinder extends XStream {

public XMLBinder() {

// does not require XPP3 library

// uses standard DOM library instead

super(new DomDriver());

this.alias(« proxy », Proxy.class);

}

}

[/java]

Ce qui m’oblige enfin à écrire le bean en question:

[java]

package org.sourceforge.m2settings.beans;

/**

*

*/

public class Proxy {

/**

*/

private boolean active;

private String protocol; // TODO enumeration

private String username;

private String password;

private String port;

private String host;

/**

*/

private String nonProxyHosts;

private String id;

public Proxy(Boolean active, String protocol, String username,

String password, String port, String host, String nonProxyHosts,

String id) {

setActive(active);

setProtocol(protocol);

setUsername(username);

setPassword(password);

setPort(port);

setHost(host);

setNonProxyHosts(nonProxyHosts);

setId(id);

}

@Override

public boolean equals(Object obj) {

if (obj.getClass() != Proxy.class)

return false;

Proxy p = (Proxy) obj;

return (active == p.isActive() && protocol == p.getProtocol()

&& username == p.getUsername() && password == p.getPassword()

&& port == p.getPort() && host == p.getHost()

&& nonProxyHosts == p.getNonProxyHosts() && id == p.getId());

}

}

[/java]

Il faut écrite tous ses beans à la main?

Tout cela marche très bien, mais il faut écrire tous les beans…;

Alors je passe à Castor, qui sait faire cela à partir de schéma XML. Et justement, j’ai le XSD de settings.

La suite au prochain épisode!