1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.opensaml.saml2.metadata.provider;
18
19 import org.opensaml.xml.XMLObject;
20 import org.opensaml.xml.io.Unmarshaller;
21 import org.opensaml.xml.io.UnmarshallingException;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24 import org.w3c.dom.Element;
25
26
27
28
29
30
31
32
33 public class DOMMetadataProvider extends AbstractObservableMetadataProvider implements MetadataProvider {
34
35
36 private final Logger log = LoggerFactory.getLogger(DOMMetadataProvider.class);
37
38
39 private Element metadataElement;
40
41
42 private XMLObject metadata;
43
44
45
46
47
48
49 public DOMMetadataProvider(Element mdElement) {
50 super();
51 metadataElement = mdElement;
52 }
53
54
55 public XMLObject getMetadata() {
56 return metadata;
57 }
58
59
60
61
62
63
64
65 public synchronized void initialize() throws MetadataProviderException {
66 refreshMetadata();
67 }
68
69
70
71
72
73
74
75 private synchronized void refreshMetadata() throws MetadataProviderException {
76 try {
77 Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(metadataElement);
78 XMLObject metadataTemp = unmarshaller.unmarshall(metadataElement);
79 filterMetadata(metadataTemp);
80 releaseMetadataDOM(metadataTemp);
81 metadata = metadataTemp;
82 emitChangeEvent();
83 } catch (UnmarshallingException e) {
84 String errorMsg = "Unable to unmarshall metadata element";
85 log.error(errorMsg, e);
86 throw new MetadataProviderException(errorMsg, e);
87 } catch (FilterException e) {
88 String errorMsg = "Unable to filter metadata";
89 log.error(errorMsg, e);
90 throw new MetadataProviderException(errorMsg, e);
91 }
92 }
93 }