Skip to content

Commit 5b09b9d

Browse files
committed
Backported SWS-275 to 1.0 branch
1 parent aa3f331 commit 5b09b9d

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

core/src/main/java/org/springframework/ws/soap/saaj/SaajSoapHeader.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
package org.springframework.ws.soap.saaj;
1818

19+
import java.util.ArrayList;
1920
import java.util.Iterator;
21+
import java.util.List;
2022
import javax.xml.namespace.QName;
2123
import javax.xml.soap.SOAPException;
2224
import javax.xml.soap.SOAPHeader;
@@ -42,12 +44,12 @@ abstract class SaajSoapHeader extends SaajSoapElement implements SoapHeader {
4244

4345
public Iterator examineAllHeaderElements() throws SoapHeaderException {
4446
Iterator iterator = getImplementation().examineAllHeaderElements(getSaajHeader());
45-
return new SaajSoapHeaderElementIterator(iterator);
47+
return createSaajSoapHeaderElementIterator(iterator);
4648
}
4749

4850
public Iterator examineMustUnderstandHeaderElements(String actorOrRole) throws SoapHeaderException {
4951
Iterator iterator = getImplementation().examineMustUnderstandHeaderElements(getSaajHeader(), actorOrRole);
50-
return new SaajSoapHeaderElementIterator(iterator);
52+
return createSaajSoapHeaderElementIterator(iterator);
5153
}
5254

5355
public SoapHeaderElement addHeaderElement(QName name) throws SoapHeaderException {
@@ -68,6 +70,17 @@ public Result getResult() {
6870
return getImplementation().getResult(getSaajHeader());
6971
}
7072

73+
private Iterator createSaajSoapHeaderElementIterator(Iterator iterator) {
74+
List result = new ArrayList();
75+
while (iterator.hasNext()) {
76+
Object o = iterator.next();
77+
if (o instanceof SOAPHeaderElement) {
78+
result.add(o);
79+
}
80+
}
81+
return new SaajSoapHeaderElementIterator(result.iterator());
82+
}
83+
7184
protected static class SaajSoapHeaderElementIterator implements Iterator {
7285

7386
private final Iterator iterator;

core/src/main/java/org/springframework/ws/soap/saaj/support/SaajXmlReader.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,16 @@
2222
import javax.xml.soap.SOAPElement;
2323
import javax.xml.soap.Text;
2424

25-
import org.springframework.xml.sax.AbstractXmlReader;
2625
import org.xml.sax.Attributes;
2726
import org.xml.sax.InputSource;
2827
import org.xml.sax.SAXException;
2928
import org.xml.sax.SAXNotRecognizedException;
3029
import org.xml.sax.SAXNotSupportedException;
3130
import org.xml.sax.helpers.AttributesImpl;
3231

32+
import org.springframework.util.StringUtils;
33+
import org.springframework.xml.sax.AbstractXmlReader;
34+
3335
/**
3436
* SAX <code>XMLReader</code> that reads from a SAAJ <code>Node</code>. Consumes <code>XMLEvents</code> from an
3537
* <code>XMLEventReader</code>, and calls the corresponding methods on the SAX callback interfaces.
@@ -176,9 +178,17 @@ private Attributes getAttributes(SOAPElement element) {
176178
for (Iterator iterator = element.getNamespacePrefixes(); iterator.hasNext();) {
177179
String prefix = (String) iterator.next();
178180
String namespaceUri = element.getNamespaceURI(prefix);
179-
attributes.addAttribute("", "", "xmlns:" + prefix, "CDATA", namespaceUri);
181+
String qName;
182+
if (StringUtils.hasLength(prefix)) {
183+
qName = "xmlns:" + prefix;
184+
}
185+
else {
186+
qName = "xmlns";
187+
}
188+
attributes.addAttribute("", "", qName, "CDATA", namespaceUri);
180189
}
181190
}
191+
182192
return attributes;
183193
}
184194

0 commit comments

Comments
 (0)