0

我正在尝试使用 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 上尝试了请求。服务正确返回响应。

问题是什么?

4

3 回答 3

1

就我而言,问题出在后端字符集 ( Content-Type: text/xml;charset=iso-8859-1) 中。

例如,后端text/xml以德语(或法语)返回。Api Connect 无法处理 character ü。它需要Content-Type: text/xml;charset=UTF-8.

于 2017-11-29T10:39:29.183 回答
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();
于 2021-03-24T19:22:11.387 回答
0

我有一个类似的问题,在我的情况下是接受。如果您有一个 Invoke 并且内容类型或接受,与请求之一或您得到的响应不匹配,APIC 会发疯。

于 2020-11-11T07:42:22.267 回答