1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package edu.internet2.middleware.shibboleth.common.attribute.encoding.provider;
18
19 import java.util.List;
20
21 import org.opensaml.Configuration;
22 import org.opensaml.saml1.core.Attribute;
23 import org.opensaml.saml1.core.AttributeValue;
24 import org.opensaml.xml.XMLObject;
25 import org.opensaml.xml.XMLObjectBuilder;
26 import org.opensaml.xml.schema.XSAny;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29
30 import edu.internet2.middleware.shibboleth.common.attribute.BaseAttribute;
31 import edu.internet2.middleware.shibboleth.common.attribute.encoding.AttributeEncodingException;
32
33
34 public class SAML1XMLObjectAttributeEncoder extends AbstractSAML1AttributeEncoder {
35
36
37 private final Logger log = LoggerFactory.getLogger(SAML1XMLObjectAttributeEncoder.class);
38
39
40 private final XMLObjectBuilder<XSAny> attributeValueBuilder;
41
42
43 public SAML1XMLObjectAttributeEncoder() {
44 super();
45 attributeValueBuilder = Configuration.getBuilderFactory().getBuilder(XSAny.TYPE_NAME);
46 }
47
48
49 public Attribute encode(BaseAttribute attribute) throws AttributeEncodingException {
50 Attribute samlAttribute = attributeBuilder.buildObject();
51 populateAttribute(samlAttribute);
52
53 XSAny samlAttributeValue;
54 for (Object o : attribute.getValues()) {
55 if (o == null || !(o instanceof XMLObject)) {
56 continue;
57 }
58
59 samlAttributeValue = attributeValueBuilder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME);
60 samlAttributeValue.getUnknownXMLObjects().add((XMLObject) o);
61 samlAttribute.getAttributeValues().add(samlAttributeValue);
62 }
63
64 List<XMLObject> attributeValues = samlAttribute.getAttributeValues();
65 if (attributeValues == null || attributeValues.isEmpty()) {
66 log.debug("Unable to encode {} attribute. It does not contain any values", attribute.getId());
67 return null;
68 }
69
70 return samlAttribute;
71 }
72
73 }