我正在调用一个用 JAVA 编写的 API-REST 服务,但出于某种奇怪的原因,它“有时”会抛出一个未映射的 HTTP 代码,所以我不明白问题出在哪里。
如果我运行相同的请求但在 POSTMAN 中我总是得到所需的 http 代码但是如果我从应用程序调用它有时会失败。
这是我用JAVA写的代码:
@Component
public class FessCalculator implements Processor {
private static Map<String, Object> headers;
private static int responseStatusCode = 200;
@Override
public void process(Exchange exchange) throws Exception {
String message = (String) exchange.getIn().getHeader("exception.message");
String supplierName = exchange.getProperty("supplierName",String.class);
Map<String, companyFess> output = new HashMap<>();
companyFess companyFess = new companyFess();
if (StringUtils.isBlank(message)) {
Map<String, Object> map = exchange.getIn().getBody(Map.class);
String ebsResult = (String) map.get("x_msg_data");
if (StringUtils.isBlank(ebsResult)) {
companyFess.setFees((List<TaxLineOut>) map.get("lines_tab"));
output.put(supplierName, companyFess);
} else {
/* API executed with errors. Fees will be empty */
companyFess.setMessage(ebsResult);
companyFess.setFees(new ArrayList<TaxLineOut>());
output.put(supplierName, companyFess);
}
} else {
/* API could not be executed. Fees will be null */
companyFess.setMessage("API Could not
be executed");
companyFess.setFees(new ArrayList<TaxLineOut>());
output.put(supplierName, companyFess);
}
companyFessResponse response = new companyFessResponse();
if (output == null || output.isEmpty()) {
responseStatusCode = 400;
} else {
response.setCompanyFees(output);
for (companyFess companyFess1 : output.values()) {
if (StringUtils.isNotBlank(companyFess1.getMessage())) {
response.setStatus(500);
}
}
}
exchange.getOut().setBody(response);
headers = exchange.getIn().getHeaders();
headers.put(Exchange.HTTP_RESPONSE_CODE, responseStatusCode);
exchange.getOut().setHeaders(headers);
}
}
正在调用的应用程序中显示的错误是:
8444-[2023-02-02 19:44:17] feesCalculator.CRITICAL:“feesCalculator API 异常:\”{\n \\“状态\\”:200,\n \\“companyTaxes\\”:{ \n \\"公司\\" : {\n \\"消息\\" : \\"\\",\n \\"税收\\" : [ {\n \\"tax_regime_code\\" : \\"USA-VAT\\",\n \\"tax\\" : \\"STATE\\",\n \\"tax_rate_id\\" : 12500,\n \\"tax_rate_code\\" : \\"STATE NGRP 13M\\",\n \\"tax_rate_name\\" : \\"VAT RAT BSAS\\",\n \\"operand\\" : 1.1,\n \\"amount\\ " : 11499.92\n }, {\n \\"tax_regime_code\\" : \\"USA-VAT\\",\n \\"tax\\" : \\"USCF\\",\n \\ “tax_rate_id\\”:13779,\n\\“tax_rate_code\\”:\\“GRP07_IIBB_CF\\”,\n\\“tax_rate_name\\”:\\“VAT RAT USA Res 364 AGIP 1%\\” ,\n \\"operand\\" : 1,\n \\"amount\\" : 10454.49\n }, {\n \\"tax_regime_code\\" : \\"USA-VAT\\",\ n \\"tax\\" : \\"USMI\\",\n \\"tax_rate_id\\" : 13881,\n \\"tax_rate_code\\" : \\"USMI CONV\\",\n \\"塔x_rate_name\\" : \\"VAT RAT USA\\",\n \\"operand\\" : 3.31,\n \\"amount\\" : 0\n }, {\n \\"tax_regime_code\ \" : \\"USA-VAT\\",\n \\"tax\\" : \\"USA-VAT\\",\n \\"tax_rate_id\\" : 13710,\n \\" tax_rate_code\\" : \\"USA-VAT CM 2,5\\",\n \\"tax_rate_name\\" : \\"VAT RAT Tucum\\",\n \\"operand\\" : 2.5 ,\n \\"金额\\" : 501.81\n }, {\n \\"tax_regime_code\\" : \\"USA-VAT\\",\n \\"tax\\" : \\" USFO\\",\n \\"tax_rate_id\\" : 12035,\n \\"tax_rate_code\\" : \\"USFO CONV\\",\n \\"tax_rate_name\\" : \\"VAT RAT Formos\\",\n \\"operand\\" : 1,\n \\"amount\\" : 0\n }, {\n \\"tax_regime_code\\" : \\"USA-VAT \\",\n \\"tax\\" : \\"VAT\\",\n \\"tax_rate_id\\" : 11756,\n \\"tax_rate_code\\" : \\"VAT 21% PP BA\\",\n \\"tax_rate_name\\" : \\"VAT 21%\\",\n \\"操作数\\" : 21,\n \\"金额\\" : 47326\ n }, {\n \\"tax_regime_code\ \" : \\"USA-VAT\\",\n \\"tax\\" : \\"USER\\",\n \\"tax_rate_id\\" : 12200,\n \\"tax_rate_code\ \" : \\"USER 3%\\",\n \\"tax_rate_name\\" : \\"VAT Washington\\",\n \\"operand\\" : 3,\n \\"amount \\" : 0\n }, {\n \\"tax_regime_code\\" : \\"USA-VAT\\",\n \\"tax\\" : \\"VAT\\",\n \\"tax_rate_id\\" : 11765,\n \\"tax_rate_code\\" : \\"VAT 21% RVTA\\",\n \\"tax_rate_name\\" : \\"VAT 21%\\" ,\n \\"操作数\\" : 21,\n \\"数量\\" : 172218.1\n } ]\n }\n }\n}\"" [] []}
因此,它调用处理器费用计算器来计算所有不同的费用,但由于某种原因它会抛出一个 http 代码 100 并加载响应。
我做错了什么?我错过了什么吗?
我希望只获得映射的 http 代码