google-http-clientを使ってみた

 とあるWebAPIサービスを提供しているサイトへアクセスするクライアントをjavaで書こうかと、最初はjerseyを試してみたのですが、これがなかなか厄介で、次から次と依存が判明して動作するまで一苦労。。
最終的には、とあるサイト側の認証における制約により、jerseyの仕様ではどうやってもアクセスが出来ない事が判明。。

 失敗の原因は概ね当たりが付いていたので、その辺りに問題が無さそうなライブラリとしてgoogle-http-clientを使うことにしました。
 jerseyで途中まで実装していたものをそのままgoogle-http-clientを使う形に置き換えて疎通確認レベルまでやってみます。

		String jsonStr = "{¥"param1¥" : ¥"XXXXX¥"}";
		HttpTransport transport = new ApacheHttpTransport();
        HttpRequestFactory factory = transport.createRequestFactory();

        GenericUrl url = new GenericUrl("https://aaa.bbb.jp/api/method");
        
        HttpRequest request = factory.buildPostRequest(url, ByteArrayContent.fromString("application/json", jsonStr ));

		request.setConnectTimeout(30 * 1000);
		request.setReadTimeout(60 * 1000);
        HttpHeaders headers = request.getHeaders();
        headers.setContentType("application/json");
        headers.set("x-header1", "xxxxx");
        headers.set("x-header2", "yyyyy");
		String accessToken = generateToken(); //こちらはサイト要件に合わせて別途用意
        headers.setAuthorization(accessToken);
		
		response = request.execute();
		try{
			String respJsonStr = response.parseAsString();
	    } finally {
	        response.disconnect();
	    }
		//パース処理に続く・・・

 google-http-clientは依存が無く構成がとてもシンプルで置き換えた途端に、サックリとAPIアクセスに成功しました。proxy経由でもJVM引数で指定してあっさり通りました。

 細かいところでは、どうも指定したタイムアウトは効いてないような気がしますが、まあ、今回の実務上問題無さそうなので、利用しやすいように整理して実装しようと思います。

 だいぶ経って2019年1月現在、久しぶりに使ってみると、当時のバージョン1.23と現在の1.28では仕様が変わっており上記のままでは動かなくなりました。。