<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../javadoc.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>// ***************************************************************************************************************************<a name="line.1"></a>
<span class="sourceLineNo">002</span>// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *<a name="line.2"></a>
<span class="sourceLineNo">003</span>// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *<a name="line.3"></a>
<span class="sourceLineNo">004</span>// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *<a name="line.4"></a>
<span class="sourceLineNo">005</span>// * with the License.  You may obtain a copy of the License at                                                              *<a name="line.5"></a>
<span class="sourceLineNo">006</span>// *                                                                                                                         *<a name="line.6"></a>
<span class="sourceLineNo">007</span>// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *<a name="line.7"></a>
<span class="sourceLineNo">008</span>// *                                                                                                                         *<a name="line.8"></a>
<span class="sourceLineNo">009</span>// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *<a name="line.9"></a>
<span class="sourceLineNo">010</span>// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *<a name="line.10"></a>
<span class="sourceLineNo">011</span>// * specific language governing permissions and limitations under the License.                                              *<a name="line.11"></a>
<span class="sourceLineNo">012</span>// ***************************************************************************************************************************<a name="line.12"></a>
<span class="sourceLineNo">013</span>package org.apache.juneau.rest.client2;<a name="line.13"></a>
<span class="sourceLineNo">014</span><a name="line.14"></a>
<span class="sourceLineNo">015</span>import static org.apache.juneau.httppart.HttpPartType.*;<a name="line.15"></a>
<span class="sourceLineNo">016</span>import java.lang.reflect.*;<a name="line.16"></a>
<span class="sourceLineNo">017</span>import java.util.*;<a name="line.17"></a>
<span class="sourceLineNo">018</span>import java.util.regex.*;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import org.apache.http.*;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.juneau.*;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.juneau.assertions.*;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.juneau.http.*;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.juneau.http.header.*;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.juneau.httppart.*;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.juneau.oapi.*;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.juneau.parser.ParseException;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.juneau.reflect.*;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.juneau.utils.*;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Represents a single header on an HTTP response.<a name="line.32"></a>
<span class="sourceLineNo">033</span> *<a name="line.33"></a>
<span class="sourceLineNo">034</span> * &lt;p&gt;<a name="line.34"></a>
<span class="sourceLineNo">035</span> * An extension of an HttpClient {@link Header} that provides various support for converting the header to POJOs and<a name="line.35"></a>
<span class="sourceLineNo">036</span> * other convenience methods.<a name="line.36"></a>
<span class="sourceLineNo">037</span> *<a name="line.37"></a>
<span class="sourceLineNo">038</span> * &lt;ul class='seealso'&gt;<a name="line.38"></a>
<span class="sourceLineNo">039</span> *    &lt;li class='jc'&gt;{@link RestClient}<a name="line.39"></a>
<span class="sourceLineNo">040</span> *    &lt;li class='link'&gt;{@doc juneau-rest-client}<a name="line.40"></a>
<span class="sourceLineNo">041</span> * &lt;/ul&gt;<a name="line.41"></a>
<span class="sourceLineNo">042</span> */<a name="line.42"></a>
<span class="sourceLineNo">043</span>public class RestResponseHeader implements Header {<a name="line.43"></a>
<span class="sourceLineNo">044</span><a name="line.44"></a>
<span class="sourceLineNo">045</span>   static final Header NULL_HEADER = new Header() {<a name="line.45"></a>
<span class="sourceLineNo">046</span><a name="line.46"></a>
<span class="sourceLineNo">047</span>      @Override /* Header */<a name="line.47"></a>
<span class="sourceLineNo">048</span>      public String getName() {<a name="line.48"></a>
<span class="sourceLineNo">049</span>         return null;<a name="line.49"></a>
<span class="sourceLineNo">050</span>      }<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>      @Override /* Header */<a name="line.52"></a>
<span class="sourceLineNo">053</span>      public String getValue() {<a name="line.53"></a>
<span class="sourceLineNo">054</span>         return null;<a name="line.54"></a>
<span class="sourceLineNo">055</span>      }<a name="line.55"></a>
<span class="sourceLineNo">056</span><a name="line.56"></a>
<span class="sourceLineNo">057</span>      @Override /* Header */<a name="line.57"></a>
<span class="sourceLineNo">058</span>      public HeaderElement[] getElements() throws org.apache.http.ParseException {<a name="line.58"></a>
<span class="sourceLineNo">059</span>         return new HeaderElement[0];<a name="line.59"></a>
<span class="sourceLineNo">060</span>      }<a name="line.60"></a>
<span class="sourceLineNo">061</span>   };<a name="line.61"></a>
<span class="sourceLineNo">062</span><a name="line.62"></a>
<span class="sourceLineNo">063</span>   private final Header header;<a name="line.63"></a>
<span class="sourceLineNo">064</span>   private final RestRequest request;<a name="line.64"></a>
<span class="sourceLineNo">065</span>   private final RestResponse response;<a name="line.65"></a>
<span class="sourceLineNo">066</span>   private HttpPartParserSession parser;<a name="line.66"></a>
<span class="sourceLineNo">067</span>   private HttpPartSchema schema;<a name="line.67"></a>
<span class="sourceLineNo">068</span><a name="line.68"></a>
<span class="sourceLineNo">069</span>   /**<a name="line.69"></a>
<span class="sourceLineNo">070</span>    * Constructor.<a name="line.70"></a>
<span class="sourceLineNo">071</span>    *<a name="line.71"></a>
<span class="sourceLineNo">072</span>    * @param request The request object.<a name="line.72"></a>
<span class="sourceLineNo">073</span>    * @param response The response object.<a name="line.73"></a>
<span class="sourceLineNo">074</span>    * @param header The wrapped header.  Can be &lt;jk&gt;null&lt;/jk&gt;.<a name="line.74"></a>
<span class="sourceLineNo">075</span>    */<a name="line.75"></a>
<span class="sourceLineNo">076</span>   public RestResponseHeader(RestRequest request, RestResponse response, Header header) {<a name="line.76"></a>
<span class="sourceLineNo">077</span>      this.request = request;<a name="line.77"></a>
<span class="sourceLineNo">078</span>      this.response = response;<a name="line.78"></a>
<span class="sourceLineNo">079</span>      this.header = header == null ? NULL_HEADER : header;<a name="line.79"></a>
<span class="sourceLineNo">080</span>      parser(null);<a name="line.80"></a>
<span class="sourceLineNo">081</span>   }<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.83"></a>
<span class="sourceLineNo">084</span>   // Setters<a name="line.84"></a>
<span class="sourceLineNo">085</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>   /**<a name="line.87"></a>
<span class="sourceLineNo">088</span>    * Specifies the part schema for this header.<a name="line.88"></a>
<span class="sourceLineNo">089</span>    *<a name="line.89"></a>
<span class="sourceLineNo">090</span>    * &lt;p&gt;<a name="line.90"></a>
<span class="sourceLineNo">091</span>    * Used by schema-based part parsers such as {@link OpenApiParser}.<a name="line.91"></a>
<span class="sourceLineNo">092</span>    *<a name="line.92"></a>
<span class="sourceLineNo">093</span>    * @param value<a name="line.93"></a>
<span class="sourceLineNo">094</span>    *    The part schema.<a name="line.94"></a>
<span class="sourceLineNo">095</span>    * @return This object (for method chaining).<a name="line.95"></a>
<span class="sourceLineNo">096</span>    */<a name="line.96"></a>
<span class="sourceLineNo">097</span>   public RestResponseHeader schema(HttpPartSchema value) {<a name="line.97"></a>
<span class="sourceLineNo">098</span>      this.schema = value;<a name="line.98"></a>
<span class="sourceLineNo">099</span>      return this;<a name="line.99"></a>
<span class="sourceLineNo">100</span>   }<a name="line.100"></a>
<span class="sourceLineNo">101</span><a name="line.101"></a>
<span class="sourceLineNo">102</span>   /**<a name="line.102"></a>
<span class="sourceLineNo">103</span>    * Specifies the part parser to use for this header.<a name="line.103"></a>
<span class="sourceLineNo">104</span>    *<a name="line.104"></a>
<span class="sourceLineNo">105</span>    * &lt;p&gt;<a name="line.105"></a>
<span class="sourceLineNo">106</span>    * If not specified, uses the part parser defined on the client by calling {@link RestClientBuilder#partParser(Class)}.<a name="line.106"></a>
<span class="sourceLineNo">107</span>    *<a name="line.107"></a>
<span class="sourceLineNo">108</span>    * @param value<a name="line.108"></a>
<span class="sourceLineNo">109</span>    *    The new part parser to use for this header.<a name="line.109"></a>
<span class="sourceLineNo">110</span>    *    &lt;br&gt;If &lt;jk&gt;null&lt;/jk&gt;, {@link SimplePartParser#DEFAULT} will be used.<a name="line.110"></a>
<span class="sourceLineNo">111</span>    * @return This object (for method chaining).<a name="line.111"></a>
<span class="sourceLineNo">112</span>    */<a name="line.112"></a>
<span class="sourceLineNo">113</span>   public RestResponseHeader parser(HttpPartParserSession value) {<a name="line.113"></a>
<span class="sourceLineNo">114</span>      this.parser = value == null ? SimplePartParser.DEFAULT_SESSION : value;<a name="line.114"></a>
<span class="sourceLineNo">115</span>      return this;<a name="line.115"></a>
<span class="sourceLineNo">116</span>   }<a name="line.116"></a>
<span class="sourceLineNo">117</span><a name="line.117"></a>
<span class="sourceLineNo">118</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.118"></a>
<span class="sourceLineNo">119</span>   // Retrievers<a name="line.119"></a>
<span class="sourceLineNo">120</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>   /**<a name="line.122"></a>
<span class="sourceLineNo">123</span>    * Returns &lt;jk&gt;true&lt;/jk&gt; if this header exists on the response.<a name="line.123"></a>
<span class="sourceLineNo">124</span>    *<a name="line.124"></a>
<span class="sourceLineNo">125</span>    * @return &lt;jk&gt;true&lt;/jk&gt; if this header exists on the response.<a name="line.125"></a>
<span class="sourceLineNo">126</span>    */<a name="line.126"></a>
<span class="sourceLineNo">127</span>   public boolean exists() {<a name="line.127"></a>
<span class="sourceLineNo">128</span>      return header != NULL_HEADER;<a name="line.128"></a>
<span class="sourceLineNo">129</span>   }<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>   /**<a name="line.131"></a>
<span class="sourceLineNo">132</span>    * Returns the value of this header as a string.<a name="line.132"></a>
<span class="sourceLineNo">133</span>    *<a name="line.133"></a>
<span class="sourceLineNo">134</span>    * @return The value of this header as a string, or &lt;jk&gt;null&lt;/jk&gt; if header was not present.<a name="line.134"></a>
<span class="sourceLineNo">135</span>    */<a name="line.135"></a>
<span class="sourceLineNo">136</span>   public String asString() {<a name="line.136"></a>
<span class="sourceLineNo">137</span>      return getValue();<a name="line.137"></a>
<span class="sourceLineNo">138</span>   }<a name="line.138"></a>
<span class="sourceLineNo">139</span><a name="line.139"></a>
<span class="sourceLineNo">140</span>   /**<a name="line.140"></a>
<span class="sourceLineNo">141</span>    * Returns the value of this header as a {@link BasicHeader}.<a name="line.141"></a>
<span class="sourceLineNo">142</span>    *<a name="line.142"></a>
<span class="sourceLineNo">143</span>    * @param c The subclass of {@link BasicHeader} to instantiate.<a name="line.143"></a>
<span class="sourceLineNo">144</span>    * @param &lt;T&gt; The subclass of {@link BasicHeader} to instantiate.<a name="line.144"></a>
<span class="sourceLineNo">145</span>    * @return The value of this header as a string, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.145"></a>
<span class="sourceLineNo">146</span>    */<a name="line.146"></a>
<span class="sourceLineNo">147</span>   public &lt;T extends BasicHeader&gt; T asHeader(Class&lt;T&gt; c) {<a name="line.147"></a>
<span class="sourceLineNo">148</span>      try {<a name="line.148"></a>
<span class="sourceLineNo">149</span>         ClassInfo ci = ClassInfo.of(c);<a name="line.149"></a>
<span class="sourceLineNo">150</span>         ConstructorInfo cc = ci.getConstructor(Visibility.PUBLIC, String.class);<a name="line.150"></a>
<span class="sourceLineNo">151</span>         if (cc != null)<a name="line.151"></a>
<span class="sourceLineNo">152</span>            return cc.invoke(asString());<a name="line.152"></a>
<span class="sourceLineNo">153</span>         cc = ci.getConstructor(Visibility.PUBLIC, String.class, String.class);<a name="line.153"></a>
<span class="sourceLineNo">154</span>         if (cc != null)<a name="line.154"></a>
<span class="sourceLineNo">155</span>            return cc.invoke(getName(), asString());<a name="line.155"></a>
<span class="sourceLineNo">156</span>      } catch (Exception e) {<a name="line.156"></a>
<span class="sourceLineNo">157</span>         throw new RuntimeException(e);<a name="line.157"></a>
<span class="sourceLineNo">158</span>      }<a name="line.158"></a>
<span class="sourceLineNo">159</span>      throw new BasicRuntimeException("Could not determine a method to construct type {0}", c.getClass().getName());<a name="line.159"></a>
<span class="sourceLineNo">160</span>   }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span>   /**<a name="line.162"></a>
<span class="sourceLineNo">163</span>    * Returns the value of this header as a CSV array header.<a name="line.163"></a>
<span class="sourceLineNo">164</span>    *<a name="line.164"></a>
<span class="sourceLineNo">165</span>    * @return The value of this header as a CSV array header, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.165"></a>
<span class="sourceLineNo">166</span>    */<a name="line.166"></a>
<span class="sourceLineNo">167</span>   public BasicCsvArrayHeader asCsvArrayHeader() {<a name="line.167"></a>
<span class="sourceLineNo">168</span>      return new BasicCsvArrayHeader(getName(), getValue());<a name="line.168"></a>
<span class="sourceLineNo">169</span>   }<a name="line.169"></a>
<span class="sourceLineNo">170</span><a name="line.170"></a>
<span class="sourceLineNo">171</span>   /**<a name="line.171"></a>
<span class="sourceLineNo">172</span>    * Returns the value of this header as a date header.<a name="line.172"></a>
<span class="sourceLineNo">173</span>    *<a name="line.173"></a>
<span class="sourceLineNo">174</span>    * @return The value of this header as a date header, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.174"></a>
<span class="sourceLineNo">175</span>    */<a name="line.175"></a>
<span class="sourceLineNo">176</span>   public BasicDateHeader asDateHeader() {<a name="line.176"></a>
<span class="sourceLineNo">177</span>      return new BasicDateHeader(getName(), getValue());<a name="line.177"></a>
<span class="sourceLineNo">178</span>   }<a name="line.178"></a>
<span class="sourceLineNo">179</span><a name="line.179"></a>
<span class="sourceLineNo">180</span>   /**<a name="line.180"></a>
<span class="sourceLineNo">181</span>    * Returns the value of this header as an entity validator array header.<a name="line.181"></a>
<span class="sourceLineNo">182</span>    *<a name="line.182"></a>
<span class="sourceLineNo">183</span>    * @return The value of this header as an entity validator array header, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.183"></a>
<span class="sourceLineNo">184</span>    */<a name="line.184"></a>
<span class="sourceLineNo">185</span>   public BasicEntityTagArrayHeader asEntityTagArrayHeader() {<a name="line.185"></a>
<span class="sourceLineNo">186</span>      return new BasicEntityTagArrayHeader(getName(), getValue());<a name="line.186"></a>
<span class="sourceLineNo">187</span>   }<a name="line.187"></a>
<span class="sourceLineNo">188</span><a name="line.188"></a>
<span class="sourceLineNo">189</span>   /**<a name="line.189"></a>
<span class="sourceLineNo">190</span>    * Returns the value of this header as an entity validator header.<a name="line.190"></a>
<span class="sourceLineNo">191</span>    *<a name="line.191"></a>
<span class="sourceLineNo">192</span>    * @return The value of this header as an entity validator array, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.192"></a>
<span class="sourceLineNo">193</span>    */<a name="line.193"></a>
<span class="sourceLineNo">194</span>   public BasicEntityTagHeader asEntityTagHeader() {<a name="line.194"></a>
<span class="sourceLineNo">195</span>      return new BasicEntityTagHeader(getName(), getValue());<a name="line.195"></a>
<span class="sourceLineNo">196</span>   }<a name="line.196"></a>
<span class="sourceLineNo">197</span><a name="line.197"></a>
<span class="sourceLineNo">198</span>   /**<a name="line.198"></a>
<span class="sourceLineNo">199</span>    * Returns the value of this header as an integer header.<a name="line.199"></a>
<span class="sourceLineNo">200</span>    *<a name="line.200"></a>
<span class="sourceLineNo">201</span>    * @return The value of this header as an integer header, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.201"></a>
<span class="sourceLineNo">202</span>    */<a name="line.202"></a>
<span class="sourceLineNo">203</span>   public BasicIntegerHeader asIntegerHeader() {<a name="line.203"></a>
<span class="sourceLineNo">204</span>      return new BasicIntegerHeader(getName(), getValue());<a name="line.204"></a>
<span class="sourceLineNo">205</span>   }<a name="line.205"></a>
<span class="sourceLineNo">206</span><a name="line.206"></a>
<span class="sourceLineNo">207</span>   /**<a name="line.207"></a>
<span class="sourceLineNo">208</span>    * Returns the value of this header as a long header.<a name="line.208"></a>
<span class="sourceLineNo">209</span>    *<a name="line.209"></a>
<span class="sourceLineNo">210</span>    * @return The value of this header as a long header, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.210"></a>
<span class="sourceLineNo">211</span>    */<a name="line.211"></a>
<span class="sourceLineNo">212</span>   public BasicLongHeader asLongHeader() {<a name="line.212"></a>
<span class="sourceLineNo">213</span>      return new BasicLongHeader(getName(), getValue());<a name="line.213"></a>
<span class="sourceLineNo">214</span>   }<a name="line.214"></a>
<span class="sourceLineNo">215</span><a name="line.215"></a>
<span class="sourceLineNo">216</span>   /**<a name="line.216"></a>
<span class="sourceLineNo">217</span>    * Returns the value of this header as a range array header.<a name="line.217"></a>
<span class="sourceLineNo">218</span>    *<a name="line.218"></a>
<span class="sourceLineNo">219</span>    * @return The value of this header as a range array header, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.219"></a>
<span class="sourceLineNo">220</span>    */<a name="line.220"></a>
<span class="sourceLineNo">221</span>   public BasicStringRangeArrayHeader asStringRangeArrayHeader() {<a name="line.221"></a>
<span class="sourceLineNo">222</span>      return new BasicStringRangeArrayHeader(getName(), getValue());<a name="line.222"></a>
<span class="sourceLineNo">223</span>   }<a name="line.223"></a>
<span class="sourceLineNo">224</span><a name="line.224"></a>
<span class="sourceLineNo">225</span>   /**<a name="line.225"></a>
<span class="sourceLineNo">226</span>    * Returns the value of this header as a string header.<a name="line.226"></a>
<span class="sourceLineNo">227</span>    *<a name="line.227"></a>
<span class="sourceLineNo">228</span>    * @return The value of this header as a string header, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.228"></a>
<span class="sourceLineNo">229</span>    */<a name="line.229"></a>
<span class="sourceLineNo">230</span>   public BasicStringHeader asStringHeader() {<a name="line.230"></a>
<span class="sourceLineNo">231</span>      return new BasicStringHeader(getName(), getValue());<a name="line.231"></a>
<span class="sourceLineNo">232</span>   }<a name="line.232"></a>
<span class="sourceLineNo">233</span><a name="line.233"></a>
<span class="sourceLineNo">234</span>   /**<a name="line.234"></a>
<span class="sourceLineNo">235</span>    * Returns the value of this header as a URI header.<a name="line.235"></a>
<span class="sourceLineNo">236</span>    *<a name="line.236"></a>
<span class="sourceLineNo">237</span>    * @return The value of this header as a URI header, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.237"></a>
<span class="sourceLineNo">238</span>    */<a name="line.238"></a>
<span class="sourceLineNo">239</span>   public BasicUriHeader asUriHeader() {<a name="line.239"></a>
<span class="sourceLineNo">240</span>      return new BasicUriHeader(getName(), getValue());<a name="line.240"></a>
<span class="sourceLineNo">241</span>   }<a name="line.241"></a>
<span class="sourceLineNo">242</span><a name="line.242"></a>
<span class="sourceLineNo">243</span>   /**<a name="line.243"></a>
<span class="sourceLineNo">244</span>    * Same as {@link #asString()} but sets the value in a mutable for fluent calls.<a name="line.244"></a>
<span class="sourceLineNo">245</span>    *<a name="line.245"></a>
<span class="sourceLineNo">246</span>    * @param m The mutable to set the header value in.<a name="line.246"></a>
<span class="sourceLineNo">247</span>    * @return The response object (for method chaining).<a name="line.247"></a>
<span class="sourceLineNo">248</span>    */<a name="line.248"></a>
<span class="sourceLineNo">249</span>   public RestResponse asString(Mutable&lt;String&gt; m) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>      m.set(asString());<a name="line.250"></a>
<span class="sourceLineNo">251</span>      return response;<a name="line.251"></a>
<span class="sourceLineNo">252</span>   }<a name="line.252"></a>
<span class="sourceLineNo">253</span><a name="line.253"></a>
<span class="sourceLineNo">254</span>   /**<a name="line.254"></a>
<span class="sourceLineNo">255</span>    * Returns the value of this header as an {@link Optional}.<a name="line.255"></a>
<span class="sourceLineNo">256</span>    *<a name="line.256"></a>
<span class="sourceLineNo">257</span>    * @return The value of this header as an {@link Optional}, or an empty optional if header was not present.<a name="line.257"></a>
<span class="sourceLineNo">258</span>    */<a name="line.258"></a>
<span class="sourceLineNo">259</span>   public Optional&lt;String&gt; asOptionalString() {<a name="line.259"></a>
<span class="sourceLineNo">260</span>      return Optional.ofNullable(getValue());<a name="line.260"></a>
<span class="sourceLineNo">261</span>   }<a name="line.261"></a>
<span class="sourceLineNo">262</span><a name="line.262"></a>
<span class="sourceLineNo">263</span>   /**<a name="line.263"></a>
<span class="sourceLineNo">264</span>    * Returns the value of this header as a string with a default value.<a name="line.264"></a>
<span class="sourceLineNo">265</span>    *<a name="line.265"></a>
<span class="sourceLineNo">266</span>    * @param def The default value.<a name="line.266"></a>
<span class="sourceLineNo">267</span>    * @return The value of this header as a string, or the default value if header was not present.<a name="line.267"></a>
<span class="sourceLineNo">268</span>    */<a name="line.268"></a>
<span class="sourceLineNo">269</span>   public String asStringOrElse(String def) {<a name="line.269"></a>
<span class="sourceLineNo">270</span>      return getValue() == null ? def : getValue();<a name="line.270"></a>
<span class="sourceLineNo">271</span>   }<a name="line.271"></a>
<span class="sourceLineNo">272</span><a name="line.272"></a>
<span class="sourceLineNo">273</span>   /**<a name="line.273"></a>
<span class="sourceLineNo">274</span>    * Same as {@link #asStringOrElse(String)} but sets the value in a mutable for fluent calls.<a name="line.274"></a>
<span class="sourceLineNo">275</span>    *<a name="line.275"></a>
<span class="sourceLineNo">276</span>    * @param m The mutable to set the header value in.<a name="line.276"></a>
<span class="sourceLineNo">277</span>    * @param def The default value.<a name="line.277"></a>
<span class="sourceLineNo">278</span>    * @return The response object (for method chaining).<a name="line.278"></a>
<span class="sourceLineNo">279</span>    */<a name="line.279"></a>
<span class="sourceLineNo">280</span>   public RestResponse asStringOrElse(Mutable&lt;String&gt; m, String def) {<a name="line.280"></a>
<span class="sourceLineNo">281</span>      m.set(asStringOrElse(def));<a name="line.281"></a>
<span class="sourceLineNo">282</span>      return response;<a name="line.282"></a>
<span class="sourceLineNo">283</span>   }<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>   /**<a name="line.285"></a>
<span class="sourceLineNo">286</span>    * Converts this header to the specified type.<a name="line.286"></a>
<span class="sourceLineNo">287</span>    *<a name="line.287"></a>
<span class="sourceLineNo">288</span>    * @param &lt;T&gt; The type to convert to.<a name="line.288"></a>
<span class="sourceLineNo">289</span>    * @param type The type to convert to.<a name="line.289"></a>
<span class="sourceLineNo">290</span>    * @param args The type parameters.<a name="line.290"></a>
<span class="sourceLineNo">291</span>    * @return The converted type, or &lt;jk&gt;null&lt;/jk&gt; if header is not present.<a name="line.291"></a>
<span class="sourceLineNo">292</span>    * @throws RestCallException If value could not be parsed.<a name="line.292"></a>
<span class="sourceLineNo">293</span>    */<a name="line.293"></a>
<span class="sourceLineNo">294</span>   public &lt;T&gt; T as(Type type, Type...args) throws RestCallException {<a name="line.294"></a>
<span class="sourceLineNo">295</span>      return as(request.getClassMeta(type, args));<a name="line.295"></a>
<span class="sourceLineNo">296</span>   }<a name="line.296"></a>
<span class="sourceLineNo">297</span><a name="line.297"></a>
<span class="sourceLineNo">298</span>   /**<a name="line.298"></a>
<span class="sourceLineNo">299</span>    * Same as {@link #as(Type,Type...)} but sets the value in a mutable for fluent calls.<a name="line.299"></a>
<span class="sourceLineNo">300</span>    *<a name="line.300"></a>
<span class="sourceLineNo">301</span>    * @param m The mutable to set the parsed header value in.<a name="line.301"></a>
<span class="sourceLineNo">302</span>    * @param &lt;T&gt; The type to convert to.<a name="line.302"></a>
<span class="sourceLineNo">303</span>    * @param type The type to convert to.<a name="line.303"></a>
<span class="sourceLineNo">304</span>    * @param args The type parameters.<a name="line.304"></a>
<span class="sourceLineNo">305</span>    * @return The response object (for method chaining).<a name="line.305"></a>
<span class="sourceLineNo">306</span>    * @throws RestCallException If value could not be parsed.<a name="line.306"></a>
<span class="sourceLineNo">307</span>    */<a name="line.307"></a>
<span class="sourceLineNo">308</span>   public &lt;T&gt; RestResponse as(Mutable&lt;T&gt; m, Type type, Type...args) throws RestCallException {<a name="line.308"></a>
<span class="sourceLineNo">309</span>      m.set(as(type, args));<a name="line.309"></a>
<span class="sourceLineNo">310</span>      return response;<a name="line.310"></a>
<span class="sourceLineNo">311</span>   }<a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>   /**<a name="line.313"></a>
<span class="sourceLineNo">314</span>    * Converts this header to the specified type.<a name="line.314"></a>
<span class="sourceLineNo">315</span>    *<a name="line.315"></a>
<span class="sourceLineNo">316</span>    * @param &lt;T&gt; The type to convert to.<a name="line.316"></a>
<span class="sourceLineNo">317</span>    * @param type The type to convert to.<a name="line.317"></a>
<span class="sourceLineNo">318</span>    * @return The converted type, or &lt;jk&gt;null&lt;/jk&gt; if header is not present.<a name="line.318"></a>
<span class="sourceLineNo">319</span>    * @throws RestCallException If value could not be parsed.<a name="line.319"></a>
<span class="sourceLineNo">320</span>    */<a name="line.320"></a>
<span class="sourceLineNo">321</span>   public &lt;T&gt; T as(Class&lt;T&gt; type) throws RestCallException {<a name="line.321"></a>
<span class="sourceLineNo">322</span>      return as(request.getClassMeta(type));<a name="line.322"></a>
<span class="sourceLineNo">323</span>   }<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
<span class="sourceLineNo">325</span>   /**<a name="line.325"></a>
<span class="sourceLineNo">326</span>    * Same as {@link #as(Class)} but sets the value in a mutable for fluent calls.<a name="line.326"></a>
<span class="sourceLineNo">327</span>    *<a name="line.327"></a>
<span class="sourceLineNo">328</span>    * @param m The mutable to set the parsed header value in.<a name="line.328"></a>
<span class="sourceLineNo">329</span>    * @param &lt;T&gt; The type to convert to.<a name="line.329"></a>
<span class="sourceLineNo">330</span>    * @param type The type to convert to.<a name="line.330"></a>
<span class="sourceLineNo">331</span>    * @return The response object (for method chaining).<a name="line.331"></a>
<span class="sourceLineNo">332</span>    * @throws RestCallException If value could not be parsed.<a name="line.332"></a>
<span class="sourceLineNo">333</span>    */<a name="line.333"></a>
<span class="sourceLineNo">334</span>   public &lt;T&gt; RestResponse as(Mutable&lt;T&gt; m, Class&lt;T&gt; type) throws RestCallException {<a name="line.334"></a>
<span class="sourceLineNo">335</span>      m.set(as(type));<a name="line.335"></a>
<span class="sourceLineNo">336</span>      return response;<a name="line.336"></a>
<span class="sourceLineNo">337</span>   }<a name="line.337"></a>
<span class="sourceLineNo">338</span><a name="line.338"></a>
<span class="sourceLineNo">339</span>   /**<a name="line.339"></a>
<span class="sourceLineNo">340</span>    * Converts this header to the specified type.<a name="line.340"></a>
<span class="sourceLineNo">341</span>    *<a name="line.341"></a>
<span class="sourceLineNo">342</span>    * @param &lt;T&gt; The type to convert to.<a name="line.342"></a>
<span class="sourceLineNo">343</span>    * @param type The type to convert to.<a name="line.343"></a>
<span class="sourceLineNo">344</span>    * @return The converted type, or &lt;jk&gt;null&lt;/jk&gt; if header is not present.<a name="line.344"></a>
<span class="sourceLineNo">345</span>    * @throws RestCallException If value could not be parsed.<a name="line.345"></a>
<span class="sourceLineNo">346</span>    */<a name="line.346"></a>
<span class="sourceLineNo">347</span>   public &lt;T&gt; T as(ClassMeta&lt;T&gt; type) throws RestCallException {<a name="line.347"></a>
<span class="sourceLineNo">348</span>      try {<a name="line.348"></a>
<span class="sourceLineNo">349</span>         return parser.parse(HEADER, schema, asString(), type);<a name="line.349"></a>
<span class="sourceLineNo">350</span>      } catch (ParseException e) {<a name="line.350"></a>
<span class="sourceLineNo">351</span>         throw new RestCallException(response, e, "Could not parse response header {0}.", getName());<a name="line.351"></a>
<span class="sourceLineNo">352</span>      }<a name="line.352"></a>
<span class="sourceLineNo">353</span>   }<a name="line.353"></a>
<span class="sourceLineNo">354</span><a name="line.354"></a>
<span class="sourceLineNo">355</span>   /**<a name="line.355"></a>
<span class="sourceLineNo">356</span>    * Same as {@link #as(ClassMeta)} but sets the value in a mutable for fluent calls.<a name="line.356"></a>
<span class="sourceLineNo">357</span>    *<a name="line.357"></a>
<span class="sourceLineNo">358</span>    * @param m The mutable to set the parsed header value in.<a name="line.358"></a>
<span class="sourceLineNo">359</span>    * @param &lt;T&gt; The type to convert to.<a name="line.359"></a>
<span class="sourceLineNo">360</span>    * @param type The type to convert to.<a name="line.360"></a>
<span class="sourceLineNo">361</span>    * @return The response object (for method chaining).<a name="line.361"></a>
<span class="sourceLineNo">362</span>    * @throws RestCallException If value could not be parsed.<a name="line.362"></a>
<span class="sourceLineNo">363</span>    */<a name="line.363"></a>
<span class="sourceLineNo">364</span>   public &lt;T&gt; RestResponse as(Mutable&lt;T&gt; m, ClassMeta&lt;T&gt; type) throws RestCallException {<a name="line.364"></a>
<span class="sourceLineNo">365</span>      m.set(as(type));<a name="line.365"></a>
<span class="sourceLineNo">366</span>      return response;<a name="line.366"></a>
<span class="sourceLineNo">367</span>   }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
<span class="sourceLineNo">369</span>   /**<a name="line.369"></a>
<span class="sourceLineNo">370</span>    * Same as {@link #as(Type,Type...)} but returns the value as an {@link Optional}.<a name="line.370"></a>
<span class="sourceLineNo">371</span>    *<a name="line.371"></a>
<span class="sourceLineNo">372</span>    * @param &lt;T&gt; The type to convert to.<a name="line.372"></a>
<span class="sourceLineNo">373</span>    * @param type The type to convert to.<a name="line.373"></a>
<span class="sourceLineNo">374</span>    * @param args The type parameters.<a name="line.374"></a>
<span class="sourceLineNo">375</span>    * @return The parsed value as an {@link Optional}, or an empty optional if header was not present.<a name="line.375"></a>
<span class="sourceLineNo">376</span>    * @throws RestCallException If value could not be parsed.<a name="line.376"></a>
<span class="sourceLineNo">377</span>    */<a name="line.377"></a>
<span class="sourceLineNo">378</span>   public &lt;T&gt; Optional&lt;T&gt; asOptional(Type type, Type...args) throws RestCallException {<a name="line.378"></a>
<span class="sourceLineNo">379</span>      return Optional.ofNullable(as(type, args));<a name="line.379"></a>
<span class="sourceLineNo">380</span>   }<a name="line.380"></a>
<span class="sourceLineNo">381</span><a name="line.381"></a>
<span class="sourceLineNo">382</span>   /**<a name="line.382"></a>
<span class="sourceLineNo">383</span>    * Same as {@link #asOptional(Type,Type...)} but sets the value in a mutable for fluent calls.<a name="line.383"></a>
<span class="sourceLineNo">384</span>    *<a name="line.384"></a>
<span class="sourceLineNo">385</span>    * @param m The mutable to set the parsed header value in.<a name="line.385"></a>
<span class="sourceLineNo">386</span>    * @param &lt;T&gt; The type to convert to.<a name="line.386"></a>
<span class="sourceLineNo">387</span>    * @param type The type to convert to.<a name="line.387"></a>
<span class="sourceLineNo">388</span>    * @param args The type parameters.<a name="line.388"></a>
<span class="sourceLineNo">389</span>    * @return The response object (for method chaining).<a name="line.389"></a>
<span class="sourceLineNo">390</span>    * @throws RestCallException If value could not be parsed.<a name="line.390"></a>
<span class="sourceLineNo">391</span>    */<a name="line.391"></a>
<span class="sourceLineNo">392</span>   public &lt;T&gt; RestResponse asOptional(Mutable&lt;Optional&lt;T&gt;&gt; m, Type type, Type...args) throws RestCallException {<a name="line.392"></a>
<span class="sourceLineNo">393</span>      m.set(asOptional(type, args));<a name="line.393"></a>
<span class="sourceLineNo">394</span>      return response;<a name="line.394"></a>
<span class="sourceLineNo">395</span>   }<a name="line.395"></a>
<span class="sourceLineNo">396</span><a name="line.396"></a>
<span class="sourceLineNo">397</span>   /**<a name="line.397"></a>
<span class="sourceLineNo">398</span>    * Same as {@link #as(Class)} but returns the value as an {@link Optional}.<a name="line.398"></a>
<span class="sourceLineNo">399</span>    *<a name="line.399"></a>
<span class="sourceLineNo">400</span>    * @param &lt;T&gt; The type to convert to.<a name="line.400"></a>
<span class="sourceLineNo">401</span>    * @param type The type to convert to.<a name="line.401"></a>
<span class="sourceLineNo">402</span>    * @return The parsed value as an {@link Optional}, or an empty optional if header was not present.<a name="line.402"></a>
<span class="sourceLineNo">403</span>    * @throws RestCallException If value could not be parsed.<a name="line.403"></a>
<span class="sourceLineNo">404</span>    */<a name="line.404"></a>
<span class="sourceLineNo">405</span>   public &lt;T&gt; Optional&lt;T&gt; asOptional(Class&lt;T&gt; type) throws RestCallException {<a name="line.405"></a>
<span class="sourceLineNo">406</span>      return Optional.ofNullable(as(type));<a name="line.406"></a>
<span class="sourceLineNo">407</span>   }<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span>   /**<a name="line.409"></a>
<span class="sourceLineNo">410</span>    * Same as {@link #asOptional(Class)} but sets the value in a mutable for fluent calls.<a name="line.410"></a>
<span class="sourceLineNo">411</span>    *<a name="line.411"></a>
<span class="sourceLineNo">412</span>    * @param m The mutable to set the parsed header value in.<a name="line.412"></a>
<span class="sourceLineNo">413</span>    * @param &lt;T&gt; The type to convert to.<a name="line.413"></a>
<span class="sourceLineNo">414</span>    * @param type The type to convert to.<a name="line.414"></a>
<span class="sourceLineNo">415</span>    * @return The response object (for method chaining).<a name="line.415"></a>
<span class="sourceLineNo">416</span>    * @throws RestCallException If value could not be parsed.<a name="line.416"></a>
<span class="sourceLineNo">417</span>    */<a name="line.417"></a>
<span class="sourceLineNo">418</span>   public &lt;T&gt; RestResponse asOptional(Mutable&lt;Optional&lt;T&gt;&gt; m, Class&lt;T&gt; type) throws RestCallException {<a name="line.418"></a>
<span class="sourceLineNo">419</span>      m.set(asOptional(type));<a name="line.419"></a>
<span class="sourceLineNo">420</span>      return response;<a name="line.420"></a>
<span class="sourceLineNo">421</span>   }<a name="line.421"></a>
<span class="sourceLineNo">422</span><a name="line.422"></a>
<span class="sourceLineNo">423</span>   /**<a name="line.423"></a>
<span class="sourceLineNo">424</span>    * Same as {@link #as(ClassMeta)} but returns the value as an {@link Optional}.<a name="line.424"></a>
<span class="sourceLineNo">425</span>    *<a name="line.425"></a>
<span class="sourceLineNo">426</span>    * @param &lt;T&gt; The type to convert to.<a name="line.426"></a>
<span class="sourceLineNo">427</span>    * @param type The type to convert to.<a name="line.427"></a>
<span class="sourceLineNo">428</span>    * @return The parsed value as an {@link Optional}, or an empty optional if header was not present.<a name="line.428"></a>
<span class="sourceLineNo">429</span>    * @throws RestCallException If value could not be parsed.<a name="line.429"></a>
<span class="sourceLineNo">430</span>    */<a name="line.430"></a>
<span class="sourceLineNo">431</span>   public &lt;T&gt; Optional&lt;T&gt; asOptional(ClassMeta&lt;T&gt; type) throws RestCallException {<a name="line.431"></a>
<span class="sourceLineNo">432</span>      return Optional.ofNullable(as(type));<a name="line.432"></a>
<span class="sourceLineNo">433</span>   }<a name="line.433"></a>
<span class="sourceLineNo">434</span><a name="line.434"></a>
<span class="sourceLineNo">435</span>   /**<a name="line.435"></a>
<span class="sourceLineNo">436</span>    * Same as {@link #asOptional(ClassMeta)} but sets the value in a mutable for fluent calls.<a name="line.436"></a>
<span class="sourceLineNo">437</span>    *<a name="line.437"></a>
<span class="sourceLineNo">438</span>    * @param m The mutable to set the parsed header value in.<a name="line.438"></a>
<span class="sourceLineNo">439</span>    * @param &lt;T&gt; The type to convert to.<a name="line.439"></a>
<span class="sourceLineNo">440</span>    * @param type The type to convert to.<a name="line.440"></a>
<span class="sourceLineNo">441</span>    * @return The response object (for method chaining).<a name="line.441"></a>
<span class="sourceLineNo">442</span>    * @throws RestCallException If value could not be parsed.<a name="line.442"></a>
<span class="sourceLineNo">443</span>    */<a name="line.443"></a>
<span class="sourceLineNo">444</span>   public &lt;T&gt; RestResponse asOptional(Mutable&lt;Optional&lt;T&gt;&gt; m, ClassMeta&lt;T&gt; type) throws RestCallException {<a name="line.444"></a>
<span class="sourceLineNo">445</span>      m.set(asOptional(type));<a name="line.445"></a>
<span class="sourceLineNo">446</span>      return response;<a name="line.446"></a>
<span class="sourceLineNo">447</span>   }<a name="line.447"></a>
<span class="sourceLineNo">448</span><a name="line.448"></a>
<span class="sourceLineNo">449</span>   /**<a name="line.449"></a>
<span class="sourceLineNo">450</span>    * Matches the specified pattern against this header value.<a name="line.450"></a>
<span class="sourceLineNo">451</span>    *<a name="line.451"></a>
<span class="sourceLineNo">452</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.452"></a>
<span class="sourceLineNo">453</span>    * &lt;p class='bcode w800'&gt;<a name="line.453"></a>
<span class="sourceLineNo">454</span>    *    &lt;jc&gt;// Parse header using a regular expression.&lt;/jc&gt;<a name="line.454"></a>
<span class="sourceLineNo">455</span>    *    Matcher &lt;jv&gt;matcher&lt;/jv&gt; = &lt;jv&gt;client&lt;/jv&gt;<a name="line.455"></a>
<span class="sourceLineNo">456</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.456"></a>
<span class="sourceLineNo">457</span>    *       .run()<a name="line.457"></a>
<span class="sourceLineNo">458</span>    *       .getHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).asMatcher(Pattern.&lt;jsm&gt;compile&lt;/jsm&gt;(&lt;js&gt;"application/(.*)"&lt;/js&gt;));<a name="line.458"></a>
<span class="sourceLineNo">459</span>    *<a name="line.459"></a>
<span class="sourceLineNo">460</span>    *    &lt;jk&gt;if&lt;/jk&gt; (&lt;jv&gt;matcher&lt;/jv&gt;.matches()) {<a name="line.460"></a>
<span class="sourceLineNo">461</span>    *       String &lt;jv&gt;mediaType&lt;/jv&gt; = &lt;jv&gt;matcher&lt;/jv&gt;.group(1);<a name="line.461"></a>
<span class="sourceLineNo">462</span>    *    }<a name="line.462"></a>
<span class="sourceLineNo">463</span>    * &lt;/p&gt;<a name="line.463"></a>
<span class="sourceLineNo">464</span>    *<a name="line.464"></a>
<span class="sourceLineNo">465</span>    * @param pattern The regular expression pattern to match.<a name="line.465"></a>
<span class="sourceLineNo">466</span>    * @return The matcher.<a name="line.466"></a>
<span class="sourceLineNo">467</span>    * @throws RestCallException If a connection error occurred.<a name="line.467"></a>
<span class="sourceLineNo">468</span>    */<a name="line.468"></a>
<span class="sourceLineNo">469</span>   public Matcher asMatcher(Pattern pattern) throws RestCallException {<a name="line.469"></a>
<span class="sourceLineNo">470</span>      return pattern.matcher(asStringOrElse(""));<a name="line.470"></a>
<span class="sourceLineNo">471</span>   }<a name="line.471"></a>
<span class="sourceLineNo">472</span><a name="line.472"></a>
<span class="sourceLineNo">473</span>   /**<a name="line.473"></a>
<span class="sourceLineNo">474</span>    * Same as {@link #asMatcher(Pattern)} but sets the value in a mutable for fluent calls.<a name="line.474"></a>
<span class="sourceLineNo">475</span>    *<a name="line.475"></a>
<span class="sourceLineNo">476</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.476"></a>
<span class="sourceLineNo">477</span>    * &lt;p class='bcode w800'&gt;<a name="line.477"></a>
<span class="sourceLineNo">478</span>    *    &lt;jc&gt;// Parse header using a regular expression.&lt;/jc&gt;<a name="line.478"></a>
<span class="sourceLineNo">479</span>    *    Mutable&amp;lt;Matcher&amp;gt; &lt;jv&gt;mutable&lt;/jv&gt; = Mutable.&lt;jsm&gt;create&lt;/jsm&gt;();<a name="line.479"></a>
<span class="sourceLineNo">480</span>    *<a name="line.480"></a>
<span class="sourceLineNo">481</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.481"></a>
<span class="sourceLineNo">482</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.482"></a>
<span class="sourceLineNo">483</span>    *       .run()<a name="line.483"></a>
<span class="sourceLineNo">484</span>    *       .getHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).asMatcher(&lt;jv&gt;mutable&lt;/jv&gt;, Pattern.&lt;jsm&gt;compile&lt;/jsm&gt;(&lt;js&gt;"application/(.*)"&lt;/js&gt;));<a name="line.484"></a>
<span class="sourceLineNo">485</span>    *<a name="line.485"></a>
<span class="sourceLineNo">486</span>    *    &lt;jk&gt;if&lt;/jk&gt; (&lt;jv&gt;mutable&lt;/jv&gt;.get().matches()) {<a name="line.486"></a>
<span class="sourceLineNo">487</span>    *       String &lt;jv&gt;mediaType&lt;/jv&gt; = &lt;jv&gt;mutable&lt;/jv&gt;.get().group(1);<a name="line.487"></a>
<span class="sourceLineNo">488</span>    *    }<a name="line.488"></a>
<span class="sourceLineNo">489</span>    * &lt;/p&gt;<a name="line.489"></a>
<span class="sourceLineNo">490</span>    *<a name="line.490"></a>
<span class="sourceLineNo">491</span>    * @param m The mutable to set the value in.<a name="line.491"></a>
<span class="sourceLineNo">492</span>    * @param pattern The regular expression pattern to match.<a name="line.492"></a>
<span class="sourceLineNo">493</span>    * @return The response object (for method chaining).<a name="line.493"></a>
<span class="sourceLineNo">494</span>    * @throws RestCallException If a connection error occurred.<a name="line.494"></a>
<span class="sourceLineNo">495</span>    */<a name="line.495"></a>
<span class="sourceLineNo">496</span>   public RestResponse asMatcher(Mutable&lt;Matcher&gt; m, Pattern pattern) throws RestCallException {<a name="line.496"></a>
<span class="sourceLineNo">497</span>      m.set(pattern.matcher(asStringOrElse("")));<a name="line.497"></a>
<span class="sourceLineNo">498</span>      return response;<a name="line.498"></a>
<span class="sourceLineNo">499</span>   }<a name="line.499"></a>
<span class="sourceLineNo">500</span><a name="line.500"></a>
<span class="sourceLineNo">501</span>   /**<a name="line.501"></a>
<span class="sourceLineNo">502</span>    * Matches the specified pattern against this header value.<a name="line.502"></a>
<span class="sourceLineNo">503</span>    *<a name="line.503"></a>
<span class="sourceLineNo">504</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.504"></a>
<span class="sourceLineNo">505</span>    * &lt;p class='bcode w800'&gt;<a name="line.505"></a>
<span class="sourceLineNo">506</span>    *    &lt;jc&gt;// Parse header using a regular expression.&lt;/jc&gt;<a name="line.506"></a>
<span class="sourceLineNo">507</span>    *    Matcher &lt;jv&gt;matcher&lt;/jv&gt; = &lt;jv&gt;client&lt;/jv&gt;<a name="line.507"></a>
<span class="sourceLineNo">508</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.508"></a>
<span class="sourceLineNo">509</span>    *       .run()<a name="line.509"></a>
<span class="sourceLineNo">510</span>    *       .getHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).asMatcher(&lt;js&gt;"application/(.*)"&lt;/js&gt;);<a name="line.510"></a>
<span class="sourceLineNo">511</span>    *<a name="line.511"></a>
<span class="sourceLineNo">512</span>    *    &lt;jk&gt;if&lt;/jk&gt; (&lt;jv&gt;matcher&lt;/jv&gt;.matches()) {<a name="line.512"></a>
<span class="sourceLineNo">513</span>    *       String &lt;jv&gt;mediaType&lt;/jv&gt; = &lt;jv&gt;matcher&lt;/jv&gt;.group(1);<a name="line.513"></a>
<span class="sourceLineNo">514</span>    *    }<a name="line.514"></a>
<span class="sourceLineNo">515</span>    * &lt;/p&gt;<a name="line.515"></a>
<span class="sourceLineNo">516</span>    *<a name="line.516"></a>
<span class="sourceLineNo">517</span>    * @param regex The regular expression pattern to match.<a name="line.517"></a>
<span class="sourceLineNo">518</span>    * @return The matcher.<a name="line.518"></a>
<span class="sourceLineNo">519</span>    * @throws RestCallException If a connection error occurred.<a name="line.519"></a>
<span class="sourceLineNo">520</span>    */<a name="line.520"></a>
<span class="sourceLineNo">521</span>   public Matcher asMatcher(String regex) throws RestCallException {<a name="line.521"></a>
<span class="sourceLineNo">522</span>      return asMatcher(regex, 0);<a name="line.522"></a>
<span class="sourceLineNo">523</span>   }<a name="line.523"></a>
<span class="sourceLineNo">524</span><a name="line.524"></a>
<span class="sourceLineNo">525</span>   /**<a name="line.525"></a>
<span class="sourceLineNo">526</span>    * Same as {@link #asMatcher(String)} but sets the value in a mutable for fluent calls.<a name="line.526"></a>
<span class="sourceLineNo">527</span>    *<a name="line.527"></a>
<span class="sourceLineNo">528</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.528"></a>
<span class="sourceLineNo">529</span>    * &lt;p class='bcode w800'&gt;<a name="line.529"></a>
<span class="sourceLineNo">530</span>    *    &lt;jc&gt;// Parse header using a regular expression.&lt;/jc&gt;<a name="line.530"></a>
<span class="sourceLineNo">531</span>    *    Mutable&amp;lt;Matcher&amp;gt; &lt;jv&gt;mutable&lt;/jv&gt; = Mutable.&lt;jsm&gt;create&lt;/jsm&gt;();<a name="line.531"></a>
<span class="sourceLineNo">532</span>    *<a name="line.532"></a>
<span class="sourceLineNo">533</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.533"></a>
<span class="sourceLineNo">534</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.534"></a>
<span class="sourceLineNo">535</span>    *       .run()<a name="line.535"></a>
<span class="sourceLineNo">536</span>    *       .getHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).asMatcher(&lt;jv&gt;mutable&lt;/jv&gt;, &lt;js&gt;"application/(.*)"&lt;/js&gt;);<a name="line.536"></a>
<span class="sourceLineNo">537</span>    *<a name="line.537"></a>
<span class="sourceLineNo">538</span>    *    &lt;jk&gt;if&lt;/jk&gt; (&lt;jv&gt;mutable&lt;/jv&gt;.get().matches()) {<a name="line.538"></a>
<span class="sourceLineNo">539</span>    *       String &lt;jv&gt;mediaType&lt;/jv&gt; = &lt;jv&gt;mutable&lt;/jv&gt;.get().group(1);<a name="line.539"></a>
<span class="sourceLineNo">540</span>    *    }<a name="line.540"></a>
<span class="sourceLineNo">541</span>    * &lt;/p&gt;<a name="line.541"></a>
<span class="sourceLineNo">542</span>    *<a name="line.542"></a>
<span class="sourceLineNo">543</span>    * @param m The mutable to set the value in.<a name="line.543"></a>
<span class="sourceLineNo">544</span>    * @param regex The regular expression pattern to match.<a name="line.544"></a>
<span class="sourceLineNo">545</span>    * @return The response object (for method chaining).<a name="line.545"></a>
<span class="sourceLineNo">546</span>    * @throws RestCallException If a connection error occurred.<a name="line.546"></a>
<span class="sourceLineNo">547</span>    */<a name="line.547"></a>
<span class="sourceLineNo">548</span>   public RestResponse asMatcher(Mutable&lt;Matcher&gt; m, String regex) throws RestCallException {<a name="line.548"></a>
<span class="sourceLineNo">549</span>      m.set(asMatcher(regex, 0));<a name="line.549"></a>
<span class="sourceLineNo">550</span>      return response;<a name="line.550"></a>
<span class="sourceLineNo">551</span>   }<a name="line.551"></a>
<span class="sourceLineNo">552</span><a name="line.552"></a>
<span class="sourceLineNo">553</span>   /**<a name="line.553"></a>
<span class="sourceLineNo">554</span>    * Matches the specified pattern against this header value.<a name="line.554"></a>
<span class="sourceLineNo">555</span>    *<a name="line.555"></a>
<span class="sourceLineNo">556</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.556"></a>
<span class="sourceLineNo">557</span>    * &lt;p class='bcode w800'&gt;<a name="line.557"></a>
<span class="sourceLineNo">558</span>    *    &lt;jc&gt;// Parse header using a regular expression.&lt;/jc&gt;<a name="line.558"></a>
<span class="sourceLineNo">559</span>    *    Matcher &lt;jv&gt;matcher&lt;/jv&gt; = &lt;jv&gt;client&lt;/jv&gt;<a name="line.559"></a>
<span class="sourceLineNo">560</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.560"></a>
<span class="sourceLineNo">561</span>    *       .run()<a name="line.561"></a>
<span class="sourceLineNo">562</span>    *       .getHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).asMatcher(&lt;js&gt;"application/(.*)"&lt;/js&gt;, &lt;jsf&gt;CASE_INSENSITIVE&lt;/jsf&gt;);<a name="line.562"></a>
<span class="sourceLineNo">563</span>    *<a name="line.563"></a>
<span class="sourceLineNo">564</span>    *    &lt;jk&gt;if&lt;/jk&gt; (&lt;jv&gt;matcher&lt;/jv&gt;.matches()) {<a name="line.564"></a>
<span class="sourceLineNo">565</span>    *       String &lt;jv&gt;mediaType&lt;/jv&gt; = &lt;jv&gt;matcher&lt;/jv&gt;.group(1);<a name="line.565"></a>
<span class="sourceLineNo">566</span>    *    }<a name="line.566"></a>
<span class="sourceLineNo">567</span>    * &lt;/p&gt;<a name="line.567"></a>
<span class="sourceLineNo">568</span>    *<a name="line.568"></a>
<span class="sourceLineNo">569</span>    * @param regex The regular expression pattern to match.<a name="line.569"></a>
<span class="sourceLineNo">570</span>    * @param flags Pattern match flags.  See {@link Pattern#compile(String, int)}.<a name="line.570"></a>
<span class="sourceLineNo">571</span>    * @return The matcher.<a name="line.571"></a>
<span class="sourceLineNo">572</span>    * @throws RestCallException If a connection error occurred.<a name="line.572"></a>
<span class="sourceLineNo">573</span>    */<a name="line.573"></a>
<span class="sourceLineNo">574</span>   public Matcher asMatcher(String regex, int flags) throws RestCallException {<a name="line.574"></a>
<span class="sourceLineNo">575</span>      return asMatcher(Pattern.compile(regex, flags));<a name="line.575"></a>
<span class="sourceLineNo">576</span>   }<a name="line.576"></a>
<span class="sourceLineNo">577</span><a name="line.577"></a>
<span class="sourceLineNo">578</span>   /**<a name="line.578"></a>
<span class="sourceLineNo">579</span>    * Same as {@link #asMatcher(String,int)} but sets the value in a mutable for fluent calls.<a name="line.579"></a>
<span class="sourceLineNo">580</span>    *<a name="line.580"></a>
<span class="sourceLineNo">581</span>    * &lt;h5 class='section'&gt;Example:&lt;/h5&gt;<a name="line.581"></a>
<span class="sourceLineNo">582</span>    * &lt;p class='bcode w800'&gt;<a name="line.582"></a>
<span class="sourceLineNo">583</span>    *    &lt;jc&gt;// Parse header using a regular expression.&lt;/jc&gt;<a name="line.583"></a>
<span class="sourceLineNo">584</span>    *    Mutable&amp;lt;Matcher&amp;gt; &lt;jv&gt;mutable&lt;/jv&gt; = Mutable.&lt;jsm&gt;create&lt;/jsm&gt;();<a name="line.584"></a>
<span class="sourceLineNo">585</span>    *<a name="line.585"></a>
<span class="sourceLineNo">586</span>    *    client<a name="line.586"></a>
<span class="sourceLineNo">587</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.587"></a>
<span class="sourceLineNo">588</span>    *       .run()<a name="line.588"></a>
<span class="sourceLineNo">589</span>    *       .getHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).asMatcher(&lt;jv&gt;mutable&lt;/jv&gt;, &lt;js&gt;"application/(.*)"&lt;/js&gt;, &lt;jsf&gt;CASE_INSENSITIVE&lt;/jsf&gt;);<a name="line.589"></a>
<span class="sourceLineNo">590</span>    *<a name="line.590"></a>
<span class="sourceLineNo">591</span>    *    &lt;jk&gt;if&lt;/jk&gt; (&lt;jv&gt;mutable&lt;/jv&gt;.get().matches()) {<a name="line.591"></a>
<span class="sourceLineNo">592</span>    *       String &lt;jv&gt;mediaType&lt;/jv&gt; = &lt;jv&gt;mutable&lt;/jv&gt;.get().group(1);<a name="line.592"></a>
<span class="sourceLineNo">593</span>    *    }<a name="line.593"></a>
<span class="sourceLineNo">594</span>    * &lt;/p&gt;<a name="line.594"></a>
<span class="sourceLineNo">595</span>    *<a name="line.595"></a>
<span class="sourceLineNo">596</span>    * @param m The mutable to set the value in.<a name="line.596"></a>
<span class="sourceLineNo">597</span>    * @param regex The regular expression pattern to match.<a name="line.597"></a>
<span class="sourceLineNo">598</span>    * @param flags Pattern match flags.  See {@link Pattern#compile(String, int)}.<a name="line.598"></a>
<span class="sourceLineNo">599</span>    * @return The response object (for method chaining).<a name="line.599"></a>
<span class="sourceLineNo">600</span>    * @throws RestCallException If a connection error occurred.<a name="line.600"></a>
<span class="sourceLineNo">601</span>    */<a name="line.601"></a>
<span class="sourceLineNo">602</span>   public RestResponse asMatcher(Mutable&lt;Matcher&gt; m, String regex, int flags) throws RestCallException {<a name="line.602"></a>
<span class="sourceLineNo">603</span>      m.set(asMatcher(Pattern.compile(regex, flags)));<a name="line.603"></a>
<span class="sourceLineNo">604</span>      return response;<a name="line.604"></a>
<span class="sourceLineNo">605</span>   }<a name="line.605"></a>
<span class="sourceLineNo">606</span><a name="line.606"></a>
<span class="sourceLineNo">607</span>   /**<a name="line.607"></a>
<span class="sourceLineNo">608</span>    * Returns the response that created this object.<a name="line.608"></a>
<span class="sourceLineNo">609</span>    *<a name="line.609"></a>
<span class="sourceLineNo">610</span>    * @return The response that created this object.<a name="line.610"></a>
<span class="sourceLineNo">611</span>    */<a name="line.611"></a>
<span class="sourceLineNo">612</span>   public RestResponse toResponse() {<a name="line.612"></a>
<span class="sourceLineNo">613</span>      return response;<a name="line.613"></a>
<span class="sourceLineNo">614</span>   }<a name="line.614"></a>
<span class="sourceLineNo">615</span><a name="line.615"></a>
<span class="sourceLineNo">616</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.616"></a>
<span class="sourceLineNo">617</span>   // Assertions.<a name="line.617"></a>
<span class="sourceLineNo">618</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.618"></a>
<span class="sourceLineNo">619</span><a name="line.619"></a>
<span class="sourceLineNo">620</span>   /**<a name="line.620"></a>
<span class="sourceLineNo">621</span>    * Provides the ability to perform fluent-style assertions on this response header.<a name="line.621"></a>
<span class="sourceLineNo">622</span>    *<a name="line.622"></a>
<span class="sourceLineNo">623</span>    * &lt;p&gt;<a name="line.623"></a>
<span class="sourceLineNo">624</span>    * This method is called directly from the {@link RestResponse#assertStringHeader(String)} method to instantiate a fluent assertions object.<a name="line.624"></a>
<span class="sourceLineNo">625</span>    *<a name="line.625"></a>
<span class="sourceLineNo">626</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.626"></a>
<span class="sourceLineNo">627</span>    * &lt;p class='bcode w800'&gt;<a name="line.627"></a>
<span class="sourceLineNo">628</span>    *    &lt;jc&gt;// Validates the content type header is provided.&lt;/jc&gt;<a name="line.628"></a>
<span class="sourceLineNo">629</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.629"></a>
<span class="sourceLineNo">630</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.630"></a>
<span class="sourceLineNo">631</span>    *       .run()<a name="line.631"></a>
<span class="sourceLineNo">632</span>    *       .assertHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).exists();<a name="line.632"></a>
<span class="sourceLineNo">633</span>    *<a name="line.633"></a>
<span class="sourceLineNo">634</span>    *    &lt;jc&gt;// Validates the content type is JSON.&lt;/jc&gt;<a name="line.634"></a>
<span class="sourceLineNo">635</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.635"></a>
<span class="sourceLineNo">636</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.636"></a>
<span class="sourceLineNo">637</span>    *       .run()<a name="line.637"></a>
<span class="sourceLineNo">638</span>    *       .assertHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).equals(&lt;js&gt;"application/json"&lt;/js&gt;);<a name="line.638"></a>
<span class="sourceLineNo">639</span>    *<a name="line.639"></a>
<span class="sourceLineNo">640</span>    *    &lt;jc&gt;// Validates the content type is JSON using test predicate.&lt;/jc&gt;<a name="line.640"></a>
<span class="sourceLineNo">641</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.641"></a>
<span class="sourceLineNo">642</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.642"></a>
<span class="sourceLineNo">643</span>    *       .run()<a name="line.643"></a>
<span class="sourceLineNo">644</span>    *       .assertHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).passes(&lt;jv&gt;x&lt;/jv&gt; -&amp;gt; &lt;jv&gt;x&lt;/jv&gt;.equals(&lt;js&gt;"application/json"&lt;/js&gt;));<a name="line.644"></a>
<span class="sourceLineNo">645</span>    *<a name="line.645"></a>
<span class="sourceLineNo">646</span>    *    &lt;jc&gt;// Validates the content type is JSON by just checking for substring.&lt;/jc&gt;<a name="line.646"></a>
<span class="sourceLineNo">647</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.647"></a>
<span class="sourceLineNo">648</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.648"></a>
<span class="sourceLineNo">649</span>    *       .run()<a name="line.649"></a>
<span class="sourceLineNo">650</span>    *       .assertHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).contains(&lt;js&gt;"json"&lt;/js&gt;);<a name="line.650"></a>
<span class="sourceLineNo">651</span>    *<a name="line.651"></a>
<span class="sourceLineNo">652</span>    *    &lt;jc&gt;// Validates the content type is JSON using regular expression.&lt;/jc&gt;<a name="line.652"></a>
<span class="sourceLineNo">653</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.653"></a>
<span class="sourceLineNo">654</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.654"></a>
<span class="sourceLineNo">655</span>    *       .run()<a name="line.655"></a>
<span class="sourceLineNo">656</span>    *       .assertHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).matches(&lt;js&gt;".*json.*"&lt;/js&gt;);<a name="line.656"></a>
<span class="sourceLineNo">657</span>    *<a name="line.657"></a>
<span class="sourceLineNo">658</span>    *    &lt;jc&gt;// Validates the content type is JSON using case-insensitive regular expression.&lt;/jc&gt;<a name="line.658"></a>
<span class="sourceLineNo">659</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.659"></a>
<span class="sourceLineNo">660</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.660"></a>
<span class="sourceLineNo">661</span>    *       .run()<a name="line.661"></a>
<span class="sourceLineNo">662</span>    *       .assertHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).matches(&lt;js&gt;".*json.*"&lt;/js&gt;, &lt;jsf&gt;CASE_INSENSITIVE&lt;/jsf&gt;);<a name="line.662"></a>
<span class="sourceLineNo">663</span>    * &lt;/p&gt;<a name="line.663"></a>
<span class="sourceLineNo">664</span>    *<a name="line.664"></a>
<span class="sourceLineNo">665</span>    * &lt;p&gt;<a name="line.665"></a>
<span class="sourceLineNo">666</span>    * The assertion test returns the original response object allowing you to chain multiple requests like so:<a name="line.666"></a>
<span class="sourceLineNo">667</span>    * &lt;p class='bcode w800'&gt;<a name="line.667"></a>
<span class="sourceLineNo">668</span>    *    &lt;jc&gt;// Validates the header and converts it to a bean.&lt;/jc&gt;<a name="line.668"></a>
<span class="sourceLineNo">669</span>    *    MediaType &lt;jv&gt;mediaType&lt;/jv&gt; = &lt;jv&gt;client&lt;/jv&gt;<a name="line.669"></a>
<span class="sourceLineNo">670</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.670"></a>
<span class="sourceLineNo">671</span>    *       .run()<a name="line.671"></a>
<span class="sourceLineNo">672</span>    *       .assertHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).exists()<a name="line.672"></a>
<span class="sourceLineNo">673</span>    *       .assertHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).matches(&lt;js&gt;".*json.*"&lt;/js&gt;)<a name="line.673"></a>
<span class="sourceLineNo">674</span>    *       .getHeader(&lt;js&gt;"Content-Type"&lt;/js&gt;).as(MediaType.&lt;jk&gt;class&lt;/jk&gt;);<a name="line.674"></a>
<span class="sourceLineNo">675</span>    * &lt;/p&gt;<a name="line.675"></a>
<span class="sourceLineNo">676</span>    *<a name="line.676"></a>
<span class="sourceLineNo">677</span>    * @return A new fluent assertion object.<a name="line.677"></a>
<span class="sourceLineNo">678</span>    */<a name="line.678"></a>
<span class="sourceLineNo">679</span>   public FluentStringAssertion&lt;RestResponse&gt; assertString() {<a name="line.679"></a>
<span class="sourceLineNo">680</span>      return new FluentStringAssertion&lt;&gt;(asString(), response);<a name="line.680"></a>
<span class="sourceLineNo">681</span>   }<a name="line.681"></a>
<span class="sourceLineNo">682</span><a name="line.682"></a>
<span class="sourceLineNo">683</span>   /**<a name="line.683"></a>
<span class="sourceLineNo">684</span>    * Provides the ability to perform fluent-style assertions on an integer response header.<a name="line.684"></a>
<span class="sourceLineNo">685</span>    *<a name="line.685"></a>
<span class="sourceLineNo">686</span>    * &lt;p&gt;<a name="line.686"></a>
<span class="sourceLineNo">687</span>    * This method is called directly from the {@link RestResponse#assertIntegerHeader(String)} method to instantiate a fluent assertions object.<a name="line.687"></a>
<span class="sourceLineNo">688</span>    *<a name="line.688"></a>
<span class="sourceLineNo">689</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.689"></a>
<span class="sourceLineNo">690</span>    * &lt;p class='bcode w800'&gt;<a name="line.690"></a>
<span class="sourceLineNo">691</span>    *    &lt;jc&gt;// Validates that the response content age is greater than 1.&lt;/jc&gt;<a name="line.691"></a>
<span class="sourceLineNo">692</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.692"></a>
<span class="sourceLineNo">693</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.693"></a>
<span class="sourceLineNo">694</span>    *       .run()<a name="line.694"></a>
<span class="sourceLineNo">695</span>    *       .assertIntegerHeader(&lt;js&gt;"Age"&lt;/js&gt;).isGreaterThan(1);<a name="line.695"></a>
<span class="sourceLineNo">696</span>    * &lt;/p&gt;<a name="line.696"></a>
<span class="sourceLineNo">697</span>    *<a name="line.697"></a>
<span class="sourceLineNo">698</span>    * @return A new fluent assertion object.<a name="line.698"></a>
<span class="sourceLineNo">699</span>    */<a name="line.699"></a>
<span class="sourceLineNo">700</span>   public FluentIntegerAssertion&lt;RestResponse&gt; assertInteger() {<a name="line.700"></a>
<span class="sourceLineNo">701</span>      return new FluentIntegerAssertion&lt;&gt;(asIntegerHeader().asInt(), response);<a name="line.701"></a>
<span class="sourceLineNo">702</span>   }<a name="line.702"></a>
<span class="sourceLineNo">703</span><a name="line.703"></a>
<span class="sourceLineNo">704</span>   /**<a name="line.704"></a>
<span class="sourceLineNo">705</span>    * Provides the ability to perform fluent-style assertions on a long response header.<a name="line.705"></a>
<span class="sourceLineNo">706</span>    *<a name="line.706"></a>
<span class="sourceLineNo">707</span>    * &lt;p&gt;<a name="line.707"></a>
<span class="sourceLineNo">708</span>    * This method is called directly from the {@link RestResponse#assertLongHeader(String)} method to instantiate a fluent assertions object.<a name="line.708"></a>
<span class="sourceLineNo">709</span>    *<a name="line.709"></a>
<span class="sourceLineNo">710</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.710"></a>
<span class="sourceLineNo">711</span>    * &lt;p class='bcode w800'&gt;<a name="line.711"></a>
<span class="sourceLineNo">712</span>    *    &lt;jc&gt;// Validates that the response body is not too long.&lt;/jc&gt;<a name="line.712"></a>
<span class="sourceLineNo">713</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.713"></a>
<span class="sourceLineNo">714</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.714"></a>
<span class="sourceLineNo">715</span>    *       .run()<a name="line.715"></a>
<span class="sourceLineNo">716</span>    *       .assertLongHeader(&lt;js&gt;"Length"&lt;/js&gt;).isLessThan(100000);<a name="line.716"></a>
<span class="sourceLineNo">717</span>    * &lt;/p&gt;<a name="line.717"></a>
<span class="sourceLineNo">718</span>    *<a name="line.718"></a>
<span class="sourceLineNo">719</span>    * @return A new fluent assertion object.<a name="line.719"></a>
<span class="sourceLineNo">720</span>    */<a name="line.720"></a>
<span class="sourceLineNo">721</span>   public FluentLongAssertion&lt;RestResponse&gt; assertLong() {<a name="line.721"></a>
<span class="sourceLineNo">722</span>      return new FluentLongAssertion&lt;&gt;(asLongHeader().asLong(), response);<a name="line.722"></a>
<span class="sourceLineNo">723</span>   }<a name="line.723"></a>
<span class="sourceLineNo">724</span><a name="line.724"></a>
<span class="sourceLineNo">725</span>   /**<a name="line.725"></a>
<span class="sourceLineNo">726</span>    * Provides the ability to perform fluent-style assertions on a date response header.<a name="line.726"></a>
<span class="sourceLineNo">727</span>    *<a name="line.727"></a>
<span class="sourceLineNo">728</span>    * &lt;p&gt;<a name="line.728"></a>
<span class="sourceLineNo">729</span>    * This method is called directly from the {@link RestResponse#assertDateHeader(String)} method to instantiate a fluent assertions object.<a name="line.729"></a>
<span class="sourceLineNo">730</span>    *<a name="line.730"></a>
<span class="sourceLineNo">731</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.731"></a>
<span class="sourceLineNo">732</span>    * &lt;p class='bcode w800'&gt;<a name="line.732"></a>
<span class="sourceLineNo">733</span>    *    &lt;jc&gt;// Validates that the response content is not expired.&lt;/jc&gt;<a name="line.733"></a>
<span class="sourceLineNo">734</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.734"></a>
<span class="sourceLineNo">735</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.735"></a>
<span class="sourceLineNo">736</span>    *       .run()<a name="line.736"></a>
<span class="sourceLineNo">737</span>    *       .getHeader(&lt;js&gt;"Expires"&lt;/js&gt;).assertDate().isAfterNow();<a name="line.737"></a>
<span class="sourceLineNo">738</span>    * &lt;/p&gt;<a name="line.738"></a>
<span class="sourceLineNo">739</span>    *<a name="line.739"></a>
<span class="sourceLineNo">740</span>    * @return A new fluent assertion object.<a name="line.740"></a>
<span class="sourceLineNo">741</span>    */<a name="line.741"></a>
<span class="sourceLineNo">742</span>   public FluentZonedDateTimeAssertion&lt;RestResponse&gt; assertDate() {<a name="line.742"></a>
<span class="sourceLineNo">743</span>      return new FluentZonedDateTimeAssertion&lt;&gt;(asDateHeader().asZonedDateTime(), response);<a name="line.743"></a>
<span class="sourceLineNo">744</span>   }<a name="line.744"></a>
<span class="sourceLineNo">745</span><a name="line.745"></a>
<span class="sourceLineNo">746</span>   /**<a name="line.746"></a>
<span class="sourceLineNo">747</span>    * Provides the ability to perform fluent-style assertions on comma-separated string headers.<a name="line.747"></a>
<span class="sourceLineNo">748</span>    *<a name="line.748"></a>
<span class="sourceLineNo">749</span>    * &lt;p&gt;<a name="line.749"></a>
<span class="sourceLineNo">750</span>    * This method is called directly from the {@link RestResponse#assertCsvArrayHeader(String)} method to instantiate a fluent assertions object.<a name="line.750"></a>
<span class="sourceLineNo">751</span>    *<a name="line.751"></a>
<span class="sourceLineNo">752</span>    * &lt;h5 class='section'&gt;Examples:&lt;/h5&gt;<a name="line.752"></a>
<span class="sourceLineNo">753</span>    * &lt;p class='bcode w800'&gt;<a name="line.753"></a>
<span class="sourceLineNo">754</span>    *    &lt;jc&gt;// Validates that the response content is not expired.&lt;/jc&gt;<a name="line.754"></a>
<span class="sourceLineNo">755</span>    *    &lt;jv&gt;client&lt;/jv&gt;<a name="line.755"></a>
<span class="sourceLineNo">756</span>    *       .get(&lt;jsf&gt;URI&lt;/jsf&gt;)<a name="line.756"></a>
<span class="sourceLineNo">757</span>    *       .run()<a name="line.757"></a>
<span class="sourceLineNo">758</span>    *       .getHeader(&lt;js&gt;"Allow"&lt;/js&gt;).assertCsvArray().contains(&lt;js&gt;"GET"&lt;/js&gt;);<a name="line.758"></a>
<span class="sourceLineNo">759</span>    * &lt;/p&gt;<a name="line.759"></a>
<span class="sourceLineNo">760</span>    *<a name="line.760"></a>
<span class="sourceLineNo">761</span>    * @return A new fluent assertion object.<a name="line.761"></a>
<span class="sourceLineNo">762</span>    */<a name="line.762"></a>
<span class="sourceLineNo">763</span>   public FluentListAssertion&lt;RestResponse&gt; assertCsvArray() {<a name="line.763"></a>
<span class="sourceLineNo">764</span>      return new FluentListAssertion&lt;&gt;(asCsvArrayHeader().asList(), response);<a name="line.764"></a>
<span class="sourceLineNo">765</span>   }<a name="line.765"></a>
<span class="sourceLineNo">766</span><a name="line.766"></a>
<span class="sourceLineNo">767</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.767"></a>
<span class="sourceLineNo">768</span>   // Header passthrough methods.<a name="line.768"></a>
<span class="sourceLineNo">769</span>   //------------------------------------------------------------------------------------------------------------------<a name="line.769"></a>
<span class="sourceLineNo">770</span><a name="line.770"></a>
<span class="sourceLineNo">771</span>   /**<a name="line.771"></a>
<span class="sourceLineNo">772</span>    * Gets the name of this pair.<a name="line.772"></a>
<span class="sourceLineNo">773</span>    *<a name="line.773"></a>
<span class="sourceLineNo">774</span>    * @return The name of this pair, never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.774"></a>
<span class="sourceLineNo">775</span>    */<a name="line.775"></a>
<span class="sourceLineNo">776</span>   @Override /* Header */<a name="line.776"></a>
<span class="sourceLineNo">777</span>   public String getName() {<a name="line.777"></a>
<span class="sourceLineNo">778</span>      return header.getName();<a name="line.778"></a>
<span class="sourceLineNo">779</span>   }<a name="line.779"></a>
<span class="sourceLineNo">780</span><a name="line.780"></a>
<span class="sourceLineNo">781</span>   /**<a name="line.781"></a>
<span class="sourceLineNo">782</span>    * Gets the value of this pair.<a name="line.782"></a>
<span class="sourceLineNo">783</span>    *<a name="line.783"></a>
<span class="sourceLineNo">784</span>    * &lt;ul class='notes'&gt;<a name="line.784"></a>
<span class="sourceLineNo">785</span>    *    &lt;li&gt;{@link #asString()} is an equivalent method and the preferred method for fluent-style coding.<a name="line.785"></a>
<span class="sourceLineNo">786</span>    * &lt;/ul&gt;<a name="line.786"></a>
<span class="sourceLineNo">787</span>    *<a name="line.787"></a>
<span class="sourceLineNo">788</span>    * @return The value of this pair, may be &lt;jk&gt;null&lt;/jk&gt;.<a name="line.788"></a>
<span class="sourceLineNo">789</span>    */<a name="line.789"></a>
<span class="sourceLineNo">790</span>   @Override /* Header */<a name="line.790"></a>
<span class="sourceLineNo">791</span>   public String getValue() {<a name="line.791"></a>
<span class="sourceLineNo">792</span>      return header.getValue();<a name="line.792"></a>
<span class="sourceLineNo">793</span>   }<a name="line.793"></a>
<span class="sourceLineNo">794</span><a name="line.794"></a>
<span class="sourceLineNo">795</span>   /**<a name="line.795"></a>
<span class="sourceLineNo">796</span>    * Parses the value.<a name="line.796"></a>
<span class="sourceLineNo">797</span>    *<a name="line.797"></a>
<span class="sourceLineNo">798</span>    * @return An array of {@link HeaderElement} entries, may be empty, but is never &lt;jk&gt;null&lt;/jk&gt;.<a name="line.798"></a>
<span class="sourceLineNo">799</span>    * @throws org.apache.http.ParseException In case of a parsing error.<a name="line.799"></a>
<span class="sourceLineNo">800</span>    */<a name="line.800"></a>
<span class="sourceLineNo">801</span>   @Override /* Header */<a name="line.801"></a>
<span class="sourceLineNo">802</span>   public HeaderElement[] getElements() throws org.apache.http.ParseException {<a name="line.802"></a>
<span class="sourceLineNo">803</span>      return header.getElements();<a name="line.803"></a>
<span class="sourceLineNo">804</span>   }<a name="line.804"></a>
<span class="sourceLineNo">805</span><a name="line.805"></a>
<span class="sourceLineNo">806</span>   @Override /* Object */<a name="line.806"></a>
<span class="sourceLineNo">807</span>   public String toString() {<a name="line.807"></a>
<span class="sourceLineNo">808</span>      return getName() + ": " + getValue();<a name="line.808"></a>
<span class="sourceLineNo">809</span>   }<a name="line.809"></a>
<span class="sourceLineNo">810</span>}<a name="line.810"></a>




























































</pre>
</div>
</body>
</html>
