diff --git a/core/src/main/java/org/springframework/ws/soap/SoapHeader.java b/core/src/main/java/org/springframework/ws/soap/SoapHeader.java
index 1ff102de..cb37982c 100644
--- a/core/src/main/java/org/springframework/ws/soap/SoapHeader.java
+++ b/core/src/main/java/org/springframework/ws/soap/SoapHeader.java
@@ -68,4 +68,14 @@ public interface SoapHeader extends SoapElement {
* @see SoapHeaderElement
*/
Iterator examineAllHeaderElements() throws SoapHeaderException;
+
+ /**
+ * Returns an Iterator over all the SoapHeaderElements with the specified header.
+ *
+ * @param name the qualified name of header elements to look for
+ * @return an iterator over all the header elements
+ * @throws SoapHeaderException if the header cannot be returned
+ * @see SoapHeaderElement
+ */
+ Iterator examineHeaderElements(QName name) throws SoapHeaderException;
}
diff --git a/core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeader.java b/core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeader.java
index c1dd983d..d6e088b7 100644
--- a/core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeader.java
+++ b/core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapHeader.java
@@ -28,6 +28,7 @@ import org.apache.axiom.soap.SOAPHeader;
import org.apache.axiom.soap.SOAPHeaderBlock;
import org.springframework.ws.soap.SoapHeader;
import org.springframework.ws.soap.SoapHeaderElement;
+import org.springframework.ws.soap.SoapHeaderException;
import org.springframework.xml.namespace.QNameUtils;
/**
@@ -73,7 +74,15 @@ class AxiomSoapHeader extends AxiomSoapElement implements SoapHeader {
catch (OMException ex) {
throw new AxiomSoapHeaderException(ex);
}
+ }
+ public Iterator examineHeaderElements(QName name) throws SoapHeaderException {
+ try {
+ return new AxiomSoapHeaderElementIterator(getAxiomHeader().getChildrenWithName(name));
+ }
+ catch (OMException ex) {
+ throw new AxiomSoapHeaderException(ex);
+ }
}
protected SOAPHeader getAxiomHeader() {
diff --git a/core/src/main/java/org/springframework/ws/soap/saaj/Saaj11Implementation.java b/core/src/main/java/org/springframework/ws/soap/saaj/Saaj11Implementation.java
index 9200870c..06b3c04e 100644
--- a/core/src/main/java/org/springframework/ws/soap/saaj/Saaj11Implementation.java
+++ b/core/src/main/java/org/springframework/ws/soap/saaj/Saaj11Implementation.java
@@ -100,6 +100,11 @@ public class Saaj11Implementation implements SaajImplementation {
return results.iterator();
}
+ public Iterator getChildElements(SOAPElement element, QName name) throws SOAPException {
+ Name childName = SaajUtils.toName(name, element);
+ return element.getChildElements(childName);
+ }
+
public QName getFaultCode(SOAPFault fault) {
String code = fault.getFaultCode();
int idx = code.indexOf(':');
diff --git a/core/src/main/java/org/springframework/ws/soap/saaj/Saaj12Implementation.java b/core/src/main/java/org/springframework/ws/soap/saaj/Saaj12Implementation.java
index f72a6e9d..a1f09f3e 100644
--- a/core/src/main/java/org/springframework/ws/soap/saaj/Saaj12Implementation.java
+++ b/core/src/main/java/org/springframework/ws/soap/saaj/Saaj12Implementation.java
@@ -123,6 +123,11 @@ public class Saaj12Implementation implements SaajImplementation {
return results.iterator();
}
+ public Iterator getChildElements(SOAPElement element, QName name) throws SOAPException {
+ Name childName = SaajUtils.toName(name, element);
+ return element.getChildElements(childName);
+ }
+
public SOAPEnvelope getEnvelope(SOAPMessage message) throws SOAPException {
return message.getSOAPPart().getEnvelope();
}
diff --git a/core/src/main/java/org/springframework/ws/soap/saaj/Saaj13Implementation.java b/core/src/main/java/org/springframework/ws/soap/saaj/Saaj13Implementation.java
index 35f4d9f8..07f08c71 100644
--- a/core/src/main/java/org/springframework/ws/soap/saaj/Saaj13Implementation.java
+++ b/core/src/main/java/org/springframework/ws/soap/saaj/Saaj13Implementation.java
@@ -151,6 +151,10 @@ public class Saaj13Implementation implements SaajImplementation {
return element.getAllAttributesAsQNames();
}
+ public Iterator getChildElements(SOAPElement element, QName name) throws SOAPException {
+ return element.getChildElements(name);
+ }
+
public SOAPEnvelope getEnvelope(SOAPMessage message) throws SOAPException {
return message.getSOAPPart().getEnvelope();
}
diff --git a/core/src/main/java/org/springframework/ws/soap/saaj/SaajImplementation.java b/core/src/main/java/org/springframework/ws/soap/saaj/SaajImplementation.java
index 15e9d1d9..e13f3975 100644
--- a/core/src/main/java/org/springframework/ws/soap/saaj/SaajImplementation.java
+++ b/core/src/main/java/org/springframework/ws/soap/saaj/SaajImplementation.java
@@ -62,6 +62,9 @@ public interface SaajImplementation {
/** Returns all attributes as an iterator of QNames. * */
Iterator getAllAttibutes(SOAPElement element);
+ /** Returns an iterator over the child elements with the given name. */
+ Iterator getChildElements(SOAPElement element, QName name) throws SOAPException;
+
/** Returns the envelope of the given message. */
SOAPEnvelope getEnvelope(SOAPMessage message) throws SOAPException;
diff --git a/core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeader.java b/core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeader.java
index 620358f1..77c31e9a 100644
--- a/core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeader.java
+++ b/core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeader.java
@@ -44,6 +44,16 @@ class SaajSoapHeader extends SaajSoapElement implements SoapHeader {
return new SaajSoapHeaderElementIterator(iterator);
}
+ public Iterator examineHeaderElements(QName name) throws SoapHeaderException {
+ try {
+ Iterator iterator = getImplementation().getChildElements(getSaajHeader(), name);
+ return new SaajSoapHeaderElementIterator(iterator);
+ }
+ catch (SOAPException ex) {
+ throw new SaajSoapHeaderException(ex);
+ }
+ }
+
public Iterator examineMustUnderstandHeaderElements(String actorOrRole) throws SoapHeaderException {
Iterator iterator = getImplementation().examineMustUnderstandHeaderElements(getSaajHeader(), actorOrRole);
return new SaajSoapHeaderElementIterator(iterator);
diff --git a/core/src/test/java/org/springframework/ws/soap/AbstractSoapHeaderTestCase.java b/core/src/test/java/org/springframework/ws/soap/AbstractSoapHeaderTestCase.java
index 568bcc07..b884ddce 100644
--- a/core/src/test/java/org/springframework/ws/soap/AbstractSoapHeaderTestCase.java
+++ b/core/src/test/java/org/springframework/ws/soap/AbstractSoapHeaderTestCase.java
@@ -36,8 +36,8 @@ public abstract class AbstractSoapHeaderTestCase extends AbstractSoapElementTest
public void testAddHeaderElement() throws Exception {
QName qName = new QName("http://www.springframework.org", "localName", "spring");
SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName);
- assertEquals("Invalid qName for element", qName, headerElement.getName());
assertNotNull("No SoapHeaderElement returned", headerElement);
+ assertEquals("Invalid qName for element", qName, headerElement.getName());
String payload = "";
transformer.transform(new StringSource(payload), headerElement.getResult());
assertHeaderElementEqual(headerElement,
@@ -94,10 +94,22 @@ public abstract class AbstractSoapHeaderTestCase extends AbstractSoapElementTest
assertHeaderElementEqual(headerElement, content);
}
+ public void testExamineHeaderElements() throws Exception {
+ QName qName = new QName("http://www.springframework.org", "localName", "spring");
+ soapHeader.addHeaderElement(qName);
+ Iterator iterator = soapHeader.examineHeaderElements(qName);
+ assertNotNull("No Iterator returned", iterator);
+ assertTrue("header element iterator has no elements", iterator.hasNext());
+ SoapHeaderElement headerElement = (SoapHeaderElement) iterator.next();
+ assertNotNull("No SoapHeaderElement returned", headerElement);
+ assertEquals("Invalid qName for element", qName, headerElement.getName());
+ }
+
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());
}
+
}