Giter VIP home page Giter VIP logo

config's People

Contributors

2m avatar acaly avatar alexwei avatar andreatp avatar av-elier avatar bbaldino avatar bugthesystem avatar chris-martin avatar dwijnand avatar ekrich avatar ennru avatar havocp avatar iamtodor avatar johnlon avatar jroper avatar ktoso avatar kxbmap avatar marcospereira avatar mpilquist avatar mslilah avatar nrktkt avatar ntviet18 avatar patriknw avatar pshirshov avatar psliwa avatar raboof avatar tea-dragon avatar tzarouali avatar vaigarashi avatar viktorklang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

config's Issues

tweak hocon-formatted render (was: ConfigRenderOption for HOCON)

Hi,

I can use config.root.render(ConfigRenderOptions.concise.setFormatted(true)) for dumping my Config to JSON format, but that would be really great to be able to dump in to HOCON format.

I'm very fond of this lib, and I'd like to use it, not only for read-only config, but also for read-write preferences that are dumped on the filesystem.

Cheers,

Stéphane

config diff?

hello;

  1. I am considering delivering of configuration changes
    in a form of com.typesafe.config.Config based events;

  2. this would need some form of
    typesafe.config.Diff(old,new) -> diff

  3. what would be the fast, low heap, and "right"
    way to do this config diff?

  4. can this be generic enough to warrant inclusion
    in the typesafe.config library?

thanks.

migrate to antlr / javacc

just an after thought:

based on the little experience with pull 32

I can say its a bit hard to understand which parts of hocon gramma
are processed by what and if that processing is complete / non contradictory

I wish you would migrate that part of the library to antlr
or javacc by the time of 2.0.0 :-)

Accessing default application.config from resources using Scala IDE

Hi,

I'm attempting to load a default application config while running my project in Scala IDE. Everything works great if I run the application via sbt at the CLI, but when I try to start my application in Scala IDE using the Scala Application loader it's unable to find the configuration file.

I've placed my application configuration file in my project at the following path.

/src/main/resources/application.conf

My calling code is simply ConfigFactory.load().getString("bar") from my main method and I get the following stack trace.

Exception in thread "main" java.lang.ExceptionInInitializerError
at com.foo.dataservices.MyServer.main(MyServer.scala)
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'bar'
at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:115)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:138)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:150)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:155)
at com.typesafe.config.impl.SimpleConfig.getConfigNumber(SimpleConfig.java:170)
at com.typesafe.config.impl.SimpleConfig.getInt(SimpleConfig.java:181)

Any help would be appreciated.

checkValid is broken

the following little test
https://github.com/barchart/barchart-inst/blob/master/barchart-inst-store-sql/src/test/java/typesafe/TestCheckValid.java

    @Test
    public void test() {

        //

        final Config reference = ConfigFactory.defaultReference();

        final Config memberONE = reference.getConfig("member-config");

        log.debug("memberONE : {}", memberONE);

        /** good config - should pass */
        memberONE.checkValid(reference, "member-config");

        memberONE.getBoolean("is-master");

        //

        final String configWithTypeError = "{ is-master = 42 }";

        final Config memberTWO = ConfigFactory.parseString(configWithTypeError)
                .withFallback(memberONE);

        log.debug("memberTWO : {}", memberTWO);

        /** sick config - should fail */
        memberTWO.checkValid(reference, "member-config");

        memberTWO.getBoolean("is-master");

        assertTrue(true);

    }

and a reference
https://github.com/barchart/barchart-inst/blob/master/barchart-inst-store-sql/src/main/resources/reference.conf

member-config {
    is-master = false
    name = unknown
    batch-size = 100
}

fails self-check here

        /** good config - should pass */
        memberONE.checkValid(reference, "member-config");

with a trace:

com.typesafe.config.ConfigException$ValidationFailed: reference.conf: 2: member-config: No setting at 'member-config', expecting: object with keys [batch-size, is-master, name]
    at com.typesafe.config.impl.SimpleConfig.checkValid(SimpleConfig.java:833)
    at typesafe.TestCheckValid.test(TestCheckValid.java:28)

what am I missing ?

convenience getXXX() with default

this is a feature request;

currently, the pattern like this is hard to avoid:

if (config.hasPath("master")) {
    return config.getBoolean("master");
} else {
    return false;
}

it would help to have conviniece getXXX() with default, such as:

    return config.getBoolean("master", false);

Please push this to maven central

I would like to use this library in a couple open source projects. Unfortunately, maven being what it is, if someone uses my library as a dependency, and my library depends on this one, then the transitive dependency fails because my users don't have your maven repo configured. The easiest way to resolve this is to push artifacts from this library into maven central.

Yes, this is a maven design flaw, but supporting existing maven stuff is a feature worth supporting.

There is no getSeconds API

There is a getMilliseconds and getNanoseconds API, but no getSeconds API. Seems like this would be useful for many people and trivial to add.

Missing includer

Hi,

is there any plan to implement the missing parsing option in the com.typesafe.impl.Parser below?

                if (kind.equals("url(")) {

                } else if (kind.equals("file(")) {

                } else if (kind.equals("classpath(")) {

                } else {
                    throw parseError("expecting include parameter to be quoted filename, file(), classpath(), or url(). No spaces are allowed before the open paren. Not expecting: "
                            + t);
                }

or was there a specific reason why it was not implemented? This would be really useful when running play2.0 apps where we would only like some of the configuration options in the binary exposed. Right now includes will resolve to the base of the original URL with no option to include from another source.

I am more than happy to try and add this myself, just trying to find out the rationale for not implementing it initially.

Thanks

toStringJSON

can you please carry in the library this little thingy (or, better, non-static)?


    private static final ConfigRenderOptions FORMAT = ConfigRenderOptions
            .concise().setFormatted(true);

    public static String toStringJSON(final Config config) {

        return toStringJSON(config.root());

    }

    public static String toStringJSON(final ConfigObject object) {

        return object.render(FORMAT);

    }

thanks.

[feature] Enhance checkValid for negative checks

One of the contracts of checkValid is "All paths found in the reference config must be present in this config or an exception will be thrown."

IMO the converse is also very useful: "If a path is found in this config that is NOT present in the reference config, an exception will be thrown".

Use cases:

  • User specifies an "unknown" property in the config. So reference has "foo.bar" but user specific "foo.baz" -- I'd like to present the user with a useful error message in this case, via checkValid
  • User makes a spelling mistake in specifying a known property, resulting in unexpected/surprising behavior. So reference has "foo.config" but user by mistake says "foo.confg" -- checkValid passes in this case leaving the user wondering what went wrong

Parse exception for key jpa.entities

Am using Play 1.2.x. I need to declare a long list of JPA entities, however Config does not like it. Below is an example

jpa.entities=com.googlecode.sarasvati.hib.HibArc, com.googlecode.sarasvati.hib.HibArcToken

Below is the Parse exception
A com.typesafe.config.ConfigException$Parse has been caught, application.conf: 147: Key 'com.googlecode.sarasvati.hib.HibArcToken' may not be followed by token: ',' (if you intended ',' to be part of the value for 'com.googlecode.sarasvati.hib.HibArcToken', try enclosing the value in double quotes)

Concatenated strings as keys

Given the following:

repositories {
    AWS S3 : "http://jets3t.s3.amazonaws.com/maven2"
}

The key is parsed as ""AWS S3"" instead of "AWS S3", which is what I expected from reading the README.

allow value-concatenating an object to each list element

  1. this is a feature request

  2. use case:

  • imaging you have network service with some 100 end points;
  • each end point has some 30 parameters, mostly common to all points;
  • may be 2 to 5 of the parameters are to be overridden by each point;
  1. the way I understand current mechanisms of HOCON
    https://github.com/typesafehub/config/blob/master/HOCON.md
    this would make this definition very verbose;

  2. how about new/proposed object$builder syntax:

//
// the list definition below will be looking for this builder
//
netty_point_list$builder {
   id = "you-must-override"
   localAddress = "1.2.3.4:12345"
   remoteAddress = "you-must-override"
   packetTTL = 5
   pipeline = "default-pipeline"
   pipeline_param_0 = 123
   // 20 more parameters here; mostly come from include  or variable substitution
}

//
// netty_point_list will be looking for optional netty_point_list$builder
// to initialize default list items parameters before override
//
netty_point_list [
   { id = "service-1", remoteAddress = "1.1.1.1:12345", pipeline = "advanced" }
   { id = "service-2", remoteAddress = "1.1.1.2:12345", localAddress = "3.3.3.3:12345" }
   // 100 more service definitions with little variations on the builder-defined parameters
]
  1. am I missing some HOCON feature or what? :-)

hocon for dummies

I just did a little edit of HOCON.md for pull 32

what struck me it is a classic tl;dr masterpeace

I suggest to provide hocon for dummies which would be
just a collection of small hocon config snippets, with minimal comments,
of increasing complexity, so people can pick up and use hocon patterns,
w/o much technical understanding of details

failed to resolve system property

I tried to ${user.home} in my project, but got a ConfigException$UnresolvedSubstitution error, however, it's ok to use something like ${HOME}

assertNotNull(System.getProperty("user.home"));

String conf = "foo: bar, home: ${HOME}, myHome: ${user.home}";
Config cfg = ConfigFactory.parseReader(new StringReader(conf));

assertEquals("bar", cfg.getString("foo"));
assertFalse(cfg.resolve().getString("home").contains("$")); // works
assertFalse(cfg.resolve().getString("myHome").contains("$")); // failed

ConfigException lies about being Serializable, contains non-serializable ConfigOrigin

if we have a client report a ConfigException we get a message instead:

cannot serialize: com.typesafe.config.ConfigException$WrongType: system properties: user has type OBJECT rather than STRING))) due to java.io.NotSerializableException: com.typesafe.config.impl.SimpleConfigOrigin

seems trivial to add "implements Serializable" to either the ConfigOrigin interface or the SimpleConfigOrigin class

our ref: PERF-463

would an “override” modifier make sense?

I have seen it multiple times on the akka mailing list that a “bug” was ultimately due to getting the nesting of a setting wrong. Since .config is schemaless for good reasons, there is a priori not much we can do about it, but what about an override signal?

akka {
  debug {
    receive := on
  }
}

This should fail at merge time, telling the user that the setting does not actually override anything (which akka.actor.debug.receive would, from reference.conf). This would allow users to still put whatever they want into the config, while asserting that some of the settings are actually understood by the library which uses them.

xml round trip codec

this is a feature request;

I suggest to incorporate into typesafe.config ability to import(also export) external xml config files

sample implementation:
https://github.com/barchart/barchart-config/blob/master/barchart-conf-util/src/main/java/com/barchart/conf/util/ConfigXML.java

sample xml source:
https://github.com/barchart/barchart-config/blob/master/barchart-conf-util/src/test/resources/reference/hazelcast-fullconfig.xml

sample typesafe.config result:
https://github.com/barchart/barchart-config/blob/master/barchart-conf-util/src/test/resources/reference/hazelcast-fullconfig.conf

basic idea is to overload symbol "/" with semantics : "reference to xml node attribute or parent node value"

Let ConfigFactory load from file or URL, not just resource

I have my settings defined outside of the broad application.conf settings.

val myConfig = System.getProperty("my.config")
val config = ConfigFactory.load(myConfig)

But I can only load these files if they're defined in the classpath. I want the option to load a configuration using loadFile or loadURL. I can't do it from the command line either, as config.url and config.file only work with application.conf.

Can it be compiled for Java 5 please

Currently have to recompile my own version; unless there are any J2SE 6 specific features (pretty rare) it would be good if the lib shipped at 1.5 as standard.

systemProperties question

Hi,I use
val conf = ConfigFactory.load("cmds", ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES),ConfigResolveOptions.noSystem())

"cmds" is properties file.

but always load systemProperties,fox example

awt.toolkit
os.version
java.vendor.url.bug
java.awt.graphicsenv
java.home
line.separator
java.vm.version
java.vm.specification.name
sun.management.compiler
java.vm.info

......

I think only load myself properties,don't need systemProperties,So what am I, what am I to do?

Thanks!

include classpath() not respected in Windows

When I have an external config file on my Linux box which has an include classpath('application') everything works as expected, but when I run the same program on a Windows 7 machine, I get a flurry of exceptions saying that I can't use an unquoted string in the include statement. Any thoughts?

Substitutions don't honor latest value

HOCON.md says the following about substitutions:

Substitution processing is performed as the last parsing step, so a substitution can look forward in the configuration. If a configuration consists of multiple files, it may even end up retrieving a value from another file.

If a key has been specified more than once, the substitution will always evaluate to its latest-assigned value (that is, it will evaluate to the merged object, or the last non-object value that was set, in the entire document being parsed including all included files).

My reference.conf contains:

foo = hello/${bar}
bar = world

My application.conf contains:

bar=mother

What should the output of the following code be after loading the configuration:

        System.out.println(config.getString("foo"));
        System.out.println(config.getString("bar"));

I would expect "hello/mother" and "mother". Instead, I see "hello/world" and "mother". Did I misunderstand what the spec says about substitutions being evaluated as a last step or is there a bug here?

Support multi-line unquoted strings

I know the documentation explicitly says that "multi-line unquoted strings using backslash to continue the line are not allowed". But, unless there is a good reason for not supporting it, this would be a very convenient feature.

support string and object in value concatenation

The README proposes extending the string value concatenation to arrays and objects. So

${foo} "hello"

concats ${foo}'s value with "hello", with arrays

${foo} [1,2,3]

prepends ${foo} to the array, and with objects it would merge the two, so

${foo} { name = "east" }

would merge { name = "east" } into ${foo}

This would among other things give a nicer syntax when "inheriting", before:

data-center-east = ${data-center-generic}
data-center-east = { name = "east" }

after:

data-center-east = ${data-center-generic} { name = "east " }

also, if substitutions are allowed to refer to the previous value of the field being defined, you could use this to extend paths.

 path = [somethingBefore] ${path} [somethingAfter]

For more bonus points, support +=:

path += somethingAfter

equivalent to

 path = ${path} [somethingAfter]

Use context class loader by default

Right now to load the reference config, etc. we use getClassLoader on a class from com.typesafe.config

But for example Play is trying to do this:

private val initialConfiguration = Threads.withContextClassLoader(classloader) {
    Configuration.load(path, mode)
}

And because Play apps have their own class loader, the reference.conf for the app dependencies will not be found.

The config library should use the context class loader by default rather than ConfigImpl.class.getClassLoader.

LoaderCache not thread safe?

On just one not-yet-reproduced occasion, this test failed:

[error] Test com.typesafe.config.impl.PublicApiTest.cachedReferenceConfig failed: defaultReference(loader) was cached

cache.getOrElseUpdate is synchronized, it isn't clear to me what could be wrong.

Appending arrays isn't supported

If you try to append arrays using the shorthand syntax += as described in README.md, you get the following exception:

Reserved character '+' is not allowed outside quotes (if you intended '+' to be part
of a key or string value, try enclosing the key or value in double quotes)

Configuring akka serialization in Play 2.0 framework

Hi guys,

I'd like to configure protobuf to be the default serialization for my messages.
Here what I do in attempt to make it happen:

import akka.actor._
import akka.pattern.ask
import akka.serialization._
import akka.util._
import play.api._
import play.libs.Akka
import akka.util.Timeout

object Engine {
implicit val timeout = Timeout(1 second)
val ngin = Akka.system.actorOf(Props[Engine])
}

class Engine extends Actor {
val ser = SerializationExtension(context.system)
override def preStart() = {
println("Got %s serializer for %s"
.format(ser.findSerializerFor(classOf[java.lang.String]).getClass().getName(),
classOf[java.lang.String].getName()))
}
def receive = { ... }
}

While my application.conf file contains the following section:

play { akka { actor {
serializers { proto = "akka.serialization.ProtobufSerializer" }
serialization-bindings { "java.io.Serializable" = proto
"java.lang.String" = proto }
} } }

Though I always get JavaSerializer: "Got
akka.serialization.JavaSerializer serializer for java.lang.String"
What am I doing wrong?!

-Matthew

Serialization problem using JBossSerialization

Using JBossObjectOutputStream and JBossObjectInputStream results in an EOFException.
The main problem is that trying to call an EJB3-method on a bean in another EAR on a jboss server (jboss as 5.1) results in an IOException:

at org.jboss.aop.joinpoint.ConstructionInvocation.invokeNext(ConstructionInvocation.java:79)
at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
at org.jboss.aop.joinpoint.ConstructionInvocation.invokeNext(ConstructionInvocation.java:79)
at org.jboss.ejb3.EJBContainer.invokeCallback(EJBContainer.java:1119)
... 66 more
Caused by: java.io.IOException: field code 0 is not supposed to be on the wire
at com.typesafe.config.impl.SerializedConfigValue.readCode(SerializedConfigValue.java:414)
at com.typesafe.config.impl.SerializedConfigValue.readOrigin(SerializedConfigValue.java:218)
at com.typesafe.config.impl.SerializedConfigValue.readValue(SerializedConfigValue.java:392)
at com.typesafe.config.impl.SerializedConfigValue.readExternal(SerializedConfigValue.java:453)
at org.jboss.serial.persister.ExternalizePersister.readData(ExternalizePersister.java:72)
at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:412)
at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
at org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readObject(DataContainer.java:845)
at org.jboss.serial.io.MarshalledObjectForLocalCalls.get(MarshalledObjectForLocalCalls.java:60)
at org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:101)
at org.jboss.ejb3.remoting.ClusteredIsLocalInterceptor.invoke(ClusteredIsLocalInterceptor.java:52)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
at $Proxy1483.invoke(Unknown Source)
at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
... 80 more

Unfortunately I haven't been able to figure out exactly why the exception occurs.
Using a newer version of jboss-serialization is no solution...

Config should allow for default values.

Config interface should allow for default values to be defined in code such that if not present in config file the value defined in code can be picked up.

val a = config. getInt("a.b.c",10) //If a.b.c is not defined 10 will be applied.

ConfigImpl doesn't respect key order

This is a very simple use case: A list of common steps (configuration for scheduling, processing order etc.) with inter-dependent order is configured using namespaced keys, like this:

tasks.prepare.args="collect,store"
tasks.process.args="count"
tasks.cleanup.args="deleteTemps"

Expected: When iterating the keys under tasks, the order is [prepare, process, cleanup].
Actual: Dependent on JDK's HashMap implementation.

The simplest fix for this would be to use LinkedHashMap instead. As a workaround I now need to add a number as additional key to each task and then sort afterwards the objects created based on the configuration using that number to get them into order I want to.

include base(); "config://" url handler;

hello;

  1. this is a feature request;

  2. currently, include url()/file()/classpath()
    https://github.com/typesafehub/config/blob/master/HOCON.md#includes

are either relative or absolute, to the specific url:
"otherwise, a file or other resource "adjacent to" the one being parsed"

  1. I suggest to introduce a concept of a "base()" stanza:
    include base("common/server/instance/settings.conf")
    witch represents an idea: include form a root of "common configuration store",
    and is agnostic of url()/file()/classpath() distinctions;

  2. "configuration store" would have to be a new concept for typesafe.config;

  3. base() url handler would have to be provided to the typesafe.config library
    in some external way

  4. another alternative would be to rely on new custom "config://" protocol handler
    explicitly, such as, in this stanza:
    include url("config://common/server/instance/settings.conf")

  5. an example of custom url approach can be found here:
    https://github.com/barchart/barchart-config/tree/master/barchart-conf-base
    https://github.com/barchart/barchart-config/blob/master/barchart-conf-base/src/main/java/com/barchart/conf/impl/ConfigHandlerProvider.java

  6. the benefit of "include base()" in typesafe.config would be to standardize
    the "configuration store" approach to configuration management;

thank you.

path expression to access array elements directly

Is there a way to access an array element directly?
example:

arr [
  {ip= 192.168.7.1, name="Server 1"},
  {ip= 192.168.7.2, name="Server 2"},
  {ip= 192.168.7.3, name="Server 3"}
]

As far as I understand the library I first have to access the array by calling config.getObjectList("arr") and then iterating over the list to access the fields of my objects.
I'd like to have the possibility of calling config.getString("arr[0].ip") or something like that...

Thanks.

replace the content of a config path

Currently, there is no easy way to get a new Config or ConfigObject with the content on a certain branch replaced (with fallback to original, of course).

a {
   b {
      c = 10 
      d = 7
   }
}
b1 {
   c = 11
}

I want to get a config that looks like

a {
   b {
      c = 11 
      d = 7
   }
}

(notice the fallback mechanism)

The only way (I found) to do this now is:

ConfigFactory.parseMap(Map("a" -> Map("b" -> config.getObject("b1").unwrapped)).asJava).withFallback(config)

I think this is a common need so it would be nice to have better syntax, something like:

config.merge("a.b",config.getConfig("b1"))

Parse exception for key jvm.memory

Am using Play 1.2.x where my application.conf has a key (jvm.memory) with the following value

jvm.memory=-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=256M

Got a Parse exception ConfigFactory.load(), the message is as follows -

A com.typesafe.config.ConfigException$Parse has been caught, application.conf: 64: Invalid number: '-' (if you intended '-' to be part of the value for 'jvm.memory', try enclosing the value in double quotes, or you may be able to rename the file .properties rather than .conf)

Any workaround? Play does not like when I try enclosing the value with double quotes.

Parse String[] args commandline parameter

A nice feature would be to parse commandline parameters. E.g.

-db.user=muki -db.password=secret
public static void main(String[] args) {
   Config c = ConfigFactory.parseArray(args).getConfig("db");
   c.getString("user");
   c.getString("password");
}

If there is any interest, I would try to provide an implementation.

Support ".hocon" extension

This library can be used not only for the configuration, but also for many other purposes. But you support extension ".conf" only when activated HOCON by default. I think the extension ".hocon" is necessary for load by default in HOCON format.

com.typesafe.config.impl.SerializedConfigValue should be exported in OSGi manifest

Now the com.typesafe.config.impl package is defined as private, which prevents akka 2.0 from working in remote scenarios with remote deployment. The reason for this is that the com.typesafe.config.impl.SerializedConfigValue class is not available for the akka.remote.MessageSerializer:

    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:622)
    at akka.util.ClassLoaderObjectInputStream.resolveClass(ClassLoaderObjectInputStream.scala:12)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1593)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
    at akka.serialization.JavaSerializer$$anonfun$1.apply(Serializer.scala:121)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
    at akka.serialization.JavaSerializer.fromBinary(Serializer.scala:121)
    at akka.serialization.Serialization.deserialize(Serialization.scala:73)
    at akka.remote.MessageSerializer$.deserialize(MessageSerializer.scala:22)
    at akka.remote.RemoteMessage.payload(RemoteTransport.scala:212)
    at akka.remote.RemoteMarshallingOps$class.receiveMessage(RemoteTransport.scala:274)
    at akka.remote.netty.NettyRemoteTransport.receiveMessage(NettyRemoteSupport.scala:46)
    at akka.remote.netty.RemoteServerHandler.messageReceived(Server.scala:182)
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
    at akka.remote.netty.RemoteServerHandler.handleUpstream(Server.scala:154)
    at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:372)
    at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:534)
    at org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.doRun(ChannelUpstreamEventRunnable.java:45)
    at org.jboss.netty.handler.execution.ChannelEventRunnable.run(ChannelEventRunnable.java:69)
    at org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor$ChildExecutor.run(OrderedMemoryAwareThreadPoolExecutor.java:315)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

Thanks for looking into this!

jacoco4sbt 1.2.2 cannot be resolved

I cannot build this snapshot due to this error:
unresolved dependency: de.johoop#jacoco4sbt;1.2.2

I changed the sbt version from 0.11.2 to 0.11.3, but
this shouldn't caused this problem?

Furthermore I tried
addSbtPlugin("de.johoop" % "jacoco4sbt" % "1.2.3")
Which can be resolved but leads to an ClassNotFound exception

Allow objects without braces around them inside arrays

I would propose to extend the HOCON syntax to simplify declaration of an array of objects.

Currently it is possible to declare an array of primitive types or objects like the following:

[ 3, 6, 9 ]

[ alpha, beta, delta ]

[
   { a : 42, c : 5 }
   { b : 43, c : 6 }
]

But take in consideration the declaration of a list of assignments, for example: alpha = 1, beta = 2, delta = 3. Currently it is required the following definition:

 [  { alpha = 1 } , { beta = 2 }, { delta = 3 } ]

It is much nicer if it would be possible to use the following syntax

[  alpha =  1, beta = 2, delta = 3   ] 

The benefit is more evident for more complex declaration like this

[  alpha =  { a:1 }, beta = { b: 2 }, delta = { c: 3, d: 4 )   ] 

instead of

[  { alpha =  { a:1 } }, { beta = { b: 2 } }, { delta = { c: 3, d: 4 } }  ] 

The underlying would not change but the syntax would be much more readable in the spirit of the project.

Thanks

[feature] Provide hook to force refresh of system properties

From the Javadoc of ConfigFactory.systemProperties:

"Because this returns a singleton, it will not notice changes to system properties made after the first time this method is called"

While this makes sense, I'm running into a problem where a hook to force refresh of system properties would help. Specifically, I'm building a Config object via Guice-injection, which is then used to populate a "settings" object (as suggested in the README). For unit tests, we construct a new settings object per test so we can specify different settings for each test.

Unfortunately, because of the above behavior of systemProperties (and hence, defaultOverrides and load), any test that modifies system properties can have unintended side effects on subsequent tests.

Sending Config Object Over the Wire

Thanks for writing this library and for documenting it so well. It is great and is helping us manage our config files better.

I'm using it in a system which centralizes the configuration of various other services. We need to send com.typesafe.config,Config objects over the wire to other services. What I'd like to do is the following:

  1. Get string representation of a config object. Something like:
    val conf = configObject.getConfString;
  2. And on the client side, simply do:
    ConfigFactory.parseString(conf)

So, my question is, given a config object, is there a simple way to get to its string representation?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.