如何从Java应用程序连接到REST Web服务

时间:2013-02-06 23:51:06

标签: java web-services rest

我必须测试EPA的数据交换Web服务。由于很难创建100个帐户,建筑物,能源使用分布等,我想自动化该过程。我搜索了代码示例来做一个简单的GET。我找到的最好的是http://pic.dhe.ibm.com/infocenter/tivihelp/v10r1/index.jsp?topic=%2Fcom.ibm.taddm.doc_7.2%2FSDKDevGuide%2Ft_cmdbsdk_restapi_java.html。我为了我的目的修改了这个。

  1. 凭证书,该行正在抛出错误
  2. 没有证书(注释掉),连接超时并在getResponseCode()处抛出异常。
  3. 我不确定:

    1. 提交证书的正确方法是什么
    2. 如果我正确发送凭据
    3. 如果我的代码不完整,那么应用程序无法获取响应代码
    4. 我应该使用Eclipse EE(使用Web Tools Platform)并创建Project> Web应用程序,而不是Eclipse Juno(没有WTP)
    5. 提前谢谢。

          package Package1;
      
      import java.io.*;
      import java.util.*;
      import java.lang.StringBuffer;
      import java.net.*;
      import java.net.HttpURLConnection;
      import javax.net.ssl.HttpsURLConnection;
      
      public class Class1 {
      
      
          public static void main (String args[]){
      
              try{            
      
              // set this property to the location of the cert file
               System.setProperty("javax.net.ssl.trustStore","C:/Documents and Settings/bhattdr/Desktop/-.energystar.gov.der");   
      
      
              String username = "yy777PPP";
              String password = "yy777PPP";
              String userpass = "";
      
              URL url = new URL("https://portfoliomanager.energystar.gov/wstest/account");
      //      URLConnection uc = url.openConnection();
              HttpsURLConnection uc = (HttpsURLConnection) url.openConnection();
      
              userpass = username + ":" + password;
              String basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes());
      
              System.out.println("sending request...");
      
              uc.setRequestMethod("GET");
              uc.setAllowUserInteraction(false);
              uc.setDoOutput(true);
              uc.setRequestProperty( "Content-type", "text/xml" );
              uc.setRequestProperty( "Accept", "text/xml" );
      
              uc.setRequestProperty ("Authorization", basicAuth);
      
              System.out.println(uc.getRequestProperties());
      
      
      //        uc.setRequestProperty( "authorization", "Basic " + encode("administrator:collation"));
      
      //        Map headerFields = uc.getHeaderFields();
      //        System.out.println("header fields are: " + headerFields);
      
      
              int rspCode = uc.getResponseCode();
      
              if (rspCode == 200) {
                  InputStream is = uc.getInputStream();
                  InputStreamReader isr = new InputStreamReader(is);
                  BufferedReader br = new BufferedReader(isr);
      
                  String nextLine = br.readLine();
                  while (nextLine != null) {
                      System.out.println(nextLine);
                      nextLine = br.readLine();
                  }
      
              }
              }
      
              catch(IOException e) { 
                  e.printStackTrace();
              }
      
          }
      }
      

3 个答案:

答案 0 :(得分:0)

你不需要自己动手。

答案 1 :(得分:0)

您正在使用DER文件作为密钥存储区,Java Crypto通常不支持该文件。使用keytool创建JKS或其他一些受支持的密钥库,然后引用它。

答案 2 :(得分:0)

在所有REST-Clients框架中...您尝试过OpenFeign吗?它是NetFlix堆栈中的组件。易于使用并适合所有其他 NetFlix的组件。

尝试一下:https://github.com/OpenFeign/feign