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