blob: 6ed8b0927d4cc8c9631b797c87a932d352f7e532 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>Converter</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="Converter";
}
}
catch(err) {
}
//-->
var methods = {"i0":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract 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><a href="../../../../../org/eclipse/microprofile/config/spi/ConfigSourceProvider.html" title="interface in org.eclipse.microprofile.config.spi"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/eclipse/microprofile/config/spi/Converter.html" target="_top">Frames</a></li>
<li><a href="Converter.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>Field&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>Field&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.spi</div>
<h2 title="Interface Converter" class="title">Interface Converter&lt;T&gt;</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public interface <span class="typeNameLabel">Converter&lt;T&gt;</span></pre>
<div class="block"><p>Interface for converting configured values from String to any Java type.
<p>Converters for the following types are provided by default:
<ul>
<li><code>boolean</code> and <code>Boolean</code>, values for <code>true</code>: (case insensitive)
&quot;true&quot;, &quot;yes&quot;, &quot;Y&quot;, &quot;on&quot;, &quot;1&quot;</li>
<li><code>int</code> and <code>Integer</code></li>
<li><code>long</code> and <code>Long</code></li>
<li><code>float</code> and <code>Float</code>, a dot '.' is used to separate the fractional digits</li>
<li><code>double</code> and <code>Double</code>, a dot '.' is used to separate the fractional digits</li>
<li><code>java.lang.Class</code> based on the result of <code>Class.forName(java.lang.String)</code></li>
</ul>
<p>Custom Converters will get picked up via the <code>ServiceLoader</code> mechanism and and can be registered by
providing a file<br>
<code>META-INF/services/org.eclipse.microprofile.config.spi.Converter</code><br>
which contains the fully qualified <code>Converter</code> implementation class name as content.
<p>A Converter can specify a <code>javax.annotation.Priority</code>.
If no priority is explicitly assigned, the value of 100 is assumed.
If multiple Converters are registered for the same type, the one with the highest priority will be used. Highest number means highest priority.
<p>Custom Converters can also be registered programmatically via `ConfigBuilder#withConverters(Converter... converters)` or
`ConfigBuilder#withConverter(Class type, int priority, Converter converter)`.
All Built In Converters have a <code>javax.annotation.Priority</code> of 1
A Converter should handle null values returning either null or a valid Object of the specified type.
<h3>Array Converters</h3>
The implementation must support the Array converter for each built-in converters and custom converters.
The delimiter for the config value is ",". The escape character is "\".
<code>e.g. myPets=dog,cat,dog\,cat </code>
<p>
For the property injection, List and Set should be supported as well.
<p>
Usage:
<p>
<code>
String[] myPets = config.getValue("myPet", String[].class);
</code>
<p>
<code>@Inject @ConfigProperty(name="myPets") private String[] myPets;</code>
<p>
<code>@Inject @ConfigProperty(name="myPets") private List&lt;String&gt; myPets;</code>
<p>
<code>@Inject @ConfigProperty(name="myPets") private Set&lt;String&gt; myPets;</code>
<p>
myPets will be "dog", "cat", "dog,cat"
<h3>Implicit Converters</h3>
<p>If no explicit Converter and no built-in Converter could be found for a certain type,
the <code>Config</code> provides an <em>Implicit Converter</em>, if</p>
<ul>
<li>the target type <code>T</code> has a <code>public static T of(String)</code> method, or</li>
<li>the target type <code>T</code> has a <code>public static T valueOf(String)</code> method, or</li>
<li>the target type <code>T</code> has a public Constructor with a String parameter, or</li>
<li>the target type <code>T</code> has a <code>public static T parse(CharSequence)</code> method</li>
</ul></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== 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></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><a href="../../../../../org/eclipse/microprofile/config/spi/Converter.html" title="type parameter in Converter">T</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/eclipse/microprofile/config/spi/Converter.html#convert-java.lang.String-">convert</a></span>(java.lang.String&nbsp;value)</code>
<div class="block">Configure the string value to a specified type</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="convert-java.lang.String-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>convert</h4>
<pre><a href="../../../../../org/eclipse/microprofile/config/spi/Converter.html" title="type parameter in Converter">T</a>&nbsp;convert(java.lang.String&nbsp;value)</pre>
<div class="block">Configure the string value to a specified type</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>value</code> - the string representation of a property value.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the converted value or null</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalArgumentException</code> - if the value cannot be converted to the specified 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><a href="../../../../../org/eclipse/microprofile/config/spi/ConfigSourceProvider.html" title="interface in org.eclipse.microprofile.config.spi"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li>Next&nbsp;Class</li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/eclipse/microprofile/config/spi/Converter.html" target="_top">Frames</a></li>
<li><a href="Converter.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>Field&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>Field&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>