/* * Copyright 2005-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.ws.soap; import java.util.Iterator; import javax.xml.namespace.QName; import org.springframework.xml.transform.StringResult; import org.springframework.xml.transform.StringSource; import org.junit.Test; import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; import static org.junit.Assert.*; public abstract class AbstractSoapHeaderTestCase extends AbstractSoapElementTestCase { protected SoapHeader soapHeader; protected static final String NAMESPACE = "http://www.springframework.org"; protected static final String PREFIX = "spring"; @Override protected final SoapElement createSoapElement() throws Exception { soapHeader = createSoapHeader(); return soapHeader; } protected abstract SoapHeader createSoapHeader() throws Exception; @Test public void testAddHeaderElement() throws Exception { QName qName = new QName(NAMESPACE, "localName", PREFIX); SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName); assertNotNull("No SoapHeaderElement returned", headerElement); assertEquals("Invalid qName for element", qName, headerElement.getName()); Iterator<SoapHeaderElement> iterator = soapHeader.examineAllHeaderElements(); assertTrue("SoapHeader has no elements", iterator.hasNext()); String payload = "<content xmlns='http://www.springframework.org'/>"; transformer.transform(new StringSource(payload), headerElement.getResult()); assertHeaderElementEqual(headerElement, "<spring:localName xmlns:spring='http://www.springframework.org'><spring:content/></spring:localName>"); } @Test public void testRemoveHeaderElement() throws Exception { QName qName = new QName(NAMESPACE, "localName", PREFIX); soapHeader.removeHeaderElement(qName); soapHeader.addHeaderElement(qName); soapHeader.removeHeaderElement(qName); Iterator<SoapHeaderElement> iterator = soapHeader.examineAllHeaderElements(); assertFalse("SoapHeader has elements", iterator.hasNext()); } @Test public void testExamineAllHeaderElement() throws Exception { QName qName = new QName(NAMESPACE, "localName", PREFIX); SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName); assertEquals("Invalid qName for element", qName, headerElement.getName()); assertNotNull("No SoapHeaderElement returned", headerElement); String payload = "<content xmlns='http://www.springframework.org'/>"; transformer.transform(new StringSource(payload), headerElement.getResult()); Iterator<SoapHeaderElement> iterator = soapHeader.examineAllHeaderElements(); assertNotNull("header element iterator is null", iterator); assertTrue("header element iterator has no elements", iterator.hasNext()); headerElement = iterator.next(); assertEquals("Invalid qName for element", qName, headerElement.getName()); StringResult result = new StringResult(); transformer.transform(headerElement.getSource(), result); assertXMLEqual("Invalid contents of header element", "<spring:localName xmlns:spring='http://www.springframework.org'><spring:content/></spring:localName>", result.toString()); assertFalse("header element iterator has too many elements", iterator.hasNext()); } @Test public void testExamineHeaderElementWithName() throws Exception { QName name1 = new QName(NAMESPACE, "name1", PREFIX); QName name2 = new QName(NAMESPACE, "name2", PREFIX); soapHeader.addHeaderElement(name1); soapHeader.addHeaderElement(name2); Iterator<SoapHeaderElement> iterator = soapHeader.examineHeaderElements(name1); assertNotNull("header element iterator is null", iterator); assertTrue("header element iterator has no elements", iterator.hasNext()); SoapHeaderElement headerElement = iterator.next(); assertEquals("Invalid qName for element", name1, headerElement.getName()); assertFalse("header element iterator has too many elements", iterator.hasNext()); } @Test public void testExamineMustUnderstandHeaderElements() throws Exception { QName qName1 = new QName(NAMESPACE, "localName1", PREFIX); SoapHeaderElement headerElement1 = soapHeader.addHeaderElement(qName1); headerElement1.setMustUnderstand(true); headerElement1.setActorOrRole("role1"); QName qName2 = new QName(NAMESPACE, "localName2", PREFIX); SoapHeaderElement headerElement2 = soapHeader.addHeaderElement(qName2); headerElement2.setMustUnderstand(true); headerElement2.setActorOrRole("role2"); Iterator<SoapHeaderElement> iterator = soapHeader.examineMustUnderstandHeaderElements("role1"); assertNotNull("header element iterator is null", iterator); assertTrue("header element iterator has no elements", iterator.hasNext()); SoapHeaderElement headerElement = iterator.next(); assertEquals("Invalid name on header element", qName1, headerElement.getName()); assertTrue("MustUnderstand not set on header element", headerElement.getMustUnderstand()); assertEquals("Invalid role on header element", "role1", headerElement.getActorOrRole()); assertFalse("header element iterator has too many elements", iterator.hasNext()); } @Test public void testGetResult() throws Exception { String content = "<spring:localName xmlns:spring='http://www.springframework.org'><spring:content/></spring:localName>"; transformer.transform(new StringSource(content), soapHeader.getResult()); Iterator<SoapHeaderElement> iterator = soapHeader.examineAllHeaderElements(); assertTrue("Header has no children", iterator.hasNext()); SoapHeaderElement headerElement = iterator.next(); assertFalse("Header has too many children", iterator.hasNext()); assertHeaderElementEqual(headerElement, content); } protected void assertHeaderElementEqual(SoapHeaderElement headerElement, String expected) throws Exception { StringResult result = new StringResult(); transformer.transform(headerElement.getSource(), result); assertXMLEqual("Invalid contents of header element", expected, result.toString()); } }