我正在尝试使用以下功能为我的应用程序提供解决方案( Mock Service Script Dispatch ):
用户Groovy脚本接受“请求”并生成“响应”,例如
if(request.xxx == 5){ response.yyy = 6 }
该应用程序的最佳解决方案是什么?
@Rao
示例,用户上传
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:test">
<xs:element name="TestRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="data" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TestResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="data" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
和脚本:
response.data = request.data + 'xxx'
有些应用程序可以创建正确形成的“请求”(此处为TestRequest)。例如,我可以将这些请求解析为XML DOM。 然后将“request”作为参数传递给上面的Groovy脚本。
请求:
<?xml version="1.0" encoding="UTF-8"?>
<TestRequest xmlns="urn:test">
<data>data</data>
</TestRequest>
响应:
<?xml version="1.0" encoding="UTF-8"?>
<TestResponse xmlns="urn:test">
<data>dataxxx</data>
</TestResponse>
(实际上这是Java应用程序,Groovy脚本将通过Java Scripting API运行)
答案 0 :(得分:1)
以下是发送模拟服务的脚本:
assert mockRequest.requestContent, 'Request is null or empty'
log.info mockRequest.requestContent
def xml = new XmlSlurper().parseText(mockRequest.requestContent)
context.data = xml.'**'.find {it.name() == 'price'}?.text() + 'xxx'
在响应中将属性扩展如下所示作为占位符。一旦请求到达模拟服务,就会从请求中读取值,并为响应的${data}
元素设置所需的值(注意:<data>
)并将其发送到响应中。
<?xml version="1.0" encoding="UTF-8"?>
<TestResponse xmlns="urn:test">
<data>${data}</data>
</TestResponse>