Pact не работает для сообщений SOAP

Я работаю над передачей SOAP-конверта для договора. Насколько я понимаю, PACT поддерживает XML, поэтому я хотел попробовать сообщение SOAP. Я создал примерный CXF-сервис для студентов на Java. Следующее - мой тест пакта

public PactFragment createFragment(PactDslWithProvider builder) {

        Map<String, String> headersXml = new HashMap<>(); 
        headersXml.put("Content-Type","text/xml;charset=UTF-8" ); 

        //headers.put("Content-Type", "application/json"); 

        return builder
                .given("welcomeTest")                   
                .uponReceiving("a request to get the welcome test of a user")
                .path("/web/ChangeStudent?wsdl")
                //.query("wsdl")
                .method("POST").body("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.pactsoap.com/\"><soapenv:Header/>"+
                "<soapenv:Body><ser:changeName><arg0><name>Nandess</name></arg0></ser:changeName></soapenv:Body></soapenv:Envelope>")
                .willRespondWith()
                .headers(headersXml)
                .status(200)
                .body("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns2:changeNameResponse xmlns:ns2=\"http://service.pactsoap.com/\">".toLowerCase()+
                 "<return><name>HELLO myNamre</name></return></ns2:changeNameResponse></soap:Body></soap:Envelope>".toLowerCase())
                .toFragment();


    }

 @Test
        @PactVerification(value = "pactEmailsoap" , fragment = "createFragment") 
        public void runTest(){ 
             String result = new EmailService(rule.getConfig().url()).ChangeStudentDetailsNew();        
            assertEquals(result.toLowerCase(),"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns2:changeNameResponse xmlns:ns2=\"http://service.pactsoap.com/\">".toLowerCase()+
                     "<return><name>HELLO Nandess</name></return></ns2:changeNameResponse></soap:Body></soap:Envelope>".toLowerCase());
                     }

Теперь моя служба корректно возвращает значения в RunTest, и Junit успешно работает. Я подтвердил это, удалив аннотацию @PactVerification. Но я получаю ответ от службы pact mocking в формате application/Json. Где я ожидал ответа в text/xml формат. Это формат, который я посылаю в пакт.

Любая идея, почему он возвращает мне ответ JSON вместо ответа XML. Ниже приведен точный журнал ошибок:

[nioEventLoopGroup-3-1] DEBUG au.com.dius.pact.consumer.UnfilteredMockProvider - Generating response:   status: 500 
    headers: [Access-Control-Allow-Origin:*, Content-Type:application/json, X-Pact-Unexpected-Request:1] 
    matchers: [:] 
    body: au.com.dius.pact.model.OptionalBody(PRESENT, { "error": "Unexpected request : \tmethod: POST\n\tpath: \/web\/ChangeStudent\n\tquery: [:]\n\theaders: [SOAPAction:\"\", Connection:Keep-Alive, Content-Length:262, Content-Type:text\/xml;charset=UTF-8, Accept-Encoding:gzip,deflate, User-Agent:Apache-HttpClient\/4.1.1 (java 1.5), Host:localhost:22762]\n\tmatchers: [:]\n\tbody: au.com.dius.pact.model.OptionalBody(PRESENT, <SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\" xmlns:ser=\"http:\/\/service.pactsoap.com\/\"><SOAP-ENV:Header\/><SOAP-ENV:Body><ser:changeName><arg0><name>myName<\/name><\/arg0><\/ser:changeName><\/SOAP-ENV:Body><\/SOAP-ENV:Envelope>)" })

1 ответ

К сожалению, это не так; Пакт не поддерживает XML. Возможно, у вас может быть простое сопоставление строк, но это может вызвать некоторые проблемы, когда у вас есть неуместная вещь, например пробел.

Другие вопросы по тегам