From 3d70edff36d9fcda006343149ab5ceb59a38e428 Mon Sep 17 00:00:00 2001 From: Hyun Jeong Date: Wed, 17 Dec 2014 18:59:53 +0900 Subject: [PATCH] [#123] added some APIs to testapp --- examples/testapp/pom.xml | 7 +++ .../controller/HttpClient4Controller.java | 47 +++++++--------- .../testapp/controller/SimpleController.java | 18 ++++++ .../service/remote/AbstractRemoteService.java | 55 +++++++++++++++++++ .../CloseableHttpClientRemoteService.java | 22 ++++++++ .../testapp/service/remote/RemoteService.java | 10 ++++ .../pinpoint/testapp/util/Description.java | 12 ++++ .../src/main/resources/servlet-context.xml | 7 +++ 8 files changed, 152 insertions(+), 26 deletions(-) create mode 100644 examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/controller/SimpleController.java create mode 100644 examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/AbstractRemoteService.java create mode 100644 examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/CloseableHttpClientRemoteService.java create mode 100644 examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/RemoteService.java create mode 100644 examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/util/Description.java diff --git a/examples/testapp/pom.xml b/examples/testapp/pom.xml index 46f1fc409..9e0927be9 100644 --- a/examples/testapp/pom.xml +++ b/examples/testapp/pom.xml @@ -117,6 +117,13 @@ httpcore 4.3.3 + + + + com.fasterxml.jackson.core + jackson-databind + 2.4.4 + diff --git a/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/controller/HttpClient4Controller.java b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/controller/HttpClient4Controller.java index bb86dd87c..b5d229600 100644 --- a/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/controller/HttpClient4Controller.java +++ b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/controller/HttpClient4Controller.java @@ -1,44 +1,39 @@ package com.navercorp.pinpoint.testapp.controller; -import java.net.URI; -import java.net.URISyntaxException; +import java.util.Map; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.utils.URIBuilder; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import com.navercorp.pinpoint.testapp.service.remote.RemoteService; +import com.navercorp.pinpoint.testapp.util.Description; + @Controller @RequestMapping("/httpclient4") public class HttpClient4Controller { - @RequestMapping("/queryGoogle") + private static final String DEFAULT_GET_GEOCODE_ADDRESS = "Gyeonggi-do, Seongnam-si, Bundang-gu, Jeongja-dong, 178-1"; + private static final String DEFAULT_GET_TWITTER_URL_COUNT_URL = "http://www.naver.com"; + + @Autowired + @Qualifier("closeableHttpClientRemoteService") + RemoteService remoteService; + + @RequestMapping("/getGeoCode") + @Description("") @ResponseBody - public String queryGoogle() throws Exception { - CloseableHttpClient httpClient = HttpClients.createMinimal(); - HttpGet httpGet = new HttpGet(buildQueryUri("www.google.com", "pinpoint")); - httpClient.execute(httpGet); - return "queryGoogle"; + public Map getGeoCode(@RequestParam(defaultValue = DEFAULT_GET_GEOCODE_ADDRESS, required = false) String address) throws Exception { + return remoteService.getGeoCode(address); } - @RequestMapping("/queryNaver") + @RequestMapping("/getTwitterUrlCount") @ResponseBody - public String queryNaver() throws Exception { - CloseableHttpClient httpClient = HttpClients.createMinimal(); - HttpGet httpGet = new HttpGet(buildQueryUri("www.naver.com", "pinpoint")); - httpClient.execute(httpGet); - return "queryNaver"; + public Map getTwitterUrlCount(@RequestParam(defaultValue = DEFAULT_GET_TWITTER_URL_COUNT_URL, required = false) String url) throws Exception { + return remoteService.getTwitterUrlCount(url); } - private URI buildQueryUri(String host, String queryParam) throws URISyntaxException { - return new URIBuilder() - .setScheme("http") - .setHost(host) - .setPath("/search") - .setParameter("q", queryParam) - .build(); - } } diff --git a/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/controller/SimpleController.java b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/controller/SimpleController.java new file mode 100644 index 000000000..c298a825e --- /dev/null +++ b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/controller/SimpleController.java @@ -0,0 +1,18 @@ +package com.navercorp.pinpoint.testapp.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.navercorp.pinpoint.testapp.util.Description; + +@Controller +public class SimpleController { + + @RequestMapping("/getCurrentTimestamp") + @Description("Returns the current timestamp of the server (in ms).") + @ResponseBody + public Long getCurrentTimestamp() { + return System.currentTimeMillis(); + } +} diff --git a/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/AbstractRemoteService.java b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/AbstractRemoteService.java new file mode 100644 index 000000000..7c3d68c45 --- /dev/null +++ b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/AbstractRemoteService.java @@ -0,0 +1,55 @@ +package com.navercorp.pinpoint.testapp.service.remote; + +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URLEncoder; +import java.util.Map; + +import org.apache.commons.codec.CharEncoding; +import org.apache.http.client.utils.URIBuilder; +import org.springframework.web.client.RestClientException; + +public abstract class AbstractRemoteService implements RemoteService { + + @Override + public final Map getGeoCode(String address) { + try { + String encodedAddress = URLEncoder.encode(address, CharEncoding.UTF_8); + URI uri = new URIBuilder() + .setScheme("http") + .setHost("maps.googleapis.com") + .setPath("/maps/api/geocode/json") + .setParameter("address", encodedAddress) + .setParameter("sensor", "false") + .build(); + @SuppressWarnings("unchecked") + Map response = this.getForObject(uri, Map.class); + return response; + } catch (UnsupportedEncodingException e) { + throw new RestClientException(e.getMessage()); + } catch (URISyntaxException e) { + throw new RestClientException(e.getMessage()); + } + } + + @Override + public Map getTwitterUrlCount(String url) { + try { + URI uri = new URIBuilder() + .setScheme("http") + .setHost("urls.api.twitter.com") + .setPath("/1/urls/count.json") + .setParameter("url", url) + .build(); + @SuppressWarnings("unchecked") + Map response = this.getForObject(uri, Map.class); + return response; + } catch (URISyntaxException e) { + throw new RestClientException(e.getMessage()); + } + } + + protected abstract T getForObject(URI url, Class responseType); + +} diff --git a/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/CloseableHttpClientRemoteService.java b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/CloseableHttpClientRemoteService.java new file mode 100644 index 000000000..aac621521 --- /dev/null +++ b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/CloseableHttpClientRemoteService.java @@ -0,0 +1,22 @@ +package com.navercorp.pinpoint.testapp.service.remote; + +import java.net.URI; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +@Service +public final class CloseableHttpClientRemoteService extends AbstractRemoteService { + + @Autowired + @Qualifier("closeableHttpClientRestTemplate") + private RestTemplate restTemplate; + + @Override + protected T getForObject(URI url, Class responseType) { + return this.restTemplate.getForObject(url, responseType); + } + +} diff --git a/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/RemoteService.java b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/RemoteService.java new file mode 100644 index 000000000..a4e7c4319 --- /dev/null +++ b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/service/remote/RemoteService.java @@ -0,0 +1,10 @@ +package com.navercorp.pinpoint.testapp.service.remote; + +import java.util.Map; + +public interface RemoteService { + + public Map getGeoCode(String address); + + public Map getTwitterUrlCount(String url); +} diff --git a/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/util/Description.java b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/util/Description.java new file mode 100644 index 000000000..6c71fbbba --- /dev/null +++ b/examples/testapp/src/main/java/com/navercorp/pinpoint/testapp/util/Description.java @@ -0,0 +1,12 @@ +package com.navercorp.pinpoint.testapp.util; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Description { + String value(); +} diff --git a/examples/testapp/src/main/resources/servlet-context.xml b/examples/testapp/src/main/resources/servlet-context.xml index 145d7edfa..a5dd6d0f2 100644 --- a/examples/testapp/src/main/resources/servlet-context.xml +++ b/examples/testapp/src/main/resources/servlet-context.xml @@ -10,6 +10,13 @@ + + + + + + +