[Yanel-commits] rev 22797 - in public/yanel/trunk/src: core/java/org/wyona/yanel/core/transformation resources/xml/src/java/org/wyona/yanel/impl/resources

josias at wyona.com josias at wyona.com
Mon Feb 19 22:27:34 CET 2007


Author: josias
Date: 2007-02-19 22:27:33 +0100 (Mon, 19 Feb 2007)
New Revision: 22797

Modified:
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/I18nTransformer.java
   public/yanel/trunk/src/resources/xml/src/java/org/wyona/yanel/impl/resources/XMLResource.java
Log:
allow to set the entity resolver of the i18n transformer and re-enabled i18n transformation of the xml resource, it uses the catalog resolver now. fixes bug #4761

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/I18nTransformer.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/I18nTransformer.java	2007-02-19 21:23:09 UTC (rev 22796)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/I18nTransformer.java	2007-02-19 21:27:33 UTC (rev 22797)
@@ -1,11 +1,14 @@
 package org.wyona.yanel.core.transformation;
 
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.Locale;
 import java.util.ResourceBundle;
 import org.apache.log4j.Category;
 import org.xml.sax.Attributes;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
@@ -17,6 +20,7 @@
     private ByteArrayInputStream byteArrayInputStream = null;
     private StringBuffer transformedXmlAsBuffer = null;
     private String cachedEname;
+    private EntityResolver entityResolver;
 
     public I18nTransformer(String messages, String language) {
         currentLocale = new Locale(language);
@@ -130,4 +134,21 @@
         log.debug("[" + inputString + "] replaced with [" + replacedAmpersand + "]");
         return replacedAmpersand;
     }
+
+    public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
+        try {
+            if (this.entityResolver != null) {
+                    return this.entityResolver.resolveEntity(publicId, systemId);
+            } else {
+                return super.resolveEntity(publicId, systemId);
+            }
+        } catch (IOException e) {
+            log.error(e.getMessage(), e);
+            throw new SAXException(e);
+        }
+    }
+
+    public void setEntityResolver(EntityResolver entityResolver) {
+        this.entityResolver = entityResolver;
+    }
 }

Modified: public/yanel/trunk/src/resources/xml/src/java/org/wyona/yanel/impl/resources/XMLResource.java
===================================================================
--- public/yanel/trunk/src/resources/xml/src/java/org/wyona/yanel/impl/resources/XMLResource.java	2007-02-19 21:23:09 UTC (rev 22796)
+++ public/yanel/trunk/src/resources/xml/src/java/org/wyona/yanel/impl/resources/XMLResource.java	2007-02-19 21:27:33 UTC (rev 22797)
@@ -64,6 +64,7 @@
 import java.util.jar.JarInputStream;
 
 import org.apache.log4j.Category;
+import org.apache.xml.resolver.tools.CatalogResolver;
 
 /**
  *
@@ -135,28 +136,26 @@
                 java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
 
                 org.xml.sax.XMLReader xmlReader = org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
-                xmlReader.setEntityResolver(new org.apache.xml.resolver.tools.CatalogResolver());
+                CatalogResolver catalogResolver = new CatalogResolver();
+                xmlReader.setEntityResolver(catalogResolver);
                 transformer.transform(new SAXSource(xmlReader, new org.xml.sax.InputSource(getContentXML(repo, yanelPath, revisionName))), new StreamResult(baos));
                 
                 InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
                 defaultView.setInputStream(inputStream);
 
-                // TODO: Seems to have problems accessing remote DTDs when being offline
-/*
                 I18nTransformer i18nTransformer = new I18nTransformer("global", getLanguage());
+                i18nTransformer.setEntityResolver(catalogResolver);
                 SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
                 saxParser.parse(inputStream, i18nTransformer);
                 defaultView.setInputStream(i18nTransformer.getInputStream());
-*/
 
-
                 return defaultView;
             } else {
                 log.debug("Mime-Type: " + mimeType);
                 defaultView.setInputStream(getContentXML(repo, yanelPath, revisionName));
             }
         } catch(Exception e) {
-            log.error(e + " (" + getPath() + ", " + getRealm() + ")");
+            log.error(e + " (" + getPath() + ", " + getRealm() + ")", e);
             throw new Exception(e);
         }
 




More information about the Yanel-commits mailing list