1   /*
2    * Copyright 2006 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 java.util.Collections;
20  import javax.xml.namespace.QName;
21  import javax.xml.stream.XMLEventFactory;
22  import javax.xml.stream.XMLEventReader;
23  import javax.xml.stream.XMLStreamException;
24  import javax.xml.stream.events.Namespace;
25  import javax.xml.stream.events.XMLEvent;
26  import javax.xml.stream.util.XMLEventConsumer;
27  
28  /**
29   * Test case for AbstractStaxEventPayloadEndpoint.
30   *
31   * @see AbstractStaxEventPayloadEndpoint
32   */
33  public class StaxEventPayloadEndpointTest extends AbstractMessageEndpointTestCase {
34  
35      protected MessageEndpoint createNoResponseEndpoint() {
36          return new AbstractStaxEventPayloadEndpoint() {
37              protected void invokeInternal(XMLEventReader eventReader,
38                                            XMLEventConsumer eventWriter,
39                                            XMLEventFactory eventFactory) throws Exception {
40                  assertNotNull("No EventReader passed", eventReader);
41              }
42          };
43      }
44  
45      protected MessageEndpoint createNoRequestPayloadEndpoint() {
46          return new AbstractStaxEventPayloadEndpoint() {
47  
48              protected void invokeInternal(XMLEventReader eventReader,
49                                            XMLEventConsumer eventWriter,
50                                            XMLEventFactory eventFactory) throws Exception {
51                  assertNull("EventReader passed", eventReader);
52              }
53          };
54      }
55  
56      protected MessageEndpoint createResponseEndpoint() {
57          return new AbstractStaxEventPayloadEndpoint() {
58  
59              protected void invokeInternal(XMLEventReader eventReader,
60                                            XMLEventConsumer eventWriter,
61                                            XMLEventFactory eventFactory) throws XMLStreamException {
62                  assertNotNull("eventReader not given", eventReader);
63                  assertNotNull("eventWriter not given", eventWriter);
64                  assertNotNull("eventFactory not given", eventFactory);
65                  assertTrue("eventReader has not next element", eventReader.hasNext());
66                  XMLEvent event = eventReader.nextEvent();
67                  assertTrue("Not a start document", event.isStartDocument());
68                  event = eventReader.nextEvent();
69                  assertTrue("Not a start element", event.isStartElement());
70                  assertEquals("Invalid start event local name", REQUEST_ELEMENT,
71                          event.asStartElement().getName().getLocalPart());
72                  assertEquals("Invalid start event namespace", NAMESPACE_URI,
73                          event.asStartElement().getName().getNamespaceURI());
74                  assertTrue("eventReader has not next element", eventReader.hasNext());
75                  event = eventReader.nextEvent();
76                  assertTrue("Not a end element", event.isEndElement());
77                  assertEquals("Invalid end event local name", REQUEST_ELEMENT,
78                          event.asEndElement().getName().getLocalPart());
79                  assertEquals("Invalid end event namespace", NAMESPACE_URI,
80                          event.asEndElement().getName().getNamespaceURI());
81                  Namespace namespace = eventFactory.createNamespace(NAMESPACE_URI);
82                  QName name = new QName(NAMESPACE_URI, RESPONSE_ELEMENT);
83                  eventWriter
84                          .add(eventFactory.createStartElement(name, null, Collections.singleton(namespace).iterator()));
85                  eventWriter.add(eventFactory.createEndElement(name, Collections.singleton(namespace).iterator()));
86                  eventWriter.add(eventFactory.createEndDocument());
87              }
88          };
89      }
90  
91  
92  }