我在其 SCP 平台中使用 SAP 的单线 Java IDE 上的 tomcat servlet。该代码获取一个包含采购订单数据的 XML 文件,对其进行处理,然后发送 SOAP 调用以在客户端租户中创建采购订单。它还针对租户的数据库运行验证,以确保数据正确、不重复且已满。
当代码运行一个包含一些采购订单的文件时,它在 servlet 上运行良好。当有几十个采购订单要创建时,运行在途中的某个地方停止,我得到一个日志(见下面的完整日志):
2022/02/13 14:01:08 http:代理错误:EOF 2022/02/13 14:01:08 应用程序退出。错误:信号:已杀死,正在重新启动
并且
nmsejb8msf-uploadvendors.cfapps.eu10.hana.ondemand.com - [2022-02-13T13:58:33.733250213Z] “POST >/UploadAP HTTP/1.1”502 0 0 “-”
由此我了解代理服务器从服务器获取 502 导致我的代码失败。
我使用 Unirest 拨打电话。
这是执行实际发布的函数:
private static void postPO(int POID){
//only send post if PO has items
if(fullBody.toString().contains("<Item ItemImatListCompleteTransmissionIndicator=\"true\" actionCode=\"01\">")) {
Unirest.setTimeouts(0, 0);
try {
HttpResponse<String> response = Unirest.post("SOAP service URL")
.header("Content-Type", "text/xml")
.header("Authorization", "Basic encoded user and pass")
.body(fullBody.toString())
.asString();
response.getBody();
fullBody.setLength(0);
} catch (UnirestException e) {
e.printStackTrace();
System.out.println("\n PO Unirest error\n");
}
}else{
logBuilder.append("PO " + APOneViewPOID.get(POID) + " has no items, PO will not be uploaded\n");
fullBody.setLength(0);
}
}
正如我在上面所写的,这在本地运行良好并创建了采购订单。它在 servlet 上运行时失败,并且有很多采购订单要加载(几十个采购订单)。fullbody 包含实际的 SOAP 调用 Body。我怀疑可能会涉及一些超时,但我不确定是哪一个,因为如果它是上传采购订单的数据库的服务器,即使我在本地运行代码也会发生这种情况吗?