You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2016/12/19 22:38:42 UTC

[2/2] incubator-tamaya-extensions git commit: TAMAYA-198: Reading input stream into resettable ByteArrayInputStream, so each format read can be explicitly reset and remote resources are read only once.

TAMAYA-198: Reading input stream into resettable ByteArrayInputStream, so each format read can be explicitly reset and remote resources are read only once.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/commit/b9299af4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/b9299af4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/b9299af4

Branch: refs/heads/master
Commit: b9299af45221d0a6cb977d0823643a47a66d8f39
Parents: b6be117
Author: anatole <an...@apache.org>
Authored: Mon Dec 19 23:38:26 2016 +0100
Committer: anatole <an...@apache.org>
Committed: Mon Dec 19 23:38:26 2016 +0100

----------------------------------------------------------------------
 .../BaseFormatPropertySourceProvider.java       | 35 +++++++++++++++++---
 1 file changed, 30 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/b9299af4/modules/formats/base/src/main/java/org/apache/tamaya/format/BaseFormatPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/modules/formats/base/src/main/java/org/apache/tamaya/format/BaseFormatPropertySourceProvider.java b/modules/formats/base/src/main/java/org/apache/tamaya/format/BaseFormatPropertySourceProvider.java
index 90e1143..49f05df 100644
--- a/modules/formats/base/src/main/java/org/apache/tamaya/format/BaseFormatPropertySourceProvider.java
+++ b/modules/formats/base/src/main/java/org/apache/tamaya/format/BaseFormatPropertySourceProvider.java
@@ -21,6 +21,8 @@ package org.apache.tamaya.format;
 import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertySourceProvider;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -138,12 +140,35 @@ public abstract class BaseFormatPropertySourceProvider implements PropertySource
     @Override
     public Collection<PropertySource> getPropertySources() {
         List<PropertySource> propertySources = new ArrayList<>();
+        byte[] buff = new byte[512];
         for (URL res : this.paths) {
-            for (ConfigurationFormat format : configFormats) {
-                try(InputStream is = res.openStream()) {
-                    if (format.accepts(res)) {
-                        ConfigurationData data = format.readConfiguration(res.toString(), is);
-                        propertySources.addAll(getPropertySources(data));
+            byte[] dataBytes = null;
+            int read = 0;
+            try(InputStream is = res.openStream();
+                ByteArrayOutputStream bos = new ByteArrayOutputStream();) {
+                read = is.read(buff);
+                while (read > 0) {
+                    bos.write(buff, 0, read);
+                    read = is.read(buff);
+                }
+                bos.flush();
+                dataBytes = bos.toByteArray();
+            } catch (Exception e) {
+                LOG.log(Level.WARNING, "Failed to read resource based config: " + res, e);
+            }
+            if(dataBytes!=null) {
+                try (InputStream is = new ByteArrayInputStream(dataBytes);) {
+                    for (ConfigurationFormat format : configFormats) {
+                        try {
+                            if (format.accepts(res)) {
+                                ConfigurationData data = format.readConfiguration(res.toString(), is);
+                                propertySources.addAll(getPropertySources(data));
+                            }
+                        } catch (Exception e) {
+                            LOG.log(Level.WARNING, "Failed to put resource based config: " + res, e);
+                        } finally {
+                            is.reset();
+                        }
                     }
                 } catch (Exception e) {
                     LOG.log(Level.WARNING, "Failed to put resource based config: " + res, e);