1   /*
2    * Copyright 2005-2010 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.springframework.ws.server.endpoint.adapter;
18  
19  import java.io.StringReader;
20  import java.io.StringWriter;
21  import javax.xml.transform.Source;
22  import javax.xml.transform.Transformer;
23  import javax.xml.transform.TransformerFactory;
24  import javax.xml.transform.stream.StreamResult;
25  import javax.xml.transform.stream.StreamSource;
26  
27  import org.springframework.ws.MockWebServiceMessage;
28  import org.springframework.ws.MockWebServiceMessageFactory;
29  import org.springframework.ws.context.DefaultMessageContext;
30  import org.springframework.ws.context.MessageContext;
31  import org.springframework.ws.server.endpoint.PayloadEndpoint;
32  
33  import org.junit.Assert;
34  import org.junit.Before;
35  import org.junit.Test;
36  
37  import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
38  import static org.easymock.EasyMock.*;
39  
40  public class PayloadEndpointAdapterTest {
41  
42      private PayloadEndpointAdapter adapter;
43  
44      private PayloadEndpoint endpointMock;
45  
46      @Before
47      public void setUp() throws Exception {
48          adapter = new PayloadEndpointAdapter();
49          endpointMock = createMock(PayloadEndpoint.class);
50      }
51  
52      @Test
53      public void testSupports() throws Exception {
54          Assert.assertTrue("PayloadEndpointAdapter does not support PayloadEndpoint", adapter.supports(endpointMock));
55      }
56  
57      @Test
58      public void testInvoke() throws Exception {
59          MockWebServiceMessage request = new MockWebServiceMessage("<request/>");
60          final Transformer transformer = TransformerFactory.newInstance().newTransformer();
61          PayloadEndpoint endpoint = new PayloadEndpoint() {
62              public Source invoke(Source request) throws Exception {
63                  StringWriter writer = new StringWriter();
64                  transformer.transform(request, new StreamResult(writer));
65                  assertXMLEqual("Invalid request", "<request/>", writer.toString());
66                  return new StreamSource(new StringReader("<response/>"));
67              }
68          };
69          endpoint.invoke(request.getPayloadSource());
70          MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());
71          adapter.invoke(messageContext, endpoint);
72          MockWebServiceMessage response = (MockWebServiceMessage) messageContext.getResponse();
73          Assert.assertNotNull("No response created", response);
74          assertXMLEqual("Invalid payload", "<response/>", response.getPayloadAsString());
75      }
76  
77      @Test
78      public void testInvokeNoResponse() throws Exception {
79          MockWebServiceMessage request = new MockWebServiceMessage("<request/>");
80          MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());
81          expect(endpointMock.invoke(isA(Source.class))).andReturn(null);
82  
83          replay(endpointMock);
84  
85          adapter.invoke(messageContext, endpointMock);
86  
87          verify(endpointMock);
88  
89          Assert.assertFalse("Response created", messageContext.hasResponse());
90      }
91  
92  }