}
private void buildMustUnderstandHeaders(Set<QName> mustUnderstandHeaders,
Message message,
Set<URI> serviceRoles) {
SoapVersion soapVersion = message.get(SoapVersion.class);
for(DocumentFragment df : message.getSoapHeaders().values()) {
for (int i = 0; i < df.getChildNodes().getLength(); i++) {
if (df.getChildNodes().item(i) instanceof Element) {
Element header = (Element) df.getChildNodes().item(i);
String mustUnderstand = header.getAttributeNS(soapVersion.getNamespace(),
soapVersion.getAttrNameMustUnderstand());
if (Boolean.valueOf(mustUnderstand) || "1".equals(mustUnderstand.trim())) {
String role = header.getAttributeNS(soapVersion.getNamespace(),
soapVersion.getAttrNameRole());
QName headerName = new QName(header.getNamespaceURI(), header.getLocalName());
role = role.trim();
if (role != null && role.length() > 0) {
role = role.trim();
if (role.equals(soapVersion.getNextRole()) || role.equals(soapVersion.getUltimateReceiverRole())) {
mustUnderstandHeaders.add(headerName);
} else {
for (URI roleFromBinding : serviceRoles) {
if (role.equals(roleFromBinding)) {
mustUnderstandHeaders.add(headerName);