2015-12-16 2 views
2

Я пытаюсь написать тест в Джерси Framework Test для службы аутентификации, как показано ниже:Тестирования сообщения в Джерси Framework Test

код услуги:

@Path("/users") 
@Produces(MediaType.APPLICATION_JSON) 
public class AuthenticationServices { 
    @POST 
    @Path("/login") 
    public Response login(LoginRequest loginRequest, @Context HttpServletRequest request) { 
     ...... 
    } 

Jerysey Код испытание:

import java.net.URISyntaxException; 
import javax.ws.rs.client.Entity; 
import javax.ws.rs.core.MediaType; 
import org.json.JSONException; 
import org.junit.Test; 
import com.sun.jersey.api.client.ClientResponse; 
import com.sun.jersey.api.client.WebResource; 
import com.sun.jersey.test.framework.AppDescriptor; 
import com.sun.jersey.test.framework.JerseyTest; 
import com.sun.jersey.test.framework.WebAppDescriptor; 
import com.vs.ant.sensordata.request.LoginRequest; 

public class AuthenticationTest extends JerseyTest{ 
    @Override 
    protected AppDescriptor configure() { 
     return new WebAppDescriptor.Builder("com.vs.ant.sensordata.services") 
           .contextPath("anttailbigdata") 
           .build(); 
    } 

    @Test 
    @Consumes("application/json") 
    public void testLogin() throws JSONException,URISyntaxException { 
     WebResource webResource = client().resource("http://localhost:8082/"); 
     String path = "SensorData/a/users/login"; 
     LoginRequest loginReq = new LoginRequest(); 
     loginReq.setUserId("admin"); 
     loginReq.setPassword("a"); 
     Entity<LoginRequest> loginEntity = Entity.entity(loginReq, MediaType.APPLICATION_JSON); 
     ClientResponse resp = webResource.path(path).post(ClientResponse.class, loginEntity); 
    } 
} 

При попытке выполнить описанную выше проверку, я получаю ниже исключение:

com.sun.jersey.api.client.ClientHandlerException: 
com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class javax.ws.rs.client.Entity, and MIME media type, application/octet-stream, was not found 
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149) 
at com.sun.jersey.api.client.Client.handle(Client.java:648) 
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670) 
at com.sun.jersey.api.client.WebResource.post(WebResource.java:251) 
at com.vs.ant.sensordata.services.AuthenticationTest.testLogin(AuthenticationTest.java:37) 

Я новичок в испытаниях джерси. Не уверен, что это происходит. Пожалуйста помоги.

EDIT: добавлена ​​аннотация @consumes выше метода.

+0

Если это POST api, вы должны потреблять JSON/XML с помощью @Consume и добавлять зависимость jersey-media-moxy в pom.xml – quintin

+0

Даже после добавления @consumes, я получаю то же исключение. – dove4evr

ответ

2

Вы используете тест Джерси 1.x, но Entity был введен только в JAX-RS 2.x, т. Е. Jersey 2.x. Джерси 1.x не имеет понятия, как справиться с этим.

Вместо просто выкладываю сам объект, без любого оберточной Entity, и установить его тип содержимого с помощью метода WebResource#type(..).

LoginRequest loginReq = new LoginRequest(); 
loginReq.setUserId("admin"); 
loginReq.setPassword("a"); 
ClientResponse resp = webResource.path(path) 
     .type(MediaType.APPLICATION_JSON) 
     .post(ClientResponse.class, loginReq); 

Как и в сторону, если вы используете Джерси 1.x, то вы должны избавиться от любых JAX-RS 2.0 зависимостей у вас есть, так что вы не запутаться в том, что вы используете.

Смежные вопросы