SoapUI MockService:作为代理工作
发布时间:2020-12-14 16:22:47 所属栏目:大数据 来源:网络整理
导读:我在SoapUI中编写MockService. 如果节点存在于收到的SOAP请求中(通过XPath),我希望通过groovy脚本生成响应.在其他情况下,我想重定向收到的SOAP-Request.我的意思是,我希望将收到的SOAP-Request发送到其他SOAP-Service(我希望通过URL发送). 有办法做到这一点
我在SoapUI中编写MockService.
如果节点存在于收到的SOAP请求中(通过XPath),我希望通过groovy脚本生成响应.在其他情况下,我想重定向收到的SOAP-Request.我的意思是,我希望将收到的SOAP-Request发送到其他SOAP-Service(我希望通过URL发送). 有办法做到这一点吗? 解决方法
如果要使用soapUI MockService作为代理,请执行以下操作:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context ) // load JKS (need for https) def keyStorePath = "keystore.jks" def keyStorePassword = "keystore_pswd" def trustStorePath = "truststore.jks" def trustStorePassword = "truststore_pswd" def keyStoreFactory = javax.net.ssl.KeyManagerFactory.getInstance("SUNX509") def trustStoreFactory = javax.net.ssl.TrustManagerFactory.getInstance("SUNX509") def keyStore = java.security.KeyStore.getInstance("JKS") def trustStore = java.security.KeyStore.getInstance("JKS") def keyInput = new FileInputStream(keyStorePath) keyStore.load(keyInput,keyStorePassword.toCharArray()) keyInput.close() def trustInput = new FileInputStream(trustStorePath) trustStore.load(trustInput,trustStorePassword.toCharArray()) trustInput.close() keyStoreFactory.init(keyStore,keyStorePassword.toCharArray()) trustStoreFactory.init(trustStore) def sslContext = javax.net.ssl.SSLContext.getInstance("TLS") sslContext.init(keyStoreFactory.getKeyManagers(),trustStoreFactory.getTrustManagers(),new java.security.SecureRandom()) def sslFactory = sslContext.getSocketFactory() // Send received request to https://example.org/soap/service def soapRequest = mockRequest.requestContent def soapUrl = new URL("https://example.org/soap/service") def connection = soapUrl.openConnection() connection.setRequestMethod("POST") connection.setRequestProperty("Content-Type","text/html") connection.setRequestProperty("SOAPAction","") connection.setSSLSocketFactory(sslFactory) connection.doOutput = true Writer writer = new OutputStreamWriter(connection.outputStream); writer.write(soapRequest) writer.flush() writer.close() connection.connect() def soapResponse = connection.content.text def responseXPathHelper = groovyUtils.getXmlHolder(soapResponse) responseXPathHelper.declareNamespace("envelop","http://www.w3.org/2003/05/soap-envelope") responseXPathHelper.declareNamespace("msg","https://example.org/soap/service") // Here you can modify condition (Where you want to spoofing) if ("ExampleResponse".equals(responseXPathHelper["/envelop:Envelope/envelop:Body/*/local-name()"])) // spoofing { def requestXPathHelper = groovyUtils.getXmlHolder(mockRequest.requestContent) requestXPathHelper.declareNamespace("envelop","http://www.w3.org/2003/05/soap-envelope") def messageValue = "spoofed response : " + requestXPathHelper[/envelop:Envelope/envelop:Body/msg:ExampleResponse/text()] def responseTemplate = """<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"> <S:Body> <ExampleResponse xmlns="https://example.org/soap/service"> ${messageValue} </ExampleResponse> </S:Body> </S:Envelope>""" requestContext.responseMessage = responseTemplate } // work as proxy,i.e. just return response recieved from example.org/soap/service else requestContext.responseMessage = soapResponse (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |