83 */ |
83 */ |
84 public static int length() { |
84 public static int length() { |
85 return KeyResolver._resolverVector.size(); |
85 return KeyResolver._resolverVector.size(); |
86 } |
86 } |
87 |
87 |
88 public static void hit(Iterator hintI) { |
88 public static void hit(Iterator<KeyResolverSpi> hintI) { |
89 ResolverIterator hint = (ResolverIterator) hintI; |
89 ResolverIterator hint = (ResolverIterator) hintI; |
90 int i = hint.i; |
90 int i = hint.i; |
91 if (i!=1 && hint.res ==_resolverVector) { |
91 if (i!=1 && hint.res ==_resolverVector) { |
92 List resolverVector=(List)((ArrayList)_resolverVector).clone(); |
92 List<KeyResolver> resolverVector=getResolverVectorClone(); |
93 Object ob=resolverVector.remove(i-1); |
93 KeyResolver ob=resolverVector.remove(i-1); |
94 resolverVector.add(0,ob); |
94 resolverVector.add(0,ob); |
95 _resolverVector=resolverVector; |
95 _resolverVector=resolverVector; |
96 } else { |
96 } else { |
97 //System.out.println("KeyResolver hitting"); |
97 //System.out.println("KeyResolver hitting"); |
98 } |
98 } |
111 public static final X509Certificate getX509Certificate( |
111 public static final X509Certificate getX509Certificate( |
112 Element element, String BaseURI, StorageResolver storage) |
112 Element element, String BaseURI, StorageResolver storage) |
113 throws KeyResolverException { |
113 throws KeyResolverException { |
114 |
114 |
115 // use the old vector to not be hit by updates |
115 // use the old vector to not be hit by updates |
116 List resolverVector = KeyResolver._resolverVector; |
116 List<KeyResolver> resolverVector = KeyResolver._resolverVector; |
117 for (int i = 0; i < resolverVector.size(); i++) { |
117 for (KeyResolver resolver : resolverVector) { |
118 KeyResolver resolver= |
118 if (resolver==null) { |
119 (KeyResolver) resolverVector.get(i); |
119 Object exArgs[] = { |
|
120 (((element != null) |
|
121 && (element.getNodeType() == Node.ELEMENT_NODE)) |
|
122 ? element.getTagName() |
|
123 : "null") }; |
|
124 |
|
125 throw new KeyResolverException("utils.resolver.noClass", exArgs); |
|
126 } |
|
127 if (log.isLoggable(java.util.logging.Level.FINE)) |
|
128 log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver.getClass()); |
|
129 |
|
130 X509Certificate cert=resolver.resolveX509Certificate(element, BaseURI, storage); |
|
131 if (cert!=null) { |
|
132 return cert; |
|
133 } |
|
134 } |
|
135 |
|
136 Object exArgs[] = { |
|
137 (((element != null) && (element.getNodeType() == Node.ELEMENT_NODE)) |
|
138 ? element.getTagName() |
|
139 : "null") }; |
|
140 |
|
141 throw new KeyResolverException("utils.resolver.noClass", exArgs); |
|
142 } |
|
143 /** |
|
144 * Method getInstance |
|
145 * |
|
146 * @param element |
|
147 * @param BaseURI |
|
148 * @param storage |
|
149 * @return the public key contained in the element |
|
150 * |
|
151 * @throws KeyResolverException |
|
152 */ |
|
153 public static final PublicKey getPublicKey( |
|
154 Element element, String BaseURI, StorageResolver storage) |
|
155 throws KeyResolverException { |
|
156 |
|
157 List<KeyResolver> resolverVector = KeyResolver._resolverVector; |
|
158 for (KeyResolver resolver : resolverVector) { |
120 |
159 |
121 if (resolver==null) { |
160 if (resolver==null) { |
122 Object exArgs[] = { |
161 Object exArgs[] = { |
123 (((element != null) |
162 (((element != null) |
124 && (element.getNodeType() == Node.ELEMENT_NODE)) |
163 && (element.getNodeType() == Node.ELEMENT_NODE)) |
128 throw new KeyResolverException("utils.resolver.noClass", exArgs); |
167 throw new KeyResolverException("utils.resolver.noClass", exArgs); |
129 } |
168 } |
130 if (log.isLoggable(java.util.logging.Level.FINE)) |
169 if (log.isLoggable(java.util.logging.Level.FINE)) |
131 log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver.getClass()); |
170 log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver.getClass()); |
132 |
171 |
133 X509Certificate cert=resolver.resolveX509Certificate(element, BaseURI, storage); |
172 PublicKey cert=resolver.resolvePublicKey(element, BaseURI, storage); |
134 if (cert!=null) { |
173 if (cert!=null) { |
135 return cert; |
174 if (resolverVector.indexOf(resolver)!=0 && resolverVector==_resolverVector) { |
|
175 //update resolver. |
|
176 resolverVector=getResolverVectorClone(); |
|
177 resolverVector.remove(resolver); |
|
178 resolverVector.add(0,resolver); |
|
179 _resolverVector=resolverVector; |
|
180 } |
|
181 return cert; |
136 } |
182 } |
137 } |
183 } |
138 |
184 |
139 Object exArgs[] = { |
185 Object exArgs[] = { |
140 (((element != null) && (element.getNodeType() == Node.ELEMENT_NODE)) |
186 (((element != null) && (element.getNodeType() == Node.ELEMENT_NODE)) |
141 ? element.getTagName() |
187 ? element.getTagName() |
142 : "null") }; |
188 : "null") }; |
143 |
189 |
144 throw new KeyResolverException("utils.resolver.noClass", exArgs); |
190 throw new KeyResolverException("utils.resolver.noClass", exArgs); |
145 } |
191 } |
146 /** |
192 |
147 * Method getInstance |
193 |
148 * |
194 @SuppressWarnings("unchecked") |
149 * @param element |
195 private static List<KeyResolver> getResolverVectorClone() { |
150 * @param BaseURI |
196 return (List<KeyResolver>)((ArrayList<KeyResolver>)_resolverVector).clone(); |
151 * @param storage |
|
152 * @return the public key contained in the element |
|
153 * |
|
154 * @throws KeyResolverException |
|
155 */ |
|
156 public static final PublicKey getPublicKey( |
|
157 Element element, String BaseURI, StorageResolver storage) |
|
158 throws KeyResolverException { |
|
159 |
|
160 List resolverVector = KeyResolver._resolverVector; |
|
161 for (int i = 0; i < resolverVector.size(); i++) { |
|
162 KeyResolver resolver= |
|
163 (KeyResolver) resolverVector.get(i); |
|
164 |
|
165 if (resolver==null) { |
|
166 Object exArgs[] = { |
|
167 (((element != null) |
|
168 && (element.getNodeType() == Node.ELEMENT_NODE)) |
|
169 ? element.getTagName() |
|
170 : "null") }; |
|
171 |
|
172 throw new KeyResolverException("utils.resolver.noClass", exArgs); |
|
173 } |
|
174 if (log.isLoggable(java.util.logging.Level.FINE)) |
|
175 log.log(java.util.logging.Level.FINE, "check resolvability by class " + resolver.getClass()); |
|
176 |
|
177 PublicKey cert=resolver.resolvePublicKey(element, BaseURI, storage); |
|
178 if (cert!=null) { |
|
179 if (i!=0 && resolverVector==_resolverVector) { |
|
180 //update resolver. |
|
181 resolverVector=(List)((ArrayList)_resolverVector).clone(); |
|
182 Object ob=resolverVector.remove(i); |
|
183 resolverVector.add(0,ob); |
|
184 _resolverVector=resolverVector; |
|
185 } |
|
186 return cert; |
|
187 } |
|
188 } |
|
189 |
|
190 Object exArgs[] = { |
|
191 (((element != null) && (element.getNodeType() == Node.ELEMENT_NODE)) |
|
192 ? element.getTagName() |
|
193 : "null") }; |
|
194 |
|
195 throw new KeyResolverException("utils.resolver.noClass", exArgs); |
|
196 } |
197 } |
197 |
198 |
198 /** |
199 /** |
199 * The init() function is called by com.sun.org.apache.xml.internal.security.Init.init() |
200 * The init() function is called by com.sun.org.apache.xml.internal.security.Init.init() |
200 */ |
201 */ |
201 public static void init() { |
202 public static void init() { |
202 |
203 |
203 if (!KeyResolver._alreadyInitialized) { |
204 if (!KeyResolver._alreadyInitialized) { |
204 KeyResolver._resolverVector = new ArrayList(10); |
205 KeyResolver._resolverVector = new ArrayList<KeyResolver>(10); |
205 _alreadyInitialized = true; |
206 _alreadyInitialized = true; |
206 } |
207 } |
207 } |
208 } |
208 |
209 |
209 /** |
210 /** |
320 */ |
321 */ |
321 public String resolverClassName() { |
322 public String resolverClassName() { |
322 return this._resolverSpi.getClass().getName(); |
323 return this._resolverSpi.getClass().getName(); |
323 } |
324 } |
324 |
325 |
325 static class ResolverIterator implements Iterator { |
326 static class ResolverIterator implements Iterator<KeyResolverSpi> { |
326 List res; |
327 List<KeyResolver> res; |
327 Iterator it; |
328 Iterator<KeyResolver> it; |
328 int i; |
329 int i; |
329 public ResolverIterator(List list) { |
330 public ResolverIterator(List<KeyResolver> list) { |
330 res = list; |
331 res = list; |
331 it = res.iterator(); |
332 it = res.iterator(); |
332 } |
333 } |
333 public boolean hasNext() { |
334 public boolean hasNext() { |
334 // TODO Auto-generated method stub |
335 // TODO Auto-generated method stub |
335 return it.hasNext(); |
336 return it.hasNext(); |
336 } |
337 } |
337 |
338 |
338 public Object next() { |
339 public KeyResolverSpi next() { |
339 i++; |
340 i++; |
340 KeyResolver resolver = (KeyResolver) it.next(); |
341 KeyResolver resolver = it.next(); |
341 if (resolver==null) { |
342 if (resolver==null) { |
342 throw new RuntimeException("utils.resolver.noClass"); |
343 throw new RuntimeException("utils.resolver.noClass"); |
343 } |
344 } |
344 |
345 |
345 return resolver._resolverSpi; |
346 return resolver._resolverSpi; |