1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.http.functions.config;
20
21 import javax.inject.Inject;
22 import javax.inject.Singleton;
23 import javax.xml.parsers.SAXParser;
24 import javax.xml.parsers.SAXParserFactory;
25
26 import org.jclouds.http.functions.ParseSax;
27 import org.jclouds.http.functions.ParseSax.HandlerWithResult;
28 import org.xml.sax.XMLReader;
29
30 import com.google.inject.AbstractModule;
31 import com.google.inject.Provides;
32 import com.google.inject.Scopes;
33
34
35
36
37
38
39 public class SaxParserModule extends AbstractModule {
40
41 protected void configure() {
42 bind(ParseSax.Factory.class).to(Factory.class).in(Scopes.SINGLETON);
43 }
44
45 private static class Factory implements ParseSax.Factory {
46 @Inject
47 private SAXParserFactory factory;
48
49 public <T> ParseSax<T> create(HandlerWithResult<T> handler) {
50 SAXParser saxParser;
51 try {
52 saxParser = factory.newSAXParser();
53 XMLReader parser = saxParser.getXMLReader();
54 return new ParseSax<T>(parser, handler);
55 } catch (Exception e) {
56 throw new RuntimeException(e);
57 }
58
59 }
60 }
61
62 @Provides
63 @Singleton
64 SAXParserFactory provideSAXParserFactory() {
65 SAXParserFactory factory = SAXParserFactory.newInstance();
66 factory.setNamespaceAware(false);
67 factory.setValidating(false);
68 return factory;
69 }
70
71 }