wso2 - WSO2 EI 将传入的 Json 请求转换为 XML 并将其发送到 WSDL 端点
问题描述
当我将 json 发送到 wso2 代理服务时,该服务使用 Payload Mediator 将传入请求转换为 xml。它给了我以下错误:
{
"Envelope": {
"Body": {
"Fault": {
"faultcode": "S:Client",
"faultstring": "Couldn't create SOAP message due to exception: unexpected XML tag. expected: {http://schemas.xmlsoap.org/soap/envelope/}Envelope but found: {http://fcubs.ofss.com/service/FCUBSCcyService}RATESMASTERQUERY_IOFS_REQ"
}
}
}
}
这是我的发送请求:
{
"Parameter": {
"brncode": "CHO",
"ccy1": "USD",
"ccy2": "MNT"
}
}
这是我的代理服务代码: 接收 Json 并将 XML 发送到端点
<inSequence>
<log category="DEBUG" level="full" separator="
">
<property name="Request" value="=============Request============"/>
<property expression="json-eval($)" name="Request"/>
</log>
将 Json 转换为 XML 的 Payload Mediator 将发送到端点
<payloadFactory media-type="xml">
<format>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="http://fcubs.ofss.com/service/FCUBSCcyService">
<soapenv:Body>
<RATESMASTERQUERY_IOFS_REQ>
<FCUBS_HEADER>
<SOURCE>$1</SOURCE>
<UBSCOMP>$2</UBSCOMP>
<USERID>$3</USERID>
<BRANCH>$4</BRANCH>
<SERVICE>FCUBSCcyService</SERVICE>
<OPERATION>$5</OPERATION>
</FCUBS_HEADER>
<FCUBS_BODY>
<Rates-Master-IO>
<BRNCODE>$4</BRNCODE>
<CCY1>$6</CCY1>
<CCY2>$7</CCY2>
</Rates-Master-IO>
</FCUBS_BODY>
</RATESMASTERQUERY_IOFS_REQ>
</soapenv:Body>
</soapenv:Envelope>
</format>
enter code here
<args>
<arg evaluator="xml" expression="$trp:Source"/>
<arg value="FCUBS"/>
<arg evaluator="xml" expression="$trp:userid"/>
<arg evaluator="xml" expression="ctx:brncode"/>
<arg evaluator="xml" expression="$trp:function"/>
<arg evaluator="xml" expression="ctx:ccy1"/>
<arg evaluator="xml" expression="ctx:ccy2"/>
</args>
</payloadFactory>
<header name="Accept" scope="transport" value="text/xml"/>
<property name="messageType" scope="axis2" value="text/xml"/>
</inSequence>
外序列:
<outSequence>
<log category="DEBUG" separator="
">
<property name="Response" value="=============Response============"/>
<property expression="json-eval($)" name="Response"/>
</log>
<property name="messageType" scope="axis2" value="application/json"/>
<send/>
</outSequence>
如何正确工作?谢谢
解决方案
除了小错误,您的配置看起来不错
错误01:ctx应该改成$ctx
错误 02:如果您公开 REST API,您应该创建一个 REST API [1] 而不是代理。代理服务是在 WSO2 EI 中公开 SOAP 服务。
以下是满足您要求的工作示例:
<api xmlns="http://ws.apache.org/ns/synapse" name="API_Name" context="/APIBasePath" version="1.0.0" version-type="context">
<resource methods="POST" url-mapping="/samplePath">
<inSequence>
<payloadFactory media-type="xml">
<format>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://fcubs.ofss.com/service/FCUBSCcyService">
<soapenv:Body>
<RATESMASTERQUERY_IOFS_REQ>
<FCUBS_HEADER>
<SOURCE>$1</SOURCE>
<UBSCOMP>$2</UBSCOMP>
<USERID>$3</USERID>
<BRANCH>$4</BRANCH>
<SERVICE>FCUBSCcyService</SERVICE>
<OPERATION>$5</OPERATION>
</FCUBS_HEADER>
<FCUBS_BODY>
<Rates-Master-IO>
<BRNCODE>$4</BRNCODE>
<CCY1>$6</CCY1>
<CCY2>$7</CCY2>
</Rates-Master-IO>
</FCUBS_BODY>
</RATESMASTERQUERY_IOFS_REQ>
</soapenv:Body>
</soapenv:Envelope>
</format>
<args>
<arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$trp:Source"/>
<arg value="FCUBS"/>
<arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$trp:userid"/>
<arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$ctx:brncode"/>
<arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$trp:function"/>
<arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$ctx:ccy1"/>
<arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$ctx:ccy2"/>
</args>
</payloadFactory>
<property name="messageType" value="text/xml" scope="axis2"/>
<log level="full"/>
<send>
<endpoint>
<address uri="http://www.mocky.io/v2/5185415ba171ea3a00704eed" format="soap11"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<respond/>
</outSequence>
</resource>
</api>
推荐阅读
- r - 循环遍历目录中的 .rds 文件并转换为数据框
- visual-studio-code - 哪个 sqlfluff 命令未显示可执行路径
- kubernetes - 如何使用 Helm 但使用 ALB 而不是 ELB 在 EKS 上安装 Traefik?
- python - Discord.py bot.get_all_members 不工作
- knex.js - 合并的 Knex.js 问题
- php - PHP中的分位数回归
- clickhouse - 如何在 SQL 查询中使用 ClickHouse 分区值?
- javascript - 如何在 Vue3 中访问对象的“_value”属性
- typescript - typescript tsconfig、app.ts 和 app.js 文件在不同的文件夹中
- simulation - 如何在 ROS 和 Gazebo 上的 .SDF 机器人上使用 .URDF 传感器?