Forum Discussion

hbjastad's avatar
hbjastad
Contributor
8 years ago
Solved

Turning off "Accept compressed responses from host" programmatically

Hi, I am trying to write an integration test in Java using SoapUI and the following code is able to do that:

 

            // create new project
            WsdlProject project = new WsdlProject();

            // import WSDL
            WsdlInterface wsdl = WsdlInterfaceFactory.importWsdl(project, endpoint.getWsdlUrl(), true)[0];

            // get desired operation
            WsdlOperation operation = wsdl.getOperationByName(operationName);

            // create a new empty request for that operation
            WsdlRequest request = operation.addNewRequest("My request");
            //WsdlRequest request = operation.getRequestAt(0);
            request.setEndpoint(endpoint.getEndpoint());

            // generate the request content from the schema
            request.setRequestContent(operation.createRequest(true));

            // submit the request
            WsdlSubmitContext submitContext = new WsdlSubmitContext(request);
            WsdlSubmit submit = request.submit(submitContext, false);

            // wait for the response
            Response response = submit.getResponse();

            //	validate the response
            String content = response.getContentAsString();
            System.out.println(content);

 

But when I look at the content, it is scrambled. The following 2 posts suggests that the solution is to turn off "Accept compressed responses from host":

https://community.smartbear.com/t5/SoapUI-NG/soapui-unable-to-parse-responses-with-XML-embedded-as-strings/td-p/11716

https://community.smartbear.com/t5/SoapUI-Open-Source/Getting-unrecognized-character-on-webservice-response/td-p/9706

 

But I need to do this programmatically, not from the UI. How can I achieve the same programmatically?

  • nmrao's avatar
    nmrao
    8 years ago

    Any way here it is to change the settings

     

    //Change value what is needed for you true or false
    boolean value = false;
    SoapUI.getSettings().setBoolean(HttpSettings.RESPONSE_COMPRESSION, value);

8 Replies

  • nmrao's avatar
    nmrao
    Champion Level 3
    I think it is one time configuration using preferences.
  • What do you mean by "one time configuration using preferences"? I need to get this working in code, not the GUI.

     

    The best solution would be to be able to decode the response, which is gzip. I have tried the following alternatives, but they all result in 'java.util.zip.ZipException: Not in GZIP format':

     

    GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(((WsdlSinglePartHttpResponse) response).getRawResponseBody()));
    GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(response.getRawResponseData()));
    GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(response.getContentAsString().getBytes()));

     

    Does anyone have code that either turns off the ability to accept compressed responses, or that can decompress a compressed response?

    • hbjastad's avatar
      hbjastad
      Contributor

      In case the content is base64 encoded, I even tried

      String zippedBase64Str = response.getContentAsString();
      byte[] bytes = Base64.decodeBase64(zippedBase64Str);
      GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(bytes));

      But the result is the same - "Not in GZIP format"

       

      • hbjastad's avatar
        hbjastad
        Contributor

        nmrao, you keep pointing to the GUI. My question is about the API, not the GUI. I don't have any issues running accessing services from the GUI, but I struggle to decode the response from Java/Groovy code when using SoapUI as an API.