Web services 使用groovy脚本作为代理的SOAPUI模拟服务

Web services 使用groovy脚本作为代理的SOAPUI模拟服务,web-services,redirect,groovy,proxy,soapui,Web Services,Redirect,Groovy,Proxy,Soapui,我正在尝试使用一个SoapUI模拟服务作为一个使用groovy脚本的代理。我试图通过将请求重定向到不同的端点来实现这一点。但是我得到的响应是“无法使用脚本分派;java.io.IOException:服务器返回HTTP响应代码:500” 我使用下面的答案来编写代码 有人能指出我在下面的代码中做错了什么吗 def keyStorePath = "E:\\ws.jks"; def keyStorePassword = "cgpwd"; def trustStorePath = "E:\\ws.jk

我正在尝试使用一个SoapUI模拟服务作为一个使用groovy脚本的代理。我试图通过将请求重定向到不同的端点来实现这一点。但是我得到的响应是“无法使用脚本分派;java.io.IOException:服务器返回HTTP响应代码:500”

我使用下面的答案来编写代码

有人能指出我在下面的代码中做错了什么吗

def keyStorePath = "E:\\ws.jks";
def keyStorePassword = "cgpwd";
def trustStorePath = "E:\\ws.jks";
def trustStorePassword = "cgpwd";

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();

def soapRequest = mockRequest.requestContent;
def soapUrl = new URL("https://test.webservice.dummyservice.com");
def connection = soapUrl.openConnection();

connection.setRequestMethod("POST");
connection.setRequestProperty("Accept-Encoding" ,"gzip,deflate");
connection.setRequestProperty("Content-Type" ,"text/xml;charset=UTF-8");
connection.setRequestProperty("SOAPAction", mockRequest.getSoapAction());
//connection.setRequestProperty("Content-Length", "13986");
//connection.setRequestProperty("Connection", "Keep-Alive");
//connection.setRequestProperty("User-Agent", "Apache-HttpClient/4.1.1 (java 1.5)");
//connection.setRequestProperty("Host", "test.webservice.dummyservice.com");
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;

requestContext.responseMessage = soapResponse;

实际上,这里的问题是,当web服务返回soap错误时,connection.content.text将在尝试访问connection.content时引发上述异常。在其他情况下,connection.content.text会返回响应

我在场景中遇到的另一个问题是,响应是使用gzip压缩的。所以我不得不用下面的代码解压它

def zipInputStream = new GZIPInputStream(connection.getInputStream());
def soapResponse = zipInputStream.getText("UTF-8");