Java tutorial
/******************************************************************************* * Copyright (c) 2005, 2014 * * Licensed under the Apache License, Version 2.0 (the "License"); *******************************************************************************/ package com.xyxy.platform.examples.showcase.functional.rest; import static org.assertj.core.api.Assertions.*; import java.io.IOException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpRequest; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; import com.xyxy.platform.examples.showcase.functional.BaseFunctionalTestCase; import com.xyxy.platform.examples.showcase.webservice.rest.UserDTO; import com.xyxy.platform.modules.core.test.category.Smoke; import com.xyxy.platform.modules.core.web.Servlets; import com.google.common.collect.Lists; /** * Rest Service? * 1. exchange()Header??? * 2. JDK HttpConnectionApache HttpClient4? * 3. ?JSONXML?? * 4. ?Shiro?HttpBasic? * * */ public class UserRestFT extends BaseFunctionalTestCase { private static String resourceUrl = baseUrl + "/api/secure/v1/user"; private RestTemplate jdkTemplate; private RestTemplate httpClientRestTemplate; private HttpComponentsClientHttpRequestFactory httpClientRequestFactory; @Before public void initRestTemplate() { // JDK Connection jdkTemplate = new RestTemplate(); // (optional)20 ((SimpleClientHttpRequestFactory) jdkTemplate.getRequestFactory()).setConnectTimeout(20000); ((SimpleClientHttpRequestFactory) jdkTemplate.getRequestFactory()).setReadTimeout(20000); // HttpClient4.0 httpClientRestTemplate = new RestTemplate(); httpClientRequestFactory = new HttpComponentsClientHttpRequestFactory(); // (optional)20 httpClientRequestFactory.setConnectTimeout(20000); httpClientRestTemplate.setRequestFactory(httpClientRequestFactory); // ?HttpBasic HeaderInterceptor ClientHttpRequestInterceptor interceptor = new HttpBasicInterceptor("admin", "admin"); httpClientRestTemplate.setInterceptors(Lists.newArrayList(interceptor)); } @After public void destoryClient() throws Exception { // HttpClient4 httpClientRequestFactory.destroy(); } /** * exchange()?Headers. * xml??. * jdk connection. */ @Test public void getUserAsXML() { // Http Basic? HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set(com.google.common.net.HttpHeaders.AUTHORIZATION, Servlets.encodeHttpBasic("admin", "admin")); System.out.println("Http header is" + requestHeaders); HttpEntity<?> requestEntity = new HttpEntity(requestHeaders); try { HttpEntity<UserDTO> response = jdkTemplate.exchange(resourceUrl + "/{id}.xml", HttpMethod.GET, requestEntity, UserDTO.class, 1L); assertThat(response.getBody().getLoginName()).isEqualTo("admin"); assertThat(response.getBody().getName()).isEqualTo("?"); assertThat(response.getBody().getTeamId()).isEqualTo(1); // ?XML HttpEntity<String> xml = jdkTemplate.exchange(resourceUrl + "/{id}.xml", HttpMethod.GET, requestEntity, String.class, 1L); System.out.println("xml output is " + xml.getBody()); } catch (HttpStatusCodeException e) { fail(e.getMessage()); } } /** * ClientHttpRequestInterceptorheader, see #initRestTemplate() * json??. * Apache Http client4. */ @Test @Category(Smoke.class) public void getUserAsJson() { UserDTO user = httpClientRestTemplate.getForObject(resourceUrl + "/{id}.json", UserDTO.class, 1L); assertThat(user.getLoginName()).isEqualTo("admin"); assertThat(user.getName()).isEqualTo("?"); assertThat(user.getTeamId()).isEqualTo(1); try { // ?JSON String json = httpClientRestTemplate.getForObject(resourceUrl + "/{id}.json", String.class, 1L); System.out.println("json output is " + json); } catch (HttpStatusCodeException e) { fail(e.getMessage()); } } /** * ?ShiroHttpBasic? */ @Test public void authWithHttpBasic() { // Http Basic? HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set(com.google.common.net.HttpHeaders.AUTHORIZATION, Servlets.encodeHttpBasic("admin", "wrongpassword")); HttpEntity<?> requestEntity = new HttpEntity(requestHeaders); try { jdkTemplate.exchange(resourceUrl + "/{id}.xml", HttpMethod.GET, requestEntity, UserDTO.class, 1L); fail("Get should fail with error username/password"); } catch (HttpStatusCodeException e) { assertThat(e.getStatusCode()).isEqualTo(HttpStatus.UNAUTHORIZED); } } /** * ?HttpBasicHeaderInterceptor */ public static class HttpBasicInterceptor implements ClientHttpRequestInterceptor { private final String user; private final String password; public HttpBasicInterceptor(String user, String password) { this.user = user; this.password = password; } @Override public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { request.getHeaders().set(com.google.common.net.HttpHeaders.AUTHORIZATION, Servlets.encodeHttpBasic(user, password)); return execution.execute(request, body); } } }