Forum Discussion

JPT_ENT's avatar
JPT_ENT
Occasional Contributor
16 years ago

Problems with Listeners

I'm using SoapUI Pro, and am trying to use a listener to strip out certain tag items from requests (those that contain a value of "--null--"). This is necessary because I'm using a datasource for the request, and some the test cases contain null values. Given I don't want to send empty tags through, I need to to remove them.

Looking through the forum, I found the following example which is just what I'm after. The only problem is, it's giving me an error when I run it.


Here the details...


demo-listeners.xml
------------------------




    listenerClass="com.eviware.soapui.support.scripting.listeners.ScriptRequestFilter"
    groovyClass="soapui.demo.DemoRequestFilter"
    listenerInterface="com.eviware.soapui.impl.wsdl.submit.RequestFilter"/>



DemoRequestFilter.groovy
---------------------------------
package soapui.demo

import com.eviware.soapui.SoapUI
import com.eviware.soapui.impl.wsdl.submit.transports.http.BaseHttpRequestTransport
import com.eviware.soapui.impl.wsdl.submit.RequestFilter
import com.eviware.soapui.impl.wsdl.WsdlRequest
import com.eviware.soapui.model.iface.Request
import com.eviware.soapui.model.iface.Response
import com.eviware.soapui.model.iface.SubmitContext

public class DemoRequestFilter implements RequestFilter
{
public void afterRequest( SubmitContext context, Response response )
{}

public void filterRequest( SubmitContext context, WsdlRequest wsdlRequest )


      String content = (String) context.getProperty( BaseHttpRequestTransport.REQUEST_CONTENT ) 
if( content == null )
      {
      System.err.println( "Missing request content in context, skipping demofilter" )
      }
      else
      {
        System.out.println( "running demofilter" )
        content = content.replaceAll( "<(.+)>--null--", "" )
        context.setProperty( BaseHttpRequestTransport.REQUEST_CONTENT, content )
      }
    }
}


I get 2 identical errors shown in the log when submitting requests. I don't get any errors when starting up soapUI, the class seems to be loaded fine it's just when they're actually being run that problems occur.

16:06:42,521 ERROR [SoapUI] An error occured [startup failed:
soapui.demo.DemoRequestFilter: 11: Can't have an abstract method in a non-abstra
ct class. The class 'soapui.demo.DemoRequestFilter' must be declared abstract or
the method 'void afterRequest(com.eviware.soapui.model.iface.SubmitContext, com
.eviware.soapui.model.iface.Request)' must be implemented.
@ line 11, column 1.
  public class DemoRequestFilter implements RequestFilter

Can anyone help??

1 Reply

  • JPT_ENT's avatar
    JPT_ENT
    Occasional Contributor
    Solved this using the built-in event handlers. I have the following as a RequestFilter.filterRequest. It seems to do the job.


    import com.eviware.soapui.support.xml.XmlUtils

    def request = context.expand( '${Request#Request}' )
    def parsedXml = new XmlParser().parseText(request)
    def writer = new StringWriter()
    new XmlNodePrinter(new PrintWriter(writer)).print(parsedXml)
    def result = writer.toString()

    result = XmlUtils.prettyPrintXml(result)
    result = result.replaceAll( "<(.+)>---null---", "")
    result = XmlUtils.prettyPrintXml(result)

    context.requestContent = result