<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>Config</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>

<link rel="shortcut icon" href="/img/microprofile-favicon.png">
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="Config";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":18,"i5":6,"i6":6,"i7":18,"i8":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev&nbsp;Class</li>
<li><a href="../../../../org/eclipse/microprofile/config/ConfigProvider.html" title="class in org.eclipse.microprofile.config"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/eclipse/microprofile/config/Config.html" target="_top">Frames</a></li>
<li><a href="Config.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.eclipse.microprofile.config</div>
<h2 title="Interface Config" class="title">Interface Config</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public interface <span class="typeNameLabel">Config</span></pre>
<div class="block">Resolves the property value by searching through all configured <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi"><code>ConfigSources</code></a>. If the same
 property is specified in multiple <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi"><code>ConfigSources</code></a>, the value in the <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi"><code>ConfigSource</code></a> with the
 highest ordinal will be used.
 <p>
 If multiple <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi"><code>ConfigSources</code></a> are specified with the same ordinal, the
 <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html#getName--"><code>ConfigSource.getName()</code></a> will be used for sorting.
 <p>
 The config objects produced via the injection model <code>@Inject Config</code> are guaranteed to be serializable, while
 the programmatically created ones are not required to be serializable.
 <p>
 If one or more converters are registered for a class of a requested value then the registered
 <a href="../../../../org/eclipse/microprofile/config/spi/Converter.html" title="interface in org.eclipse.microprofile.config.spi"><code>Converter</code></a> which has the highest <code>@jakarta.annotation.Priority</code> is
 used to convert the string value retrieved from the config sources.

 <h2>Usage</h2>

 <p>
 For accessing the config you can use the <a href="../../../../org/eclipse/microprofile/config/ConfigProvider.html" title="class in org.eclipse.microprofile.config"><code>ConfigProvider</code></a>:

 <pre>
 public void doSomething() {
     Config cfg = ConfigProvider.getConfig();
     String archiveUrl = cfg.getValue("my.project.archive.endpoint", String.class);
     Integer archivePort = cfg.getValue("my.project.archive.port", Integer.class);
 }
 </pre>

 <p>
 It is also possible to inject the Config if a DI container is available:

 <pre>
 public class MyService {
     &#064;Inject
     private Config config;
 }
 </pre>

 <p>
 See <a href="../../../../org/eclipse/microprofile/config/Config.html#getValue-java.lang.String-java.lang.Class-"><code>getValue(String, Class)</code></a> and <a href="../../../../org/eclipse/microprofile/config/Config.html#getOptionalValue-java.lang.String-java.lang.Class-"><code>getOptionalValue(String, Class)</code></a> for accessing a configured value.

 <p>
 Configured values can also be accessed via injection. See
 <a href="../../../../org/eclipse/microprofile/config/inject/ConfigProperty.html" title="annotation in org.eclipse.microprofile.config.inject"><code>ConfigProperty</code></a> for more information.</div>
<dl>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
<dd><a href="../../../../../../../tomee-9.0/examples/mp-config-source-database.html">mp-config-source-database</a>, <a href="../../../../../../../tomee-9.0/examples/mp-config-example.html">mp-config-example</a></dd>
<dt><span class="simpleTagLabel">Examples (es):</span></dt>
<dd><a href="../../../../../../../tomee-9.0/es/examples/mp-config-source-database.html">mp-config-source-database</a>, <a href="../../../../../../../tomee-9.0/es/examples/mp-config-example.html">mp-config-example</a></dd>
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a href="../../../../../../../tomee-9.0/pt/examples/mp-config-source-database.html">mp-config-source-database</a>, <a href="../../../../../../../tomee-9.0/pt/examples/mp-config-example.html">mp-config-example</a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!--   -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#PROFILE">PROFILE</a></span></code>
<div class="block">The value of the property specifies a single active profile.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#PROPERTY_EXPRESSIONS_ENABLED">PROPERTY_EXPRESSIONS_ENABLED</a></span></code>
<div class="block">The value of the property determines whether the property expression is enabled or disabled.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t5" class="tableTab"><span><a href="javascript:show(16);">Default Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>java.lang.Iterable&lt;<a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">ConfigSource</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#getConfigSources--">getConfigSources</a></span>()</code>
<div class="block">Return all of the currently registered <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a> for this configuration.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../../org/eclipse/microprofile/config/ConfigValue.html" title="interface in org.eclipse.microprofile.config">ConfigValue</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#getConfigValue-java.lang.String-">getConfigValue</a></span>(java.lang.String&nbsp;propertyName)</code>
<div class="block">Return the <a href="../../../../org/eclipse/microprofile/config/ConfigValue.html" title="interface in org.eclipse.microprofile.config"><code>ConfigValue</code></a> for the specified property name from the underlying <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration source</a>.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;java.util.Optional&lt;<a href="../../../../org/eclipse/microprofile/config/spi/Converter.html" title="interface in org.eclipse.microprofile.config.spi">Converter</a>&lt;T&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#getConverter-java.lang.Class-">getConverter</a></span>(java.lang.Class&lt;T&gt;&nbsp;forType)</code>
<div class="block">Return the <a href="../../../../org/eclipse/microprofile/config/spi/Converter.html" title="interface in org.eclipse.microprofile.config.spi"><code>Converter</code></a> used by this instance to produce instances of the specified type from string values.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;java.util.Optional&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#getOptionalValue-java.lang.String-java.lang.Class-">getOptionalValue</a></span>(java.lang.String&nbsp;propertyName,
                java.lang.Class&lt;T&gt;&nbsp;propertyType)</code>
<div class="block">Return the resolved property value with the specified type for the specified property name from the underlying
 <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a>.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>default &lt;T&gt;&nbsp;java.util.Optional&lt;java.util.List&lt;T&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#getOptionalValues-java.lang.String-java.lang.Class-">getOptionalValues</a></span>(java.lang.String&nbsp;propertyName,
                 java.lang.Class&lt;T&gt;&nbsp;propertyType)</code>
<div class="block">Return the resolved property values with the specified type for the specified property name from the underlying
 <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a>.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>java.lang.Iterable&lt;java.lang.String&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#getPropertyNames--">getPropertyNames</a></span>()</code>
<div class="block">Returns a sequence of configuration property names.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;T</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#getValue-java.lang.String-java.lang.Class-">getValue</a></span>(java.lang.String&nbsp;propertyName,
        java.lang.Class&lt;T&gt;&nbsp;propertyType)</code>
<div class="block">Return the resolved property value with the specified type for the specified property name from the underlying
 <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a>.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>default &lt;T&gt;&nbsp;java.util.List&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#getValues-java.lang.String-java.lang.Class-">getValues</a></span>(java.lang.String&nbsp;propertyName,
         java.lang.Class&lt;T&gt;&nbsp;propertyType)</code>
<div class="block">Return the resolved property values with the specified type for the specified property name from the underlying
 <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a>.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;T</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/config/Config.html#unwrap-java.lang.Class-">unwrap</a></span>(java.lang.Class&lt;T&gt;&nbsp;type)</code>
<div class="block">Returns an instance of the specific class, to allow access to the provider specific API.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!--   -->
</a>
<h3>Field Detail</h3>
<a name="PROFILE">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>PROFILE</h4>
<pre>static final&nbsp;java.lang.String PROFILE</pre>
<div class="block">The value of the property specifies a single active profile.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.eclipse.microprofile.config.Config.PROFILE">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PROPERTY_EXPRESSIONS_ENABLED">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>PROPERTY_EXPRESSIONS_ENABLED</h4>
<pre>static final&nbsp;java.lang.String PROPERTY_EXPRESSIONS_ENABLED</pre>
<div class="block">The value of the property determines whether the property expression is enabled or disabled. The value
 <code>false</code> means the property expression is disabled, while <code>true</code> means enabled.

 By default, the value is set to <code>true</code>.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.eclipse.microprofile.config.Config.PROPERTY_EXPRESSIONS_ENABLED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="getValue-java.lang.String-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getValue</h4>
<pre>&lt;T&gt;&nbsp;T&nbsp;getValue(java.lang.String&nbsp;propertyName,
               java.lang.Class&lt;T&gt;&nbsp;propertyType)</pre>
<div class="block">Return the resolved property value with the specified type for the specified property name from the underlying
 <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a>.
 <p>
 The configuration value is not guaranteed to be cached by the implementation, and may be expensive to compute;
 therefore, if the returned value is intended to be frequently used, callers should consider storing rather than
 recomputing it.
 <p>
 The result of this method is identical to the result of calling
 <code>getOptionalValue(propertyName, propertyType).get()</code>. In particular, If the given property name or the
 value element of this property does not exist, the <code>NoSuchElementException</code> is thrown. This
 method never returns <code>null</code>.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - The property type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>propertyName</code> - The configuration property name</dd>
<dd><code>propertyType</code> - The type into which the resolved property value should get converted</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the resolved property value as an instance of the requested type (not <code>null</code>)</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalArgumentException</code> - if the property cannot be converted to the specified type</dd>
<dd><code>java.util.NoSuchElementException</code> - if the property is not defined or is defined as an empty string or the converter returns <code>null</code></dd>
</dl>
</li>
</ul>
<a name="getConfigValue-java.lang.String-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getConfigValue</h4>
<pre><a href="../../../../org/eclipse/microprofile/config/ConfigValue.html" title="interface in org.eclipse.microprofile.config">ConfigValue</a>&nbsp;getConfigValue(java.lang.String&nbsp;propertyName)</pre>
<div class="block">Return the <a href="../../../../org/eclipse/microprofile/config/ConfigValue.html" title="interface in org.eclipse.microprofile.config"><code>ConfigValue</code></a> for the specified property name from the underlying <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration source</a>. The lookup of the configuration is performed immediately, meaning that calls to
 <a href="../../../../org/eclipse/microprofile/config/ConfigValue.html" title="interface in org.eclipse.microprofile.config"><code>ConfigValue</code></a> will always yield the same results.
 <p>
 The configuration value is not guaranteed to be cached by the implementation, and may be expensive to compute;
 therefore, if the returned value is intended to be frequently used, callers should consider storing rather than
 recomputing it.
 <p>
 A <a href="../../../../org/eclipse/microprofile/config/ConfigValue.html" title="interface in org.eclipse.microprofile.config"><code>ConfigValue</code></a> is always returned even if a property name cannot be found. In this case, every method in
 <a href="../../../../org/eclipse/microprofile/config/ConfigValue.html" title="interface in org.eclipse.microprofile.config"><code>ConfigValue</code></a> returns <code>null</code> except for <a href="../../../../org/eclipse/microprofile/config/ConfigValue.html#getName--"><code>ConfigValue.getName()</code></a>, which includes the original
 property name being looked up.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>propertyName</code> - The configuration property name</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the resolved property value as a <a href="../../../../org/eclipse/microprofile/config/ConfigValue.html" title="interface in org.eclipse.microprofile.config"><code>ConfigValue</code></a></dd>
</dl>
</li>
</ul>
<a name="getValues-java.lang.String-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getValues</h4>
<pre>default&nbsp;&lt;T&gt;&nbsp;java.util.List&lt;T&gt;&nbsp;getValues(java.lang.String&nbsp;propertyName,
                                        java.lang.Class&lt;T&gt;&nbsp;propertyType)</pre>
<div class="block">Return the resolved property values with the specified type for the specified property name from the underlying
 <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a>.
 <p>
 The configuration values are not guaranteed to be cached by the implementation, and may be expensive to compute;
 therefore, if the returned values are intended to be frequently used, callers should consider storing rather than
 recomputing them.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - The property type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>propertyName</code> - The configuration property name</dd>
<dd><code>propertyType</code> - The type into which the resolved property values should get converted</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the resolved property values as a list of instances of the requested type</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalArgumentException</code> - if the property values cannot be converted to the specified type</dd>
<dd><code>java.util.NoSuchElementException</code> - if the property isn't present in the configuration or is defined as an empty string or the converter
             returns <code>null</code></dd>
</dl>
</li>
</ul>
<a name="getOptionalValue-java.lang.String-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOptionalValue</h4>
<pre>&lt;T&gt;&nbsp;java.util.Optional&lt;T&gt;&nbsp;getOptionalValue(java.lang.String&nbsp;propertyName,
                                           java.lang.Class&lt;T&gt;&nbsp;propertyType)</pre>
<div class="block">Return the resolved property value with the specified type for the specified property name from the underlying
 <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a>.
 <p>
 The configuration value is not guaranteed to be cached by the implementation, and may be expensive to compute;
 therefore, if the returned value is intended to be frequently used, callers should consider storing rather than
 recomputing it.
 <p>
 If this method is used very often then consider to locally store the configured value.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - The property type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>propertyName</code> - The configuration property name</dd>
<dd><code>propertyType</code> - The type into which the resolved property value should be converted</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The resolved property value as an <code>Optional</code> wrapping the requested type</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalArgumentException</code> - if the property cannot be converted to the specified type</dd>
</dl>
</li>
</ul>
<a name="getOptionalValues-java.lang.String-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOptionalValues</h4>
<pre>default&nbsp;&lt;T&gt;&nbsp;java.util.Optional&lt;java.util.List&lt;T&gt;&gt;&nbsp;getOptionalValues(java.lang.String&nbsp;propertyName,
                                                                    java.lang.Class&lt;T&gt;&nbsp;propertyType)</pre>
<div class="block">Return the resolved property values with the specified type for the specified property name from the underlying
 <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a>.
 <p>
 The configuration values are not guaranteed to be cached by the implementation, and may be expensive to compute;
 therefore, if the returned values are intended to be frequently used, callers should consider storing rather than
 recomputing them.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - The property type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>propertyName</code> - The configuration property name</dd>
<dd><code>propertyType</code> - The type into which the resolved property values should be converted</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The resolved property values as an <code>Optional</code> wrapping a list of the requested type</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalArgumentException</code> - if the property cannot be converted to the specified type</dd>
</dl>
</li>
</ul>
<a name="getPropertyNames--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPropertyNames</h4>
<pre>java.lang.Iterable&lt;java.lang.String&gt;&nbsp;getPropertyNames()</pre>
<div class="block">Returns a sequence of configuration property names. The order of the returned property names is unspecified.
 <p>
 The returned property names are unique; that is, if a name is returned once by a given iteration, it will not be
 returned again during that same iteration.
 <p>
 There is no guarantee about the completeness or currency of the names returned, nor is there any guarantee that a
 name that is returned by the iterator will resolve to a non-empty value or be found in any configuration source
 associated with the configuration; for example, it is allowed for this method to return an empty set always.
 However, the implementation <em>should</em> return a set of names that is useful to a user that wishes to browse
 the configuration.
 <p>
 It is implementation-defined whether the returned names reflect a point-in-time "snapshot" of names, or an
 aggregation of multiple point-in-time "snapshots", or a more dynamic view of the available property names.
 Implementations are not required to return the same sequence of names on each iteration; however, the produced
 <code>Iterator</code> must adhere to the contract of that class, and must not return any more
 elements once its <code>hasNext()</code> method returns <code>false</code>.
 <p>
 The returned instance is thread safe and may be iterated concurrently. The individual iterators are not
 thread-safe.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the names of all configured keys of the underlying configuration</dd>
</dl>
</li>
</ul>
<a name="getConfigSources--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getConfigSources</h4>
<pre>java.lang.Iterable&lt;<a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">ConfigSource</a>&gt;&nbsp;getConfigSources()</pre>
<div class="block">Return all of the currently registered <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration sources</a> for this configuration.
 <p>
 The returned sources will be sorted by descending ordinal value and name, which can be iterated in a thread-safe
 manner. The <code>Iterable</code> contains a fixed number of <a href="../../../../org/eclipse/microprofile/config/spi/ConfigSource.html" title="interface in org.eclipse.microprofile.config.spi">configuration
 sources</a>, determined at application start time, and the config sources themselves may be static or dynamic.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the configuration sources</dd>
</dl>
</li>
</ul>
<a name="getConverter-java.lang.Class-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getConverter</h4>
<pre>&lt;T&gt;&nbsp;java.util.Optional&lt;<a href="../../../../org/eclipse/microprofile/config/spi/Converter.html" title="interface in org.eclipse.microprofile.config.spi">Converter</a>&lt;T&gt;&gt;&nbsp;getConverter(java.lang.Class&lt;T&gt;&nbsp;forType)</pre>
<div class="block">Return the <a href="../../../../org/eclipse/microprofile/config/spi/Converter.html" title="interface in org.eclipse.microprofile.config.spi"><code>Converter</code></a> used by this instance to produce instances of the specified type from string values.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - the conversion type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>forType</code> - the type to be produced by the converter</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an <code>Optional</code> containing the converter, or empty if no converter is available for the specified
         type</dd>
</dl>
</li>
</ul>
<a name="unwrap-java.lang.Class-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>unwrap</h4>
<pre>&lt;T&gt;&nbsp;T&nbsp;unwrap(java.lang.Class&lt;T&gt;&nbsp;type)</pre>
<div class="block">Returns an instance of the specific class, to allow access to the provider specific API.
 <p>
 If the MP Config provider implementation does not support the specified class, a <code>IllegalArgumentException</code>
 is thrown.
 <p>
 Unwrapping to the provider specific API may lead to non-portable behaviour.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - The type to unwrap to</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>type</code> - Class representing the type to unwrap to</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>An instance of the given type</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalArgumentException</code> - If the current provider does not support unwrapping to the given type</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev&nbsp;Class</li>
<li><a href="../../../../org/eclipse/microprofile/config/ConfigProvider.html" title="class in org.eclipse.microprofile.config"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/eclipse/microprofile/config/Config.html" target="_top">Frames</a></li>
<li><a href="Config.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
