Я создал почтовый запрос, который выполняется с помощью HttpClient. Это возвращает мне ответ, и из него я извлекаю объект и конвертирую его в строку, чтобы прочитать значение ответа. Ответ содержит правильные данные, но теряет все соответствующие теги XML и содержит только данные. Однако, когда я делаю этот точный почтовый запрос через CURL или Postman, ответ содержит тег XML. Я не могу понять, что делаю неправильно. Вот что я пробовал:
// Create HTTP Post Request
HttpPost requestPost = new HttpPost(url);
// Create Auth
String auth = username + ":" + password;
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes());
String authHeader = "Basic " + new String(encodedAuth);
requestPost.setHeader(HttpHeaders.AUTHORIZATION, authHeader);
requestPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
// Create the request parameter body
List<BasicNameValuePair> urlParameters = new ArrayList<>();
urlParameters.add(new BasicNameValuePair("functionName", functionName));
urlParameters.add(new BasicNameValuePair("objectType", objectType));
urlParameters.add(new BasicNameValuePair("inputParameter", inputParameter));
urlParameters.add(new BasicNameValuePair("inputTableParameter", inputTableParameter));
// Execute request
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(urlParameters);
requestPost.setEntity(entity);
// bypass SSL security
SSLContext context = SSLContext.getInstance("TLSv1.2");
TrustManager[] trustManager = new TrustManager[] {
new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkClientTrusted(X509Certificate[] certificate, String str) {}
@Override
public void checkServerTrusted(X509Certificate[] certificate, String str) {}
}
};
context.init(null, trustManager, new SecureRandom());
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(context,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
HttpClient client = HttpClientBuilder.create().setSSLSocketFactory(socketFactory).build();
HttpResponse response = client.execute(requestPost);
//Get response
String result = EntityUtils.toString(response.getEntity(), "UTF-8");
return result;
Без публикации всех результатов мой окончательный результат выглядит примерно так: Результаты 002020-07-31100In Process2020-07-312020-07-312020-07-3100002210000825255003Calculated00002210000825255EUREuro0012020- 07-3100: 00: 00 ... et c
Но из почтальона или CURL он красиво отформатирован с помощью тегов XML:
<OUTPUT>
<EN_ERROR_CD>00</EN_ERROR_CD>
<ES_APPLICATION>
<EFFECTIVE_DT>2020-07-31</EFFECTIVE_DT>
<JOURNALSTAT_CD>100</JOURNALSTAT_CD>
<JOURNALSTAT_TT>In Process</JOURNALSTAT_TT>
<APPL_DT>2020-07-31</APPL_DT>
<APPLIN_DT>2020-07-31</APPLIN_DT>
<MOD_DT>2020-07-31</MOD_DT>
<POLICYNR_TT>00002210000825255</POLICYNR_TT>
<BIZPROCSTAT_CD>003</BIZPROCSTAT_CD>
<BIZPROCSTAT_TT>Calculated</BIZPROCSTAT_TT>
</ES_APPLICATION>
<ES_POLICY>
<POLICYNR_TT>00002210000825255</POLICYNR_TT>
<POLICYNROLD_TT></POLICYNROLD_TT>
<EXCHANGERATE_TP></EXCHANGERATE_TP>
<CURRENCY_ID>EUR</CURRENCY_ID>
<CURRENCY_TT>Euro</CURRENCY_TT>
<SALECH_CD>001</SALECH_CD>
<POLBEG_DT>2020-07-31</POLBEG_DT>
<STARTTIME_TM>00:00:00</STARTTIME_TM>
...etc
Для справки вот как мой запрос CURL выглядит так:
curl -u username:password -d "functionName=/RETRIEVE&objectType=obj&inputParameter=<INPUT><IV_APPLNR_CD>10000000002553402</IV_APPLNR_CD><IS_REQUESTED_ELEMENTS></IS_REQUESTED_ELEMENTS><IF_READ_JOURNAL></IF_READ_JOURNAL><IF_READ_CBC>X</IF_READ_CBC></INPUT>&inputTableParameter=" -H "Content-Type: application/x-www-form-urlencoded" -X POST https://hostname:port/test/service/service.do
Надеюсь, эта информация поможет проиллюстрировать проблему. Большое спасибо за помощь!