KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > jxpath > XMLDocumentContainer


1 /*
2  * Copyright 1999-2004 The Apache Software Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.apache.commons.jxpath;
17
18 import java.net.URL JavaDoc;
19
20 import javax.xml.transform.Source JavaDoc;
21 import javax.xml.transform.Transformer JavaDoc;
22 import javax.xml.transform.TransformerFactory JavaDoc;
23 import javax.xml.transform.dom.DOMResult JavaDoc;
24
25 import org.apache.commons.jxpath.xml.DocumentContainer;
26 import org.w3c.dom.Document JavaDoc;
27
28 /**
29  * An XML document container reads and parses XML only when it is
30  * accessed. JXPath traverses Containers transparently -
31  * you use the same paths to access objects in containers as you
32  * do to access those objects directly. You can create
33  * XMLDocumentContainers for various XML documents that may or
34  * may not be accessed by XPaths. If they are, they will be automatically
35  * read, parsed and traversed. If they are not - they won't be
36  * read at all.
37  *
38  * @deprecated 1.1 Please use org.apache.commons.jxpath.xml.DocumentContainer
39  *
40  * @author Dmitri Plotnikov
41  * @version $Revision: 1.11 $ $Date: 2004/02/29 14:17:42 $
42  */

43 public class XMLDocumentContainer implements Container {
44
45     private DocumentContainer delegate;
46     private Object JavaDoc document;
47     private URL JavaDoc xmlURL;
48     private Source JavaDoc source;
49     private String JavaDoc parser;
50
51     /**
52      * @param URL is a URL for an XML file. Use getClass().getResource
53      * (resourceName) to load XML from a resource file.
54      */

55     public XMLDocumentContainer(URL JavaDoc xmlURL) {
56         delegate = new DocumentContainer(xmlURL);
57     }
58
59     public XMLDocumentContainer(Source JavaDoc source) {
60         this.source = source;
61         if (source == null) {
62             throw new RuntimeException JavaDoc("Source is null");
63         }
64     }
65
66     /**
67      * Reads XML, caches it internally and returns the Document.
68      */

69     public Object JavaDoc getValue() {
70         if (document == null) {
71             try {
72                 if (source != null) {
73                     DOMResult JavaDoc result = new DOMResult JavaDoc();
74                     Transformer JavaDoc trans =
75                         TransformerFactory.newInstance().newTransformer();
76                     trans.transform(source, result);
77                     document = (Document JavaDoc) result.getNode();
78                 }
79                 else {
80                     document = delegate.getValue();
81                 }
82             }
83             catch (Exception JavaDoc ex) {
84                 throw new JXPathException(
85                     "Cannot read XML from: "
86                         + (xmlURL != null
87                             ? xmlURL.toString()
88                             : (source != null
89                                 ? source.getSystemId()
90                                 : "<<undefined source>>")),
91                     ex);
92             }
93         }
94         return document;
95     }
96
97     /**
98      * Throws an UnsupportedOperationException
99      */

100     public void setValue(Object JavaDoc value) {
101         throw new UnsupportedOperationException JavaDoc();
102     }
103 }
Popular Tags