我尝试创建一个自动JIRA
问题报告(在某些故障序列中)。
我为JSON
API制作了JIRA
有效负载,这对于文本来说效果很好。
不过,我想向JIRA
报告SOAP
请求和回复,以便我就此问题进行调查。
我的问题是如何创建包含JSON
的文字的XML
有效内容?
我在WSO2 ESB
[2016-09-18 21:46:31,774] ERROR - NativeWorkerPool Uncaught exception
java.lang.Error: Error: could not match input
at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.zzScanError(JsonScanner.java:530)
at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.yylex(JsonScanner.java:941)
我要生成的有效负载
<payloadFactory description="" media-type="json">
<format>
{
"fields": {
"project":
{
"key": "$1"
},
"summary": "$2",
"description": "$3",
"issuetype": { "name": "$4" }
}
}
</format>
<args>
<arg evaluator="xml" expression="$func:projectKey"/>
<arg evaluator="xml" expression="$func:summary"/>
<arg evaluator="xml" expression="$func:description"/>
<arg evaluator="xml" expression="$func:issueType"/>
</args>
</payloadFactory>
我想将一些包含XML的文本发送到参数$ func:description中。当我只将差的XML发送到$ func:description时,有效负载Factory转换为JSON,在这种情况下不需要,XML应该是一个文本 - 消息
for the completeness to get the XML message I used
<property expression="$body" name="request"
scope="default" type="STRING"/>
调用终点
<property expression="$body" name="response"
scope="default" type="STRING"/>
我需要知道bind&#34; request&#34; +&#34;回应&#34;进入$ func:description
答案 0 :(得分:0)
如果XML格式正确,您只需将messageType属性设置为application / json并自动执行转换。有关详细信息,请参阅this。
否则,您可以使用有效负载Factory mediator或Enrich mediator来自定义构建Json。
答案 1 :(得分:0)
使用您喜欢的XML结构创建有效负载。
使用JS脚本中介将一个节点修改为CDATA。
更改内容类型。
我的代理配置,请根据您的要求进行更改:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="XMLinsideJSON"
transports="http https"
startOnLoad="true">
<target>
<inSequence>
<property name="BOK" expression="//*[1]" type="OM" scope="default"/>
<enrich>
<source type="inline" clone="true">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<fields xmlns="">
<summary xmlns=""/>
<project xmlns=""/>
<description xmlns=""/>
<issuetype xmlns="">
<name xmlns=""/>
</issuetype>
</fields>
</soapenv:Body>
</soapenv:Envelope>
</source>
<target type="envelope"/>
</enrich>
<script language="js">
importPackage(Packages.org.apache.axiom.om);
var elem= mc.getEnvelope().getBody().getFirstElement().getFirstElement();
var myText = elem.getOMFactory().createOMText(elem, mc.getProperty("BOK"), OMNode.CDATA_SECTION_NODE);
elem.addChild(myText)
</script>
<property name="messageType" scope="axis2" value="application/json"/>
<respond/>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
</proxy>
我的要求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<payload>
<response>
<data>AAA</data>
</response>
</payload>
</soapenv:Body>
</soapenv:Envelope>
我的回答:
{"fields":{"summary":"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Body>\n <payload>\n <response>\n <data>AAA</data>\n </response>\n </payload>\n </soapenv:Body></soapenv:Envelope>","project":null,"description":null,"issuetype":{"name":null}}}