wso2 - WSO2 自定义中介设置信封的值
问题描述
全部成交,
我将在 OutSequence 的 WSO2 ESB 项目中创建一个自定义调解器。
我想更改从后端发送给消费者的 SOAP 信封中的结果。但是根据结果对数据进行一点调整。
这是 SOAP 信封
<soapenv:Bodyxmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<jsonObject>
<serviceRequestID>12345</serviceRequestID>
<statusCode>1</statusCode>
<errorCode></errorCode>
<errorDescription></errorDescription>
<addressID>1.23456794E9</addressID>
<source>consumer name</source>
<requestId>910514</requestId>
</jsonObject>
我想创建一个自定义调解器来设置Error Description
基于Error Code
.
例如,
如果错误代码 1 = 错误描述 = 1
如果错误代码 2 = 错误描述 = 2
如果错误代码 3 = 错误描述 = 三
这是我的自定义中介代码。
private void ResponseLogging(MessageContext mc) throws OMException{
try {
String errorCode = mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("errorCode")).getText();
String errorDescription = null;
if(errorCode.equals("1")) {
errorDescription = "One";
}else if(errorCode.equals("2")) {
errorDescription = "Two";
}else if(errorCode.equals("3")) {
errorDescription = "Three";
}
mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("errorDescription")).setText(errorDescription);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
预期响应,
<soapenv:Bodyxmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<jsonObject>
<serviceRequestID>12345</serviceRequestID>
<statusCode>1</statusCode>
<errorCode>1</errorCode>
<errorDescription>One</errorDescription>
<addressID>1.23456794E9</addressID>
<source>consumer name</source>
<requestId>910514</requestId>
</jsonObject>
但是现在,我只得到了error description
空值。请帮助。任何建议都会很棒!
谢谢。
更新 !
显然,在使用 setText() 方法设置值之后。错误描述值更改One
为日志中的预期。
</statusCode><errorCode>1</errorCode><errorDescription>One</errorDescription>
但是当响应被发送回客户端时,它仍然是空值。
{"serviceRequestID": "12345","statusCode": 1,"errorCode": "1", "errorDescription": "","addressID": 1.23456794E9,"source": "consumer name", "requestId": "910514"}
解决方案
Try this;
private void ResponseLogging(MessageContext mc) throws OMException{
try {
String errorCode = mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("jsonObject")).getFirstChildWithName(new QName("errorCode")).getText();
String errorDescription = null;
if(errorCode.equals("1")) {
errorDescription = "One";
}else if(errorCode.equals("2")) {
errorDescription = "Two";
}else if(errorCode.equals("3")) {
errorDescription = "Three";
}
mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("jsonObject")).getFirstChildWithName(new QName("errorDescription")).setText(errorDescription);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
推荐阅读
- android - RecyclerView 中的 ViewBinding 以及 DiffUtils 回调不起作用
- python - 使用 M1 Mac 进行 Python 多处理
- java - 在Java SpringBoot中将枚举多个值转换为Json
- amazon-web-services - 未找到 Amazon EC2 实例用户数据
- aix - 可能的 DB.TOXML 错误?(AIX 上的 UniVerse 11.3.1)
- json - 带有 json 数据 laravel 的 Foreach 循环
- node.js - 无法在我的 Raspberry PI 上安装 Better-Sqlite3
- python - 和/或元素方式用于python中的布尔列表
- javascript - Firestore OR 查询
- reactjs - 正确的类型将道具传递给反应打字稿中的孩子。错误 ts(2322)