2017-07-18 10 views
0

私は、この協定のSOAPエンベロープを渡す作業を進めています。私の理解によれば、PACTはXMLをサポートしているので、SOAPメッセージで試してみたいと思っていました。私は、Javaでサンプル変更学生のCXFサービスを作成しました。私の協定テストでPactがSOAPメッセージで機能しない

次のパブリックPactFragment createFragment(PactDslWithProviderビルダー){

 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の値を返しますsuccessful.Iは、私は@PactVerification annotation.Butを削除することによって、これを確認していますアプリケーション/ Jsonの形式でpact mockingサービスからの応答を得ました。私はtext/xml形式で応答を期待していました。 それは私が契約に送るフォーマットです。

なぜXMLレスポンスではなくJSONレスポンスを返してくれるのかなんて考えました。以下 は、正確なエラーログです:悲しいこと

[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

、そうではありません。 PactはXMLをサポートしていません。あなたは潜在的に単純な文字列マッチャーを持つことができますが、それはスペースのような単一のものが存在しないときにいくつかの問題を引き起こすでしょう。

関連する問題