首页 文章

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

提问于
浏览
0

我试图使用一个groovy脚本使用SoapUI模拟服务作为PROXY . 我试图通过将请求重定向到不同的 endpoints 来实现此目的 . 但我得到的回应是 "Failed to dispatch using script; java.io.IOException: Server returned HTTP response code: 500"

我使用以下答案来编写代码 .

SoapUI MockService: Work as proxy

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

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;

1 回答

  • 0

    实际上这里的问题是,当Web服务返回soap故障时, connection.content.text 将在尝试访问 connection.content 时抛出上述异常 . 在其他情况下 connection.content.text 确实返回响应 .

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

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

相关问题