首页 > 解决方案 > 如何在wiremock上创建多个响应转换器

问题描述

如何在wiremock上创建多个变压器?我在文档中看到您可以在一个存根上调用两个响应转换器,但我不确定您如何创建第二个响应转换器并为其命名?

所以这是我创建的第二个变压器

public class test2 extends ResponseDefinitionTransformer{
 String message;
    boolean value;




  @Override
    public ResponseDefinition transform(Request rqst, ResponseDefinition rd, FileSource fs, Parameters prmtrs) {
         message =  rqst.getBodyAsString();
         value = validateXMLSchema("xxx", message);
                      System.out.println("SECOND TRANSFORMER EXECUTED");
        System.out.println("THIS IS THE CONDITION OF THE VALUE: " + value );
         if(SchemaMatches){

        return new ResponseDefinitionBuilder()
                    .withHeader("Content-Type", "application/xml")
                    .withStatus(200)
                    .withBody("XSD SCHEMA MATCHES")
                    .build();      
        }else{
              return new ResponseDefinitionBuilder()
                    .withHeader("Content-Type", "application/xml")
                    .withStatus(404)
                    .withBody("MISMATCH")
                    .build();

         }
    }
  @Override
public boolean applyGlobally() {
    return false;
}
    @Override
    public String getName() {
        return "tests";
    }

}

这是我创建的第一个转换器:

public class Stub extends ResponseDefinitionTransformer {
@Override
    public ResponseDefinition transform(com.github.tomakehurst.wiremock.http.Request rqst, ResponseDefinition rd, FileSource fs, Parameters prmtrs) {
      message =  rqst.getBodyAsString();
if(MandatoryFieldsExist){
        return new ResponseDefinitionBuilder()
                    .withHeader("Content-Type", "application/xml")
                    .withStatus(200)
                    .withBody("MANDATORY FIELDS PRESENT ")
                    .build();      
        }


else{
            return new ResponseDefinitionBuilder()
                    .withHeader("Content-Type", "application/xml")
                    .withStatus(404)
                    .withBody("MISMATCH")
                    .build();

        }

    }

    @Override
public boolean applyGlobally() {
    return false;
}

    @Override
    public String getName() {
        return "example";
    }

最后,这是我调用转换器的主要方法中的代码:

WireMockServer wireMockServer = new WireMockServer(WireMockConfiguration.options().port(8080).extensions(Stub.class, test2.class));
        WireMock wireMockClient = new WireMock();
        wireMockServer.start();               
        stubFor(post(urlEqualTo("/user/test"))               
                .willReturn(aResponse()
                        .withStatus(200)
                        .withHeader("Content-Type", "application/xml")
                        .withBody("XML RECIEVED")
                        .withTransformers("example","tests")

                )
        );

标签: javawiremock

解决方案


推荐阅读