Cette fois, nous allons lui ajouter la capacité à répondre du xml en sérialisant le message avec JAX-B.
Tout d'abord, notre nouvelle réponse sera faite par l'objet suivant :
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Hello {
private String message;
private String name;
public Hello(){
}
public Hello(String message, String name) {
super();
this.message = message;
this.name = name;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
return Objects.hashCode(message, name);
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Hello){
final Hello other = (Hello) obj;
return Objects.equal(message, other.message)
&& Objects.equal(name, other.name);
} else{
return false;
}
}
}
La ressource exposée évolue peu :
@Path("hello")
@Singleton
@Produces(MediaType.APPLICATION_XML)
public class HelloResource {
@Context
UriInfo uriInfo;
@Inject
private HelloService helloService;
@GET
@Path("/{name}")
public Hello reply(@PathParam("name") String name){
return helloService.saysHelloToSomeone(name);
}
@POST
public Response send(String name){
Hello hello = helloService.sendHello(name);
URI uri = uriInfo.getAbsolutePathBuilder().build();
return Response.created(uri).entity(hello).build();
}
public void setHelloService(HelloService helloService) {
this.helloService = helloService;
}
}
Les opérations de marshall/unmarshall sont opérées directement par Jersey lui même.
De même, les tests vont peu évoluer, seul le type de données attendu va changer. Nous aurons par exemple :
@Test
public void shoulReplyHello(){
String name ="Nicolas";
String hello = "Hello "+name;
when(helloServiceMock.saysHelloToSomeone(name)).thenReturn(hello);
ClientResponse response = resource().path("hello").path(name).get(ClientResponse.class);
verify(helloServiceMock).saysHelloToSomeone(name);
assertThat(response.getClientResponseStatus()).isEqualTo(Status.OK);
assertThat(response.getType()).isEqualTo(MediaType.TEXT_PLAIN_TYPE);
assertThat(response.getEntity(String.class)).isEqualTo("Hello Nicolas");
}
Et c'est tout, pour aujourd'hui ...
Bon ok, je reconnais, c'est un peu l'arnaque cet article, il y a peu de choses à faire. Mais n'est ce pas justement ça qui est intéressant, non ?
La prochaine fois, nous terminerons cette ballade autour de Jersey en générant du JSon.
Le code est disponible ici.
Aucun commentaire:
Enregistrer un commentaire