1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.wss4j.stax.impl.processor.output;
20
21 import java.util.Collections;
22 import java.util.List;
23 import java.util.Map;
24
25 import javax.xml.namespace.QName;
26
27 import org.apache.wss4j.stax.ext.WSSConstants;
28 import org.apache.wss4j.stax.impl.SecurityHeaderOrder;
29 import org.apache.xml.security.stax.ext.OutboundSecurityContext;
30 import org.apache.xml.security.stax.ext.OutputProcessorChain;
31 import org.apache.xml.security.stax.ext.SecurePart;
32 import org.apache.xml.security.stax.ext.XMLSecurityConstants;
33
34 public final class OutputProcessorUtils {
35
36 private OutputProcessorUtils() {
37
38 }
39
40 public static void updateSecurityHeaderOrder(
41 OutputProcessorChain outputProcessorChain, QName headerElementName,
42 XMLSecurityConstants.Action action, boolean onTop) {
43
44 final OutboundSecurityContext securityContext = outputProcessorChain.getSecurityContext();
45
46 Map<Object, SecurePart> dynamicSecureParts = securityContext.getAsMap(WSSConstants.ENCRYPTION_PARTS);
47 boolean encrypted = false;
48 if (dynamicSecureParts != null) {
49 encrypted = dynamicSecureParts.containsKey(headerElementName);
50 }
51
52 List<SecurityHeaderOrder> securityHeaderOrderList = securityContext.getAsList(SecurityHeaderOrder.class);
53 if (securityHeaderOrderList == null) {
54 securityContext.putList(SecurityHeaderOrder.class, Collections.<SecurityHeaderOrder>emptyList());
55 securityHeaderOrderList = securityContext.getAsList(SecurityHeaderOrder.class);
56 }
57 if (onTop) {
58 securityHeaderOrderList.add(0, new SecurityHeaderOrder(headerElementName, action, encrypted));
59 } else {
60 securityHeaderOrderList.add(new SecurityHeaderOrder(headerElementName, action, encrypted));
61 }
62 }
63
64 }