HttpURLConnectionを用意すればHttpヘッダやエンドポイントを指定すれば利用できますが、WSCに用意されている仕組みでRest APIを利用できます。
サンプルコード
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.zip.GZIPInputStream; import org.codehaus.jackson.map.ObjectMapper; import com.sforce.soap.partner.LoginResult; import com.sforce.soap.partner.PartnerConnection; import com.sforce.ws.ConnectorConfig; import com.sforce.ws.transport.JdkHttpTransport; public class RestSample { public static void main(String[] args) throws Exception{ //接続用情報 String partnerEndpoint = "https://login.salesforce.com/services/Soap/u/44.0"; String username = "sampleuser@sample.user"; String password = "samplepassword"; ConnectorConfig pConfig = new ConnectorConfig(); pConfig.setServiceEndpoint(partnerEndpoint); pConfig.setManualLogin(true); PartnerConnection pCon = new PartnerConnection(pConfig); //ログイン LoginResult lr = pCon.login(username, password); String serverUrl = lr.getServerUrl(); String sessionId = lr.getSessionId(); String url = serverUrl.substring(0, serverUrl.indexOf("/services")); url = url + "/services/data"; HashMap<String, String> httpHeaders = new HashMap<String, String>(); httpHeaders.put("Accept-Charset", "UTF-8"); httpHeaders.put("Content-Type", "application/json"); httpHeaders.put("Authorization", "Bearer " + sessionId); httpHeaders.put("Accept", "application/json"); //Rest用のコネクションを作成 HttpURLConnection resthttp = JdkHttpTransport.createConnection( pConfig, new URL(url), httpHeaders, true); resthttp.setRequestMethod("GET"); resthttp.setInstanceFollowRedirects(true); BufferedReader br = new BufferedReader(new InputStreamReader( new GZIPInputStream(resthttp.getInputStream()),"utf8")); StringWriter writer = new StringWriter(); while(true) { String line = br.readLine(); if(line == null) { break; } writer.append(line); } //返却されたJson文字列 String jsonStr = writer.toString(); //Jsonのパース ObjectMapper mapper = new ObjectMapper(); Object o = mapper.readValue(jsonStr,Object.class); } }
用意されている関数
サンプルコードの青文字の太字箇所で、JdkHttpTransport.createConnection を使うことでWSCが少し便利にしてくれたHttpURLConnection を利用することができます。
便利になるのが、ConnectorConfigでhttpプロキシを指定していた場合は、JdkHttpTransport.createConnectionで作成したHttpURLConnection はそのままConnectorConfigのhttpプロキシを使用した通信となります。
※HttpURLConnectionをopenする際に別途httpプロキシを指定しなくても良くなります。
そして、JdkHttpTransport.createConnectionの、最後の引数に true を指定することでgzip圧縮した通信設定をしてくれます。(これもhttpヘッダで自分で指定すればいいだけですが・・)
とはいえ、多少なりともコードは少なります。
最後に
WSCも以前のバージョンでは、PartnerConnectionやMetadataConnectionのように、RestConnectionがあったのですが、いつの間にかなくなっていました。
そして、以前のバージョンではJson用ライブラリがGsonだったのですが、いつの間にかJacksonに変更されています。
WSCで利用するバージョンによって中身が違うので気を付けないといけないなーと思いました。