我尝试使用IBM API Connect 5从SOAP服务创建REST API。我已按照本指南(https://www.ibm.com/support/knowledgecenter/en/SSFS6T/com.ibm.apic.apionprem.doc/tutorial_apionprem_expose_SOAP.html)中描述的所有步骤进行操作。 因此,在从调色板拖动Web服务块后,确保端点的正确性并发布API,我试图从浏览器调用API。不幸的是,API返回以下消息:
<errorResponse>
<httpCode>500</httpCode>
<httpMessage>Internal Server Error</httpMessage>
<moreInformation>Error attempting to read the urlopen response
data</moreInformation>
</errorResponse>
为了测试目的,我已经记录了请求,并且我已经在SOAPUI上尝试了请求。该服务正确返回响应。
有什么问题?
谢谢, 斯特凡诺
答案 0 :(得分:1)
就我而言,问题出现在后端字符集中(Content-Type:text / xml; charset = iso-8859-1)。
例如,后端以德语(或法语)返回text / xml。 Api Connect无法处理角色ü。它需要Content-Type:text / xml; charset = UTF-8
答案 1 :(得分:0)
我有一个类似的问题,就我而言是接受。如果您拥有Invoke,并且内容类型或接受与请求之一或您得到的响应不匹配,那么APIC就会发疯。
答案 2 :(得分:0)
请检查发送 (contentType
) 和接收 (accept
) 的格式是否与您的 API 预期的格式相同。就我而言,发生错误是因为 API 返回一个字符串,而我的默认代码配置为接收 JSON 正文。
//define a JSON-PLAIN TEXT protocol
private HttpEntity<String> httpEntityWithBody(Object objToParse){
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + "xxx token xxx");
headers.set("Accept", MediaType.TEXT_PLAIN_VALUE);
headers.setContentType(MediaType.APPLICATION_JSON);
Gson gson = new GsonBuilder().create();
String json = gson.toJson(objToParse);
HttpEntity<String> httpEntity = new HttpEntity<String>(json, headers);
return httpEntity;
}
//calling the API to APIC...
ParameterizedTypeReference<String> responseType = new
ParameterizedTypeReference<String>(){};
ResponseEntity<String> result =
rest.exchange(builder.buildAndExpand(urlParams).toUri(), HttpMethod.PUT, httpEntityWithBody(myDTO), responseType);
String statusCode = result.getStatusCodeValue();
String message = result.getBody();