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");
}
}
我可以向web服務請求並接收響應。我將響應代碼設置爲200,表示響應已成功接收。但是當我嘗試寫入對文件的SOAP響應時,它是空的。你能請任何人幫忙。
我試過評論該行,但仍存在問題。我調試了代碼,控制不會進入下面的while循環,因爲responseString爲null。//將SOAP消息響應寫入字符串。 ((responseString = br.readLine())!= null){ reponseContent = reponseContent + responseString; }。 –
3件事 - 然後檢查響應中是否真的有東西。使用其他工具,如瀏覽器中的某個插件或soap UI。第二件事 - 確保你正在沖洗/關閉輸出文件編寫器。 3rd - 檢查記錄器的日誌級別。如果它被配置爲打印警告和以上,那麼它不會'打印INFO消息。 –
順便說一句,看起來你可以看到通過記錄器的響應,但無法將其打印在文件中。這是問題嗎? –