1   /*
2    * Copyright 2005 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.custommonkey.xmlunit.XMLTestCase;
28  import org.easymock.MockControl;
29  import org.springframework.ws.MockWebServiceMessage;
30  import org.springframework.ws.MockWebServiceMessageFactory;
31  import org.springframework.ws.context.DefaultMessageContext;
32  import org.springframework.ws.context.MessageContext;
33  import org.springframework.ws.server.endpoint.PayloadEndpoint;
34  
35  public class PayloadEndpointAdapterTest extends XMLTestCase {
36  
37      private PayloadEndpointAdapter adapter;
38  
39      private PayloadEndpoint endpointMock;
40  
41      private MockControl endpointControl;
42  
43      protected void setUp() throws Exception {
44          adapter = new PayloadEndpointAdapter();
45          endpointControl = MockControl.createControl(PayloadEndpoint.class);
46          endpointMock = (PayloadEndpoint) endpointControl.getMock();
47      }
48  
49      public void testSupports() throws Exception {
50          assertTrue("PayloadEndpointAdapter does not support PayloadEndpoint", adapter.supports(endpointMock));
51      }
52  
53      public void testInvoke() throws Exception {
54          MockWebServiceMessage request = new MockWebServiceMessage("<request/>");
55          final Transformer transformer = TransformerFactory.newInstance().newTransformer();
56          PayloadEndpoint endpoint = new PayloadEndpoint() {
57              public Source invoke(Source request) throws Exception {
58                  StringWriter writer = new StringWriter();
59                  transformer.transform(request, new StreamResult(writer));
60                  assertXMLEqual("Invalid request", "<request/>", writer.toString());
61                  return new StreamSource(new StringReader("<response/>"));
62              }
63          };
64          endpoint.invoke(request.getPayloadSource());
65          MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());
66          adapter.invoke(messageContext, endpoint);
67          MockWebServiceMessage response = (MockWebServiceMessage) messageContext.getResponse();
68          assertNotNull("No response created", response);
69          assertXMLEqual("Invalid payload", "<response/>", response.getPayloadAsString());
70      }
71  
72      public void testInvokeNoResponse() throws Exception {
73          MessageContext messageContext = new DefaultMessageContext(new MockWebServiceMessageFactory());
74          endpointMock.invoke(messageContext.getRequest().getPayloadSource());
75          endpointControl.setMatcher(MockControl.ALWAYS_MATCHER);
76          endpointControl.setReturnValue(null);
77          endpointControl.replay();
78          adapter.invoke(messageContext, endpointMock);
79          endpointControl.verify();
80          assertFalse("Response created", messageContext.hasResponse());
81      }
82  
83  }