2016-08-25 19 views
0

私はJava URLクラスを使用してWebサービスを呼び出しています。私は以下のコードを使用しています。SOAP応答メッセージを取得できません

public void makeHttpsCall(URL url, File file, String outputpath){ 
HostnameVerifier hv = new HostnameVerifier() { 
      public boolean verify(String hostname, SSLSession session) { 
       return true; 
      } 
     }; 
    try { 
     SSLContext sc = SSLContext.getInstance("SSL"); 
     sc.init(null, util.disableCertificateValidation(), 
       new SecureRandom()); 
     HttpsURLConnection 
       .setDefaultSSLSocketFactory(sc.getSocketFactory()); 
     HttpsURLConnection.setDefaultHostnameVerifier(hv); 
     URLConnection connection = url.openConnection(); 
     HttpsURLConnection httpsConn = (HttpsURLConnection) connection; 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       new FileInputStream(file), Charset.forName("ISO-8859-1"))); 
     StringBuilder builder = new StringBuilder(); 
     String aux = ""; 
     while ((aux = in.readLine()) != null) { 
      builder.append(aux); 
     } 
     String requestContent = builder.toString(); 
     in.close(); 
     System.out.println(requestContent); 
     byte[] b = requestContent.getBytes(Charset.forName("UTF-8")); 

     httpsConn.setConnectTimeout(15000); 
     httpsConn.setRequestProperty("Content-Length", 
       String.valueOf(b.length)); 
     httpsConn.setRequestProperty("Content-Type", 
       "text/xml; charset=ISO-8859-1"); 
     httpsConn.setRequestMethod("POST"); 
     httpsConn.setDoOutput(true); 
     httpsConn.setDoInput(true); 
     httpsConn.setReadTimeout(15000); 
     OutputStream out = httpsConn.getOutputStream(); 
     out.write(b); 
     out.close(); 

     System.out.println("Before geinputstream"); 
     int statusCode = httpsConn.getResponseCode(); 

     System.out.println("Response code : " + statusCode); 
     // System.out.println("Error stream has value"); 

     if (statusCode != 200) { 
      BufferedReader br_err = null; 

      br_err = new BufferedReader(new InputStreamReader(
        httpsConn.getErrorStream())); 
      String err_response = ""; 
      String one_char; 
      while ((one_char = br_err.readLine()) != null) { 
       err_response += one_char; 
      } 
      System.out.println("Error response : " + err_response); 
      httpsConn.disconnect(); 
      JOptionPane.showMessageDialog(null, "Fault response received"); 
      util.writeFaultResponseTofile(httpsConn.getContentType(), 
        outputpath, err_response, file.getName(), logger); 
     } 

     else { 

      InputStreamReader isr = new InputStreamReader(
        httpsConn.getInputStream()); 
      BufferedReader br = new BufferedReader(isr); 
      String responseString = ""; 
      String reponseContent = ""; 
      // Write the SOAP message response to a String. 
      while ((responseString = br.readLine()) != null) { 
       reponseContent = reponseContent + responseString; 
      } 

      if (httpsConn.getResponseMessage().equalsIgnoreCase("ok")) { 
       logger_req.info("Response message OK "); 
       httpsConn.disconnect(); 
       logger_req.info("Response content:" + reponseContent); 

       util.writeResponseTofile(httpsConn.getContentType(), 
         outputpath, reponseContent, file.getName(), logger); 

      } else { 
       logger_req.info("Response message not OK "); 
       JOptionPane.showMessageDialog(null, 
         "Response message from SSB is not OK"); 
      } 
} 

私はウェブサービスにリクエストして応答を受け取ることができます。レスポンスコードが200として、応答が正常に受信されたことを意味しています。しかし、私がSOAP応答をファイルに書き込もうとすると、それは空です。誰にでも助けてください。

答えて

0

ステータスコードを確認した直後に接続を終了しました。あなたはその行をコメントアウトしてみてください - 例えば -

if (httpsConn.getResponseMessage().equalsIgnoreCase("ok")) { 
      logger_req.info("Response message OK "); 
      // httpsConn.disconnect(); 
      logger_req.info("Response content:" + reponseContent); 

      util.writeResponseTofile(httpsConn.getContentType(), 
        outputpath, reponseContent, file.getName(), logger); 

     } else { 
      logger_req.info("Response message not OK "); 
      JOptionPane.showMessageDialog(null, 
        "Response message from SSB is not OK"); 
     } 
+0

私はその行にコメントしてみましたが、それでも問題があります。私はコードをデバッグしましたが、responseStringがnullであるため、ループはwhileループには行きません。SOAPメッセージ応答をStringに書き込みます。 while((responseString = br.readLine())!= null){ reponseContent = reponseContent + responseString; }。 –

+0

3つのもの - 応答に本当に何かがあるかどうかを確認します。ブラウザのプラグインやUIのようないくつかのツールを使用してください。 2つ目は、出力ファイルライターをフラッシュ/クローズしていることを確認することです。 3 - ロガーのログレベルを確認します。 WARN以上を印刷するように設定されている場合は、INFOメッセージを表示しません。 –

+0

Btw、ロガー経由で応答を見ることはできますが、ファイル内でそれを印刷することはできません。これは問題ですか? –

関連する問題