From: Olyutorskii Date: Tue, 25 Jun 2019 13:10:54 +0000 (+0900) Subject: strictry inhibit unknown mapping. X-Git-Tag: release-3.122.2^2~2^2~3 X-Git-Url: http://git.osdn.net/view?p=mikutoga%2FTogaGem.git;a=commitdiff_plain;h=a05e9ba0600cb2cc705ad41e91255dd2b4ddac35 strictry inhibit unknown mapping. --- diff --git a/src/main/java/jp/sfjp/mikutoga/xml/XmlResourceResolver.java b/src/main/java/jp/sfjp/mikutoga/xml/XmlResourceResolver.java index 5af9789..bf5ba8e 100644 --- a/src/main/java/jp/sfjp/mikutoga/xml/XmlResourceResolver.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/XmlResourceResolver.java @@ -7,6 +7,8 @@ package jp.sfjp.mikutoga.xml; +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; @@ -22,9 +24,7 @@ import org.w3c.dom.ls.LSInput; import org.w3c.dom.ls.LSResourceResolver; /** - * URL変換マップに従い、XML文書からの外部参照をリダイレクトする。 - * 相対URIはこのクラスをベースに解決される。 - * 主な用途は外部スキーマのリソース化など。 + * register & redirect original URI to local resource contents. */ public class XmlResourceResolver implements LSResourceResolver{ @@ -49,7 +49,7 @@ public class XmlResourceResolver /** - * コンストラクタ。 + * Constructor. */ public XmlResourceResolver(){ super(); @@ -100,14 +100,15 @@ public class XmlResourceResolver } /** - * 絶対URIと相対URIを合成したURIを返す。 - * 正規化も行われる。 + * merge base-uri text & relative URI text. * - * @param base 絶対URIでなければならない。nullでもよい。 - * @param relative 絶対URIでもよいがその場合baseは無視される。null可。 - * @return 合成結果のURLオブジェクト。必ず絶対URIになる。 - * @throws java.net.URISyntaxException URIとして変。 - * @throws java.lang.IllegalArgumentException 絶対URIが生成できない。 + * @param base base URI text must be absolute or null. + * @param relative relative URI text. + * If absolute, base is ignored. + * Ignored if null. + * @return merged absolute URI. + * @throws java.net.URISyntaxException illegal URI + * @throws java.lang.IllegalArgumentException result is not Absolute. */ protected static URI buildBaseRelativeURI(String base, String relative) throws URISyntaxException, @@ -134,13 +135,12 @@ public class XmlResourceResolver } /** - * 絶対URIと相対URIを合成したURIを返す。 - * 正規化も行われる。 + * merge base-uri & relative URI. * - * @param baseURI 絶対URIでなければならない。nullでもよい。 - * @param relativeURI 絶対URIでもよいがその場合baseは無視される。 - * @return 合成結果のURLオブジェクト。必ず絶対URIになる。 - * @throws java.lang.IllegalArgumentException 絶対URIが生成できない。 + * @param baseURI base URI must be absolute or null. + * @param relativeURI relative URI. If absolute, baseURI is ignored. + * @return merged absolute URI. + * @throws java.lang.IllegalArgumentException result is not Absolute. */ private static URI buildBaseRelativeURI(URI baseURI, URI relativeURI) throws IllegalArgumentException { @@ -163,13 +163,12 @@ public class XmlResourceResolver /** - * オリジナルURIとリダイレクト先のURIを登録する。 - * オリジナルURIへのアクセスはリダイレクトされる。 + * map original URI & local resource URI. * - * @param original オリジナルURI - * @param redirect リダイレクトURI + * @param original original URI + * @param redirect local resource URI */ - private void putRedirectedImpl(URI original, URI redirect){ + public void putRedirected(URI original, URI redirect){ URI oridinalNorm = original.normalize(); URI redirectNorm = redirect.normalize(); @@ -179,37 +178,9 @@ public class XmlResourceResolver } /** - * オリジナルURIとリダイレクト先のURIを登録する。 - * オリジナルURIへのアクセスはリダイレクトされる。 - * - * @param original オリジナルURI - * @param redirect リダイレクトURI - */ - public void putRedirected(URI original, URI redirect){ - putRedirectedImpl(original, redirect); - return; - } - - /** - * ローカル版リソース参照解決を登録する。 + * add other resolver mapping. * - * @param lsc ローカル版リソース参照解決 - */ - public void putRedirected(LocalXmlResource lsc){ - URI original = lsc.getOriginalResource(); - if(original == null) return; - - URI local = lsc.getLocalResource(); - - putRedirected(original, local); - - return; - } - - /** - * 別リゾルバの登録内容を追加登録する。 - * - * @param other 別リゾルバ + * @param other resolver */ public void putRedirected(XmlResourceResolver other){ this.uriMap.putAll(other.uriMap); @@ -217,10 +188,10 @@ public class XmlResourceResolver } /** - * 登録済みリダイレクト先URIを返す。 + * get redirected local resource URI. * - * @param original オリジナルURI - * @return リダイレクト先URI。未登録の場合はnull + * @param original original URI + * @return mapped local resource URI. null if unmapped. */ public URI getRedirected(URI original){ URI keyURI = original.normalize(); @@ -229,70 +200,67 @@ public class XmlResourceResolver } /** - * 登録済みリダイレクト先URIを返す。 + * get redirected local input stream. * - * @param original オリジナルURI - * @return リダイレクト先URI。未登録の場合はオリジナルを返す - */ - public URI resolveRedirected(URI original){ - URI result = getRedirected(original); - if(result == null) result = original; - return result; - } - - /** - * 登録済みリダイレクト先リソースの入力ストリームを得る。 - * - * @param originalURI オリジナルURI - * @return 入力ストリーム。リダイレクト先が未登録の場合はnull - * @throws java.io.IOException 入出力エラー。 - * もしくはリソースが見つからない。 + * @param originalURI original URI + * @return mapped local resource input stream. + * If no mapping, return zero-length data stream. + * @throws java.io.IOException local resource i/o error */ private InputStream getXMLResourceAsStream(URI originalURI) throws IOException{ + InputStream result; + URI resourceURI = getRedirected(originalURI); - if(resourceURI == null) return null; + if(resourceURI == null){ + result = new ByteArrayInputStream(new byte[0]); + }else{ + URL resourceURL = resourceURI.toURL(); + result = resourceURL.openStream(); + } - URL resourceURL = resourceURI.toURL(); - InputStream is = resourceURL.openStream(); + result = new BufferedInputStream(result); - return is; + return result; } /** * {@inheritDoc} * - *

URL変換したあとの入力ソースを返す。 + *

Return redirected local resource data. * * @param type {@inheritDoc} * @param namespaceURI {@inheritDoc} * @param publicId {@inheritDoc} * @param systemId {@inheritDoc} * @param baseURI {@inheritDoc} - * @return {@inheritDoc} + * @return {@inheritDoc} LSInput of local resource. + * If no mapping, return zero-length data. */ @Override - public LSInput resolveResource(String type, - String namespaceURI, - String publicId, - String systemId, - String baseURI ){ + public LSInput resolveResource( + String type, + String namespaceURI, + String publicId, + String systemId, + String baseURI ){ if(systemId == null) return null; URI originalURI; try{ originalURI = buildBaseRelativeURI(baseURI, systemId); }catch(URISyntaxException e){ - return null; + assert false; + throw new AssertionError(e); } InputStream is; try{ is = getXMLResourceAsStream(originalURI); }catch(IOException e){ - return null; + assert false; + throw new AssertionError(e); } - if(is == null) return null; LSInput input = createLSInput(); input.setBaseURI(baseURI);