[Resolvido]MessageBodyReader não sendo encontrado em Teste Junit de webservice

1 resposta
T

Olá Pessoal,

Tenho alguns serviços Rest operando normalmente, e resolvi fazer alguns testes automatizados; porém ocorreu um probleminha.

@Test
	public void testeDandoErro() throws Exception {

		ClientResponse<Areas> response = new ClientRequest(AREA_CONTEXT).accept(MediaType.APPLICATION_XML).get(Areas.class);

		Assert.assertEquals(200, response.getStatus());

		Areas areas = response.getEntity(Areas.class);

		Assert.assertNotNull(areas);
		Assert.assertNotNull(areas.getAreas());
	}
quando executa o "response.getEntity();" dá a exceção
org.jboss.resteasy.client.ClientResponseFailure: Unable to find a MessageBodyReader of content-type application/xml and type null
	at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:523)
	at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:514)
	at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:415)
	at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:377)
	at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:350)
	at AreaServiceIT.test(AreaServiceIT.java:34) ...

Note que isto só ocorre neste cenário de teste automatizado, quando executado manualmente, funciona normalmente tanto o marshal quanto o unmarshal pelo JAXB;

Segue a gambiarra que fiz onde funciona normalmente:
@Test
	public void testeFuncionando() throws Exception {

		ClientResponse<String> response = new ClientRequest(AREA_CONTEXT).accept(MediaType.APPLICATION_XML).get(String.class);

		Assert.assertEquals(200, response.getStatus());

		Areas areas = JAXB.unmarshal(new StringReader(response.getEntity()),Areas.class);

		Assert.assertNotNull(areas);
		Assert.assertNotNull(areas.getAreas());
	}

Alguém sabe dizer o porquê?

Mais informações:

Usando jboss as 7.1.1...
<dependency>
			<groupId>org.jboss.spec.javax.ws.rs</groupId>
			<artifactId>jboss-jaxrs-api_1.1_spec</artifactId>
			<scope>provided</scope>
			<version>1.0.1.Final</version>
		</dependency> 
<dependency>
			<groupId>org.jboss.resteasy</groupId>
			<artifactId>resteasy-jaxrs</artifactId>
			<version>2.3.2.Final</version>
			<scope>test</scope>
		</dependency>

Não vou postar as implementações porque tudo está funcionando normalmente, só nesse cenário de teste com a própria api do restEasy mesmo.

1 Resposta

T

Faltava isso

<dependency>
			<groupId>org.jboss.resteasy</groupId>
			<artifactId>resteasy-jaxb-provider</artifactId>
			<version>2.3.2.Final</version>
			<scope>runtime</scope>
		</dependency>

Resumindo o provider jaxb do jax-rs não é encontrado quando usando a api direta restEasy;

Criado 3 de junho de 2013
Ultima resposta 4 de jun. de 2013
Respostas 1
Participantes 1