1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.wss4j.policy.builders;
20
21 import org.apache.neethi.Assertion;
22 import org.apache.neethi.AssertionBuilderFactory;
23 import org.apache.neethi.Policy;
24 import org.apache.neethi.builders.AssertionBuilder;
25 import org.apache.wss4j.policy.SP13Constants;
26 import org.apache.wss4j.policy.SPConstants;
27 import org.apache.wss4j.policy.SPUtils;
28 import org.apache.wss4j.policy.model.KeyValueToken;
29 import org.w3c.dom.Element;
30
31 import javax.xml.namespace.QName;
32
33 public class KeyValueTokenBuilder implements AssertionBuilder<Element> {
34
35 @Override
36 public Assertion build(Element element, AssertionBuilderFactory factory) throws IllegalArgumentException {
37
38 final SPConstants.SPVersion spVersion = SPConstants.SPVersion.getSPVersion(element.getNamespaceURI());
39 final String includeTokenValue = SPUtils.getAttribute(element, spVersion.getSPConstants().getIncludeToken());
40 final Element issuer = SPUtils.getFirstChildElement(element, spVersion.getSPConstants().getIssuer());
41 if (issuer != null) {
42 throw new IllegalArgumentException(SPConstants.ERR_INVALID_POLICY);
43 }
44 final String issuerName = SPUtils.getFirstChildElementText(element, spVersion.getSPConstants().getIssuerName());
45 if (issuerName != null) {
46 throw new IllegalArgumentException(SPConstants.ERR_INVALID_POLICY);
47 }
48 final Element nestedPolicyElement = SPUtils.getFirstPolicyChildElement(element);
49
50 Policy nestedPolicy = null;
51 if (nestedPolicyElement == null) {
52 nestedPolicy = new Policy();
53 } else {
54 nestedPolicy = factory.getPolicyEngine().getPolicy(nestedPolicyElement);
55 }
56
57 KeyValueToken keyValueToken = new KeyValueToken(
58 spVersion,
59 spVersion.getSPConstants().getInclusionFromAttributeValue(includeTokenValue),
60 nestedPolicy
61 );
62 keyValueToken.setOptional(SPUtils.isOptional(element));
63 keyValueToken.setIgnorable(SPUtils.isIgnorable(element));
64 return keyValueToken;
65 }
66
67 @Override
68 public QName[] getKnownElements() {
69 return new QName[]{SP13Constants.KEY_VALUE_TOKEN};
70 }
71 }