Use the user-configured Content-Type preferentially #203
This commit is contained in:
@@ -27,6 +27,8 @@ import javax.script.ScriptException;
|
||||
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.data.util.Pair;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
|
||||
import we.schema.util.I18nUtils;
|
||||
import org.noear.snack.ONode;
|
||||
import org.slf4j.Logger;
|
||||
@@ -282,9 +284,6 @@ public class Pipeline {
|
||||
Map<String, Object> headers = PathMapping.transform(ctxNode, stepContext,
|
||||
MapUtil.upperCaseKey((Map<String, Object>) responseMapping.get("fixedHeaders")),
|
||||
MapUtil.upperCaseKey((Map<String, Object>) responseMapping.get("headers")), false);
|
||||
if(CONTENT_TYPE_XML.equals(respContentType)) {
|
||||
headers.put(CommonConstants.HEADER_CONTENT_TYPE.toUpperCase(), CONTENT_TYPE_XML);
|
||||
}
|
||||
if (headers.containsKey(CommonConstants.WILDCARD_TILDE)
|
||||
&& headers.get(CommonConstants.WILDCARD_TILDE) instanceof Map) {
|
||||
response.put("headers", headers.get(CommonConstants.WILDCARD_TILDE));
|
||||
@@ -317,6 +316,12 @@ public class Pipeline {
|
||||
}
|
||||
}
|
||||
|
||||
HttpHeaders httpHeaders = MapUtil.toHttpHeaders((Map<String, Object>) response.get("headers"));
|
||||
if (CONTENT_TYPE_XML.equals(respContentType) && !httpHeaders.containsKey(CommonConstants.HEADER_CONTENT_TYPE)) {
|
||||
httpHeaders.add(CommonConstants.HEADER_CONTENT_TYPE.toUpperCase(), CONTENT_TYPE_XML);
|
||||
response.put(CommonConstants.HEADER_CONTENT_TYPE.toUpperCase(), CONTENT_TYPE_XML);
|
||||
}
|
||||
|
||||
// convert JSON to XML if it is XML content type
|
||||
if(CONTENT_TYPE_XML.equals(respContentType)) {
|
||||
Object respBody = response.get("body");
|
||||
@@ -333,7 +338,7 @@ public class Pipeline {
|
||||
}
|
||||
|
||||
aggResult.setBody(response.get("body"));
|
||||
aggResult.setHeaders(MapUtil.toMultiValueMap((Map<String, Object>) response.get("headers")));
|
||||
aggResult.setHeaders(httpHeaders);
|
||||
return aggResult;
|
||||
}
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@ public class RequestInput extends RPCInput implements IInput{
|
||||
|
||||
private static final String CONTENT_TYPE_JSON = "application/json";
|
||||
private static final String CONTENT_TYPE_XML = "application/xml";
|
||||
private static final String CONTENT_TYPE_TEXT_XML = "text/xml";
|
||||
private static final String CONTENT_TYPE_JS = "application/javascript";
|
||||
private static final String CONTENT_TYPE_HTML = "text/html";
|
||||
private static final String CONTENT_TYPE_TEXT = "text/plain";
|
||||
@@ -325,7 +326,11 @@ public class RequestInput extends RPCInput implements IInput{
|
||||
|
||||
if (!headers.containsKey(CommonConstants.HEADER_CONTENT_TYPE)) {
|
||||
// default content-type
|
||||
headers.add(CommonConstants.HEADER_CONTENT_TYPE, CommonConstants.CONTENT_TYPE_JSON);
|
||||
if (CONTENT_TYPE_XML.equals(reqContentType) || CONTENT_TYPE_TEXT_XML.equals(reqContentType)) {
|
||||
headers.add(CommonConstants.HEADER_CONTENT_TYPE, CONTENT_TYPE_XML);
|
||||
} else {
|
||||
headers.add(CommonConstants.HEADER_CONTENT_TYPE, CommonConstants.CONTENT_TYPE_JSON);
|
||||
}
|
||||
}
|
||||
|
||||
// add default headers
|
||||
@@ -340,11 +345,14 @@ public class RequestInput extends RPCInput implements IInput{
|
||||
headers.add(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
|
||||
|
||||
// convert JSON to XML if it is XML content type
|
||||
if (CONTENT_TYPE_XML.equals(reqContentType)) {
|
||||
if (CONTENT_TYPE_XML.equals(reqContentType) || CONTENT_TYPE_TEXT_XML.equals(reqContentType)) {
|
||||
request.put("jsonBody", request.get("body"));
|
||||
LOGGER.info("jsonBody={}", JSON.toJSONString(request.get("body")));
|
||||
JsonToXml jsonToXml = new JsonToXml.Builder(body).build();
|
||||
body = jsonToXml.toString();
|
||||
request.put("body", body);
|
||||
LOGGER.info("body={}", body);
|
||||
LOGGER.info("headers={}", JSON.toJSONString(headers));
|
||||
}
|
||||
|
||||
HttpMethod aggrMethod = HttpMethod.valueOf(inputContext.getStepContext().getInputReqAttr("method").toString());
|
||||
@@ -423,6 +431,7 @@ public class RequestInput extends RPCInput implements IInput{
|
||||
}
|
||||
break;
|
||||
case CONTENT_TYPE_XML:
|
||||
case CONTENT_TYPE_TEXT_XML:
|
||||
Builder builder = new XmlToJson.Builder(responseBody);
|
||||
if (this.xmlArrPaths != null && this.xmlArrPaths.length > 0) {
|
||||
for (int j = 0; j < this.xmlArrPaths.length; j++) {
|
||||
|
||||
Reference in New Issue
Block a user