blob: 5427d6f0ee6d35329b1086cc509ce6ff35b4a66f [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>
<!-- Generated by javadoc (1.8.0_181-google-v7) on Wed Aug 14 17:37:15 PDT 2019 -->
<title>CustomHttpErrors (Apache Beam 2.15.0-SNAPSHOT)</title>
<meta name="date" content="2019-08-14">
<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="CustomHttpErrors (Apache Beam 2.15.0-SNAPSHOT)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete 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/apache/beam/sdk/extensions/gcp/util/BackOffAdapter.html" title="class in org.apache.beam.sdk.extensions.gcp.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/beam/sdk/extensions/gcp/util/CustomHttpErrors.Builder.html" title="class in org.apache.beam.sdk.extensions.gcp.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/beam/sdk/extensions/gcp/util/CustomHttpErrors.html" target="_top">Frames</a></li>
<li><a href="CustomHttpErrors.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><a href="#nested.class.summary">Nested</a>&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.apache.beam.sdk.extensions.gcp.util</div>
<h2 title="Class CustomHttpErrors" class="title">Class CustomHttpErrors</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.extensions.gcp.util.CustomHttpErrors</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">CustomHttpErrors</span>
extends java.lang.Object</pre>
<div class="block">An optional component to use with the <code>RetryHttpRequestInitializer</code> in order to provide
custom errors for failing http calls. This class allows you to specify custom error messages
which match specific error codes and containing strings in the URL. The first matcher to match
the request and response will be used to provide the custom error.
<p>The intended use case here is to examine one of the logs emitted by a failing call made by the
RetryHttpRequestInitializer, and then adding a custom error message which matches the URL and
code for it.
<p>Usage: See more in CustomHttpErrorsTest.
<pre><code>
CustomHttpErrors.Builder builder = new CustomHttpErrors.Builder();
builder.addErrorForCodeAndUrlContains(403,"/tables?", "Custom Error Msg");
CustomHttpErrors customErrors = builder.build();
RetryHttpRequestInitializer initializer = ...
initializer.setCustomErrors(customErrors);
</code></pre>
<p>Suggestions for future enhancements to anyone upgrading this file:
<ul>
<li>This class is left open for extension, to allow different functions for HttpCallMatcher and
HttpCallCustomError to match and log errors. For example, new functionality may include
matching an error based on the HttpResponse body. Additionally, extracting and logging
strings from the HttpResponse body may make useful functionality.
<li>Add a methods to add custom errors based on inspecting the contents of the HttpRequest and
HttpResponse
<li>Be sure to update the HttpRequestWrapper and HttpResponseWrapper with any new getters that
you may use. The wrappers were introduced to add a layer of indirection which could be
mocked mocked out in tests. This was unfortunately needed because mockito cannot mock final
classes and its non trivial to just construct HttpRequest and HttpResponse objects.
<li>Making matchers composable with an AND operator may simplify enhancing this code, if
several different matchers are used.
</ul>
<p></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/extensions/gcp/util/CustomHttpErrors.Builder.html" title="class in org.apache.beam.sdk.extensions.gcp.util">CustomHttpErrors.Builder</a></span></code>
<div class="block">A Builder which allows building immutable CustomHttpErrors object.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/extensions/gcp/util/CustomHttpErrors.MatcherAndError.html" title="class in org.apache.beam.sdk.extensions.gcp.util">CustomHttpErrors.MatcherAndError</a></span></code>
<div class="block">A simple Tuple class for creating a list of HttpResponseMatcher and HttpResponseCustomError to
print for the responses.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/beam/sdk/extensions/gcp/util/CustomHttpErrors.html#getCustomError-org.apache.beam.sdk.extensions.gcp.util.HttpRequestWrapper-org.apache.beam.sdk.extensions.gcp.util.HttpResponseWrapper-">getCustomError</a></span>(org.apache.beam.sdk.extensions.gcp.util.HttpRequestWrapper&nbsp;req,
org.apache.beam.sdk.extensions.gcp.util.HttpResponseWrapper&nbsp;res)</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</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="getCustomError-org.apache.beam.sdk.extensions.gcp.util.HttpRequestWrapper-org.apache.beam.sdk.extensions.gcp.util.HttpResponseWrapper-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getCustomError</h4>
<pre>public&nbsp;java.lang.String&nbsp;getCustomError(org.apache.beam.sdk.extensions.gcp.util.HttpRequestWrapper&nbsp;req,
org.apache.beam.sdk.extensions.gcp.util.HttpResponseWrapper&nbsp;res)</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The the first custom error for the failing request and response to match, or null.</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/apache/beam/sdk/extensions/gcp/util/BackOffAdapter.html" title="class in org.apache.beam.sdk.extensions.gcp.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../org/apache/beam/sdk/extensions/gcp/util/CustomHttpErrors.Builder.html" title="class in org.apache.beam.sdk.extensions.gcp.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../index.html?org/apache/beam/sdk/extensions/gcp/util/CustomHttpErrors.html" target="_top">Frames</a></li>
<li><a href="CustomHttpErrors.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><a href="#nested.class.summary">Nested</a>&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>