Implementing GxResolver
A resolver takes a base-uri and an href and uses these two values to return a stream.
001 package org.gxml.book.common; 002 003 import java.io.File; 004 import java.io.FileNotFoundException; 005 import java.io.IOException; 006 import java.io.InputStream; 007 import java.net.URI; 008 import java.net.URISyntaxException; 009 import java.net.URL; 010 011 import org.gxml.xdm.Resolved; 012 import org.gxml.xdm.Resolver; 013 014 import com.tibco.gxml.sa.api.common.util.PreCondition; 015 016 public final class SampleResolver implements Resolver 017 { 018 final URI baseURI; 019 020 public SampleResolver(final URI baseURI) 021 { 022 this.baseURI = PreCondition.assertArgumentNotNull(baseURI, "baseURI"); 023 } 024 025 /** 026 * Convert a URI relative to a base URI into an input source. 027 * <p/> 028 * This default implementation requires that neither parameter be null, and performs the expected action to retrieve 029 * the input source (which may involve network access). 030 * 031 * @param baseURI 032 * the base URI against which the target is to be resolved; must not be null 033 * @param location 034 * the URI to resolve; must not be null 035 * @return a pair of InputStream and resolved URI. 036 */ 037 public Resolved<InputStream> resolveInputStream(final URI location) throws IOException 038 { 039 PreCondition.assertArgumentNotNull(location, "uri"); 040 if (location.isAbsolute()) 041 { 042 return retrieve(location, location); 043 } 044 else 045 { 046 PreCondition.assertArgumentNotNull(baseURI, "baseURI"); 047 048 final URI base = baseURI.normalize(); 049 final URI resolved = base.resolve(location); 050 051 return retrieve(location, resolved); 052 } 053 } 054 055 private Resolved<InputStream> retrieve(final URI location, final URI uri) throws IOException 056 { 057 PreCondition.assertArgumentNotNull(uri, "uri"); 058 059 final URL toRetrieve; 060 061 if (!uri.isAbsolute()) // assume local file 062 { 063 final File canonFile = new File(uri.toString()).getCanonicalFile(); 064 toRetrieve = canonFile.toURI().toURL(); 065 } 066 else 067 { 068 toRetrieve = uri.toURL(); 069 } 070 071 if (toRetrieve == null) 072 { 073 throw new FileNotFoundException(uri.toString()); 074 } 075 076 final InputStream stream = toRetrieve.openStream(); 077 if (stream == null) 078 { 079 throw new FileNotFoundException(toRetrieve.toString()); 080 } 081 try 082 { 083 return new Resolved<InputStream>(location, stream, toRetrieve.toURI()); 084 } 085 catch (final URISyntaxException e) 086 { 087 throw new AssertionError(e); 088 } 089 } 090 }
Copyright © Cloud Software Group, Inc. All rights reserved.