KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > xerces > internal > util > EntityResolverWrapper


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 2001, 2002 The Apache Software Foundation.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Xerces" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 1999, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57
58 package com.sun.org.apache.xerces.internal.util;
59
60 import java.io.InputStream JavaDoc;
61 import java.io.IOException JavaDoc;
62 import java.io.Reader JavaDoc;
63
64 import com.sun.org.apache.xerces.internal.xni.XNIException;
65 import com.sun.org.apache.xerces.internal.xni.XMLResourceIdentifier;
66 import com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver;
67 import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
68
69 import org.xml.sax.EntityResolver JavaDoc;
70 import org.xml.sax.InputSource JavaDoc;
71 import org.xml.sax.SAXException JavaDoc;
72
73 /**
74  * This class wraps a SAX entity resolver in an XNI entity resolver.
75  *
76  * @see EntityResolver
77  *
78  * @author Andy Clark, IBM
79  *
80  * @version $Id: EntityResolverWrapper.java,v 1.5 2002/04/19 17:15:37 sandygao Exp $
81  */

82 public class EntityResolverWrapper
83     implements XMLEntityResolver {
84
85     //
86
// Data
87
//
88

89     /** The SAX entity resolver. */
90     protected EntityResolver fEntityResolver;
91
92     //
93
// Constructors
94
//
95

96     /** Default constructor. */
97     public EntityResolverWrapper() {}
98
99     /** Wraps the specified SAX entity resolver. */
100     public EntityResolverWrapper(EntityResolver entityResolver) {
101         setEntityResolver(entityResolver);
102     } // <init>(EntityResolver)
103

104     //
105
// Public methods
106
//
107

108     /** Sets the SAX entity resolver. */
109     public void setEntityResolver(EntityResolver entityResolver) {
110         fEntityResolver = entityResolver;
111     } // setEntityResolver(EntityResolver)
112

113     /** Returns the SAX entity resolver. */
114     public EntityResolver getEntityResolver() {
115         return fEntityResolver;
116     } // getEntityResolver():EntityResolver
117

118     //
119
// XMLEntityResolver methods
120
//
121

122     /**
123      * Resolves an external parsed entity. If the entity cannot be
124      * resolved, this method should return null.
125      *
126      * @param resourceIdentifier contains the physical co-ordinates of the resource to be resolved
127      *
128      * @throws XNIException Thrown on general error.
129      * @throws IOException Thrown if resolved entity stream cannot be
130      * opened or some other i/o error occurs.
131      */

132     public XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier)
133         throws XNIException, IOException JavaDoc {
134
135         // When both pubId and sysId are null, the user's entity resolver
136
// can do nothing about it. We'd better not bother calling it.
137
// This happens when the resourceIdentifier is a GrammarDescription,
138
// which describes a schema grammar of some namespace, but without
139
// any schema location hint. -Sg
140
String JavaDoc pubId = resourceIdentifier.getPublicId();
141         String JavaDoc sysId = resourceIdentifier.getExpandedSystemId();
142         if (pubId == null && sysId == null)
143             return null;
144
145         // resolve entity using SAX entity resolver
146
if (fEntityResolver != null && resourceIdentifier != null) {
147             try {
148                 InputSource inputSource = fEntityResolver.resolveEntity(pubId, sysId);
149                 if (inputSource != null) {
150                     String JavaDoc publicId = inputSource.getPublicId();
151                     String JavaDoc systemId = inputSource.getSystemId();
152                     String JavaDoc baseSystemId = resourceIdentifier.getBaseSystemId();
153                     InputStream JavaDoc byteStream = inputSource.getByteStream();
154                     Reader JavaDoc charStream = inputSource.getCharacterStream();
155                     String JavaDoc encoding = inputSource.getEncoding();
156                     XMLInputSource xmlInputSource =
157                         new XMLInputSource(publicId, systemId, baseSystemId);
158                     xmlInputSource.setByteStream(byteStream);
159                     xmlInputSource.setCharacterStream(charStream);
160                     xmlInputSource.setEncoding(encoding);
161                     return xmlInputSource;
162                 }
163             }
164
165             // error resolving entity
166
catch (SAXException JavaDoc e) {
167                 Exception JavaDoc ex = e.getException();
168                 if (ex == null) {
169                     ex = e;
170                 }
171                 throw new XNIException(ex);
172             }
173         }
174
175         // unable to resolve entity
176
return null;
177
178     } // resolveEntity(String,String,String):XMLInputSource
179
}
180
Popular Tags