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;
18  
19  import javax.xml.stream.XMLOutputFactory;
20  import javax.xml.stream.XMLStreamConstants;
21  import javax.xml.stream.XMLStreamReader;
22  import javax.xml.stream.XMLStreamWriter;
23  import javax.xml.transform.Transformer;
24  import javax.xml.transform.TransformerFactory;
25  
26  import org.apache.axiom.om.OMAbstractFactory;
27  import org.apache.axiom.soap.SOAPFactory;
28  import org.springframework.ws.context.DefaultMessageContext;
29  import org.springframework.ws.context.MessageContext;
30  import org.springframework.ws.soap.axiom.AxiomSoapMessage;
31  import org.springframework.ws.soap.axiom.AxiomSoapMessageFactory;
32  import org.springframework.xml.transform.StringResult;
33  import org.springframework.xml.transform.StringSource;
34  
35  /**
36   * Test case for AbstractStaxStreamPayloadEndpoint.
37   *
38   * @see AbstractStaxStreamPayloadEndpoint
39   */
40  public class StaxStreamPayloadEndpointTest extends AbstractMessageEndpointTestCase {
41  
42      protected MessageEndpoint createNoResponseEndpoint() {
43          return new AbstractStaxStreamPayloadEndpoint() {
44              protected void invokeInternal(XMLStreamReader streamReader, XMLStreamWriter streamWriter) throws Exception {
45                  assertNotNull("No StreamReader passed", streamReader);
46              }
47          };
48      }
49  
50      protected MessageEndpoint createNoRequestPayloadEndpoint() {
51          return new AbstractStaxStreamPayloadEndpoint() {
52              protected void invokeInternal(XMLStreamReader streamReader, XMLStreamWriter streamWriter) throws Exception {
53                  assertNull("StreamReader passed", streamReader);
54              }
55          };
56      }
57  
58      protected MessageEndpoint createResponseEndpoint() {
59          return new AbstractStaxStreamPayloadEndpoint() {
60              protected void invokeInternal(XMLStreamReader streamReader, XMLStreamWriter streamWriter) throws Exception {
61                  assertNotNull("No streamReader passed", streamReader);
62                  assertNotNull("No streamWriter passed", streamReader);
63                  assertEquals("Not a start element", XMLStreamConstants.START_ELEMENT, streamReader.next());
64                  assertEquals("Invalid start event local name", REQUEST_ELEMENT, streamReader.getLocalName());
65                  assertEquals("Invalid start event namespace", NAMESPACE_URI, streamReader.getNamespaceURI());
66                  assertTrue("streamReader has no next element", streamReader.hasNext());
67                  assertEquals("Not a end element", XMLStreamConstants.END_ELEMENT, streamReader.next());
68                  assertEquals("Invalid end event local name", REQUEST_ELEMENT, streamReader.getLocalName());
69                  assertEquals("Invalid end event namespace", NAMESPACE_URI, streamReader.getNamespaceURI());
70                  streamWriter.writeEmptyElement(NAMESPACE_URI, RESPONSE_ELEMENT);
71                  streamWriter.flush();
72                  streamWriter.close();
73              }
74  
75              protected XMLOutputFactory createXmlOutputFactory() {
76                  XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
77                  outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.TRUE);
78                  return outputFactory;
79              }
80          };
81      }
82  
83      public void testAxiomResponse() throws Exception {
84          Transformer transformer = TransformerFactory.newInstance().newTransformer();
85          SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory();
86          AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory);
87          transformer.transform(new StringSource(REQUEST), request.getPayloadResult());
88          AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory();
89          soapMessageFactory.afterPropertiesSet();
90          MessageContext context = new DefaultMessageContext(request, soapMessageFactory);
91  
92          MessageEndpoint endpoint = createResponseEndpoint();
93          endpoint.invoke(context);
94          assertTrue("context has not response", context.hasResponse());
95          StringResult stringResult = new StringResult();
96          transformer.transform(context.getResponse().getPayloadSource(), stringResult);
97          assertXMLEqual(RESPONSE, stringResult.toString());
98      }
99  
100     public void testAxiomNoResponse() throws Exception {
101         Transformer transformer = TransformerFactory.newInstance().newTransformer();
102         SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory();
103         AxiomSoapMessage request = new AxiomSoapMessage(axiomFactory);
104         transformer.transform(new StringSource(REQUEST), request.getPayloadResult());
105         AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory();
106         soapMessageFactory.afterPropertiesSet();
107         MessageContext context = new DefaultMessageContext(request, soapMessageFactory);
108 
109         MessageEndpoint endpoint = createNoResponseEndpoint();
110         endpoint.invoke(context);
111         assertFalse("context has response", context.hasResponse());
112     }
113 
114 
115 }