public void filterRequest(SubmitContext context, WsdlRequest wsdlRequest) { TimeablePostMethod postMethod = (TimeablePostMethod) context.getProperty(BaseHttpRequestTransport.POST_METHOD); // set maxsize Settings settings = wsdlRequest.getSettings(); // close connections? if (settings.getBoolean(HttpSettings.CLOSE_CONNECTIONS)) postMethod.setRequestHeader("Connection", "close"); // max size.. postMethod.setMaxSize(settings.getLong(HttpSettings.MAX_RESPONSE_SIZE, 0)); // apply global settings HttpClientSupport.applyHttpSettings(postMethod, settings); }
public StringToStringMap getValues(Settings settings) { StringToStringMap values = new StringToStringMap(); values.put(NO_RESIZE_REQUEST_EDITOR, settings.getBoolean(UISettings.NO_RESIZE_REQUEST_EDITOR)); values.put(START_WITH_REQUEST_TABS, settings.getBoolean(UISettings.START_WITH_REQUEST_TABS)); values.put(AUTO_VALIDATE_REQUEST, settings.getBoolean(UISettings.AUTO_VALIDATE_REQUEST)); values.put(ABORT_ON_INVALID_REQUEST, settings.getBoolean(UISettings.ABORT_ON_INVALID_REQUEST)); values.put(AUTO_VALIDATE_RESPONSE, settings.getBoolean(UISettings.AUTO_VALIDATE_RESPONSE)); values.put(XML_LINE_NUMBERS, settings.getBoolean(UISettings.SHOW_XML_LINE_NUMBERS)); values.put(GROOVY_LINE_NUMBERS, settings.getBoolean(UISettings.SHOW_GROOVY_LINE_NUMBERS)); return values; }
@Override public void filterAbstractHttpRequest(SubmitContext context, AbstractHttpRequest<?> httpRequest) { Settings settings = httpRequest.getSettings(); String compressionAlg = settings.getString(HttpSettings.REQUEST_COMPRESSION, "None"); if (!"None".equals(compressionAlg)) { try { ExtendedHttpMethod method = (ExtendedHttpMethod) context.getProperty(BaseHttpRequestTransport.HTTP_METHOD); if (method instanceof HttpEntityEnclosingRequest) { HttpEntity requestEntity = ((HttpEntityEnclosingRequest) method).getEntity(); if (requestEntity != null) { ByteArrayOutputStream tempOut = new ByteArrayOutputStream(); requestEntity.writeTo(tempOut); byte[] compressedData = CompressionSupport.compress(compressionAlg, tempOut.toByteArray()); ((HttpEntityEnclosingRequest) method).setEntity(new ByteArrayEntity(compressedData)); } } } catch (Exception e) { e.printStackTrace(); } } }
public void perform(RestService target, Object param) { try { if (dialog == null) { dialog = ADialogBuilder.buildDialog(Form.class); } Settings settings = target.getSettings(); dialog.setValue(Form.OUTPUT_FOLDER, settings.getString(REPORT_DIRECTORY_SETTING, "")); if (!dialog.show()) { return; } settings.setString(REPORT_DIRECTORY_SETTING, dialog.getValue(Form.OUTPUT_FOLDER)); final File reportDirectory = new File(settings.getString(REPORT_DIRECTORY_SETTING, "")); String reportDirAbsolutePath = reportDirectory.getAbsolutePath(); String filename = reportDirAbsolutePath + File.separatorChar + "report.xml"; String reportUrl = transform(target, reportDirAbsolutePath, filename); Tools.openURL(reportUrl); } catch (Exception e) { UISupport.showErrorMessage(e); } }
public void storeValues(StringToStringMap values, Settings settings) { if (editorFontTextField != null) { settings.setString(UISettings.EDITOR_FONT, editorFontTextField.getText()); } settings.setBoolean( UISettings.NO_RESIZE_REQUEST_EDITOR, values.getBoolean(NO_RESIZE_REQUEST_EDITOR)); settings.setBoolean( UISettings.START_WITH_REQUEST_TABS, values.getBoolean(START_WITH_REQUEST_TABS)); settings.setBoolean(UISettings.AUTO_VALIDATE_REQUEST, values.getBoolean(AUTO_VALIDATE_REQUEST)); settings.setBoolean( UISettings.ABORT_ON_INVALID_REQUEST, values.getBoolean(ABORT_ON_INVALID_REQUEST)); settings.setBoolean( UISettings.AUTO_VALIDATE_RESPONSE, values.getBoolean(AUTO_VALIDATE_RESPONSE)); settings.setBoolean(UISettings.SHOW_XML_LINE_NUMBERS, values.getBoolean(XML_LINE_NUMBERS)); settings.setBoolean( UISettings.SHOW_GROOVY_LINE_NUMBERS, values.getBoolean(GROOVY_LINE_NUMBERS)); }
public void start(SoapMonitor soapMonitor, int localPort) { Settings settings = soapMonitor.getProject().getSettings(); server.setThreadPool(new SoapUIJettyThreadPool()); Context context = new Context(server, ROOT, 0); if (sslEndpoint != null) { if (sslEndpoint.startsWith(HTTPS)) { sslConnector = new SslSocketConnector(); sslConnector.setKeystore( settings.getString(SoapMonitorAction.SecurityTabForm.SSLTUNNEL_KEYSTORE, "JKS")); sslConnector.setPassword( settings.getString(SoapMonitorAction.SecurityTabForm.SSLTUNNEL_PASSWORD, "")); sslConnector.setKeyPassword( settings.getString(SoapMonitorAction.SecurityTabForm.SSLTUNNEL_KEYPASSWORD, "")); sslConnector.setTruststore( settings.getString(SoapMonitorAction.SecurityTabForm.SSLTUNNEL_TRUSTSTORE, "JKS")); sslConnector.setTrustPassword( settings.getString( SoapMonitorAction.SecurityTabForm.SSLTUNNEL_TRUSTSTORE_PASSWORD, "")); sslConnector.setNeedClientAuth(false); sslConnector.setMaxIdleTime(30000); sslConnector.setPort(localPort); server.addConnector(sslConnector); context.addServlet(new ServletHolder(new TunnelServlet(soapMonitor, sslEndpoint)), ROOT); } else { if (sslEndpoint.startsWith(HTTP)) { connector.setPort(localPort); server.addConnector(connector); context.addServlet(new ServletHolder(new TunnelServlet(soapMonitor, sslEndpoint)), ROOT); } else { UISupport.showErrorMessage("Unsupported/unknown protocol tunnel will not start"); return; } } proxyOrTunnel = false; } else { proxyOrTunnel = true; connector.setPort(localPort); server.addConnector(connector); context.addServlet(new ServletHolder(new ProxyServlet(soapMonitor)), ROOT); } try { server.start(); } catch (Exception e) { UISupport.showErrorMessage("Error starting monitor: " + e.getMessage()); } }
public void setFormValues(Settings settings) { editorFontTextField.setText(encodeFont(UISupport.getEditorFont())); editorForm.setValues(getValues(settings)); abortCheckBox.setEnabled(settings.getBoolean(UISettings.AUTO_VALIDATE_REQUEST)); }
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { listenerCallBack.fireOnRequest(project, request, response); if (response.isCommitted()) { return; } ExtendedHttpMethod method; HttpServletRequest httpRequest = (HttpServletRequest) request; if (httpRequest.getMethod().equals("GET")) { method = new ExtendedGetMethod(); } else if (httpRequest.getMethod().equals("POST")) { method = new ExtendedPostMethod(); } else if (httpRequest.getMethod().equals("PUT")) { method = new ExtendedPutMethod(); } else if (httpRequest.getMethod().equals("HEAD")) { method = new ExtendedHeadMethod(); } else if (httpRequest.getMethod().equals("OPTIONS")) { method = new ExtendedOptionsMethod(); } else if (httpRequest.getMethod().equals("TRACE")) { method = new ExtendedTraceMethod(); } else if (httpRequest.getMethod().equals("PATCH")) { method = new ExtendedPatchMethod(); } else { method = new ExtendedGenericMethod(httpRequest.getMethod()); } method.setDecompress(false); ByteArrayOutputStream requestBody = null; if (method instanceof HttpEntityEnclosingRequest) { requestBody = Tools.readAll(request.getInputStream(), 0); ByteArrayEntity entity = new ByteArrayEntity(requestBody.toByteArray()); entity.setContentType(request.getContentType()); ((HttpEntityEnclosingRequest) method).setEntity(entity); } // for this create ui server and port, properties. JProxyServletWsdlMonitorMessageExchange capturedData = new JProxyServletWsdlMonitorMessageExchange(project); capturedData.setRequestHost(httpRequest.getServerName()); capturedData.setRequestMethod(httpRequest.getMethod()); capturedData.setRequestHeader(httpRequest); capturedData.setHttpRequestParameters(httpRequest); capturedData.setQueryParameters(httpRequest.getQueryString()); capturedData.setTargetURL(httpRequest.getRequestURL().toString()); // CaptureInputStream capture = new CaptureInputStream( httpRequest.getInputStream() ); // check connection header String connectionHeader = httpRequest.getHeader("Connection"); if (connectionHeader != null) { connectionHeader = connectionHeader.toLowerCase(); if (!connectionHeader.contains("keep-alive") && !connectionHeader.contains("close")) { connectionHeader = null; } } // copy headers boolean xForwardedFor = false; @SuppressWarnings("unused") Enumeration<?> headerNames = httpRequest.getHeaderNames(); while (headerNames.hasMoreElements()) { String hdr = (String) headerNames.nextElement(); String lhdr = hdr.toLowerCase(); if (dontProxyHeaders.contains(lhdr)) { continue; } if (connectionHeader != null && connectionHeader.contains(lhdr)) { continue; } Enumeration<?> vals = httpRequest.getHeaders(hdr); while (vals.hasMoreElements()) { String val = (String) vals.nextElement(); if (val != null) { method.setHeader(lhdr, val); xForwardedFor |= "X-Forwarded-For".equalsIgnoreCase(hdr); } } } // Proxy headers method.setHeader("Via", "SoapUI Monitor"); if (!xForwardedFor) { method.addHeader("X-Forwarded-For", request.getRemoteAddr()); } StringBuffer url = new StringBuffer("http://"); url.append(httpRequest.getServerName()); if (httpRequest.getServerPort() != 80) { url.append(":" + httpRequest.getServerPort()); } if (httpRequest.getServletPath() != null) { url.append(httpRequest.getServletPath()); try { method.setURI(new java.net.URI(url.toString().replaceAll(" ", "%20"))); } catch (URISyntaxException e) { SoapUI.logError(e); } if (httpRequest.getQueryString() != null) { url.append("?" + httpRequest.getQueryString()); try { method.setURI(new java.net.URI(url.toString())); } catch (URISyntaxException e) { SoapUI.logError(e); } } } method.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, false); setProtocolversion(method, request.getProtocol()); ProxyUtils.setForceDirectConnection(method.getParams()); listenerCallBack.fireBeforeProxy(project, request, response, method); if (settings.getBoolean(LaunchForm.SSLTUNNEL_REUSESTATE)) { if (httpState == null) { httpState = new BasicHttpContext(); } HttpClientSupport.execute(method, httpState); } else { HttpClientSupport.execute(method); } // wait for transaction to end and store it. capturedData.stopCapture(); capturedData.setRequest(requestBody == null ? null : requestBody.toByteArray()); capturedData.setRawResponseBody(method.getResponseBody()); capturedData.setResponseHeader(method.getHttpResponse()); capturedData.setRawRequestData(getRequestToBytes(request.toString(), requestBody)); capturedData.setRawResponseData(getResponseToBytes(method, capturedData.getRawResponseBody())); byte[] decompressedResponseBody = method.getDecompressedResponseBody(); capturedData.setResponseContent( decompressedResponseBody != null ? new String(decompressedResponseBody) : ""); capturedData.setResponseStatusCode( method.hasHttpResponse() ? method.getHttpResponse().getStatusLine().getStatusCode() : null); capturedData.setResponseStatusLine( method.hasHttpResponse() ? method.getHttpResponse().getStatusLine().toString() : null); listenerCallBack.fireAfterProxy(project, request, response, method, capturedData); ((HttpServletResponse) response) .setStatus( method.hasHttpResponse() ? method.getHttpResponse().getStatusLine().getStatusCode() : null); if (!response.isCommitted()) { StringToStringsMap responseHeaders = capturedData.getResponseHeaders(); // capturedData = null; // copy headers to response HttpServletResponse httpServletResponse = (HttpServletResponse) response; for (Map.Entry<String, List<String>> headerEntry : responseHeaders.entrySet()) { for (String header : headerEntry.getValue()) { httpServletResponse.addHeader(headerEntry.getKey(), header); } } if (capturedData.getRawResponseBody() != null) { IO.copy( new ByteArrayInputStream(capturedData.getRawResponseBody()), httpServletResponse.getOutputStream()); } } synchronized (this) { if (contentTypeMatches(method)) { listenerCallBack.fireAddMessageExchange(capturedData); } } }
public Response sendRequest(SubmitContext submitContext, Request request) throws Exception { AbstractHttpRequestInterface<?> httpRequest = (AbstractHttpRequestInterface<?>) request; HttpClient httpClient = HttpClientSupport.getHttpClient(); ExtendedHttpMethod httpMethod = createHttpMethod(httpRequest); boolean createdState = false; HttpState httpState = (HttpState) submitContext.getProperty(SubmitContext.HTTP_STATE_PROPERTY); if (httpState == null) { httpState = new HttpState(); submitContext.setProperty(SubmitContext.HTTP_STATE_PROPERTY, httpState); createdState = true; } HostConfiguration hostConfiguration = new HostConfiguration(); String localAddress = System.getProperty("soapui.bind.address", httpRequest.getBindAddress()); if (localAddress == null || localAddress.trim().length() == 0) localAddress = SoapUI.getSettings().getString(HttpSettings.BIND_ADDRESS, null); if (localAddress != null && localAddress.trim().length() > 0) { try { hostConfiguration.setLocalAddress(InetAddress.getByName(localAddress)); } catch (Exception e) { SoapUI.logError(e); } } submitContext.removeProperty(RESPONSE); submitContext.setProperty(HTTP_METHOD, httpMethod); submitContext.setProperty(POST_METHOD, httpMethod); submitContext.setProperty(HTTP_CLIENT, httpClient); submitContext.setProperty(REQUEST_CONTENT, httpRequest.getRequestContent()); submitContext.setProperty(HOST_CONFIGURATION, hostConfiguration); submitContext.setProperty(WSDL_REQUEST, httpRequest); submitContext.setProperty(RESPONSE_PROPERTIES, new StringToStringMap()); for (RequestFilter filter : filters) { filter.filterRequest(submitContext, httpRequest); } try { Settings settings = httpRequest.getSettings(); // custom http headers last so they can be overridden StringToStringMap headers = httpRequest.getRequestHeaders(); for (String header : headers.keySet()) { String headerValue = headers.get(header); headerValue = PropertyExpander.expandProperties(submitContext, headerValue); httpMethod.setRequestHeader(header, headerValue); } // do request WsdlProject project = (WsdlProject) ModelSupport.getModelItemProject(httpRequest); WssCrypto crypto = null; if (project != null) { crypto = project .getWssContainer() .getCryptoByName( PropertyExpander.expandProperties(submitContext, httpRequest.getSslKeystore())); } if (crypto != null && WssCrypto.STATUS_OK.equals(crypto.getStatus())) { hostConfiguration .getParams() .setParameter( SoapUIHostConfiguration.SOAPUI_SSL_CONFIG, crypto.getSource() + " " + crypto.getPassword()); } // dump file? httpMethod.setDumpFile( PathUtils.expandPath( httpRequest.getDumpFile(), (AbstractWsdlModelItem<?>) httpRequest, submitContext)); // include request time? if (settings.getBoolean(HttpSettings.INCLUDE_REQUEST_IN_TIME_TAKEN)) httpMethod.initStartTime(); // submit! httpClient.executeMethod(hostConfiguration, httpMethod, httpState); httpMethod.getTimeTaken(); } catch (Throwable t) { httpMethod.setFailed(t); if (t instanceof Exception) throw (Exception) t; SoapUI.logError(t); throw new Exception(t); } finally { for (int c = filters.size() - 1; c >= 0; c--) { filters.get(c).afterRequest(submitContext, httpRequest); } if (!submitContext.hasProperty(RESPONSE)) { createDefaultResponse(submitContext, httpRequest, httpMethod); } Response response = (Response) submitContext.getProperty(BaseHttpRequestTransport.RESPONSE); StringToStringMap responseProperties = (StringToStringMap) submitContext.getProperty(BaseHttpRequestTransport.RESPONSE_PROPERTIES); for (String key : responseProperties.keySet()) { response.setProperty(key, responseProperties.get(key)); } if (httpMethod != null) { httpMethod.releaseConnection(); } else log.error("PostMethod is null"); if (createdState) { submitContext.setProperty(SubmitContext.HTTP_STATE_PROPERTY, null); } } return (Response) submitContext.getProperty(BaseHttpRequestTransport.RESPONSE); }