public static void read(final String data, final AttributeMap attributeMap) {
        try (Stream<String> linesStream = data.lines()) {
            linesStream.map(String::trim)
                    .filter(Predicate.not(String::isEmpty))
                    .forEach(line -> {
                        final int splitPos = line.indexOf(HEADER_DELIMITER);
                        if (splitPos != -1) {
                            final String key = line.substring(0, splitPos);
                            String value = line.substring(splitPos + 1);
                            attributeMap.put(key.trim(), value.trim());
                        } else {
                            attributeMap.put(line, null);
                        }
                    });
        }
    }
Creates a new {@link AttributeMap} from a {@link HttpServletRequest}.
<p>All HTTP headers and query parameters on the request will be added.</p>
<p>In addition, entries for the following keys may be set depending on
whether values are available:</p>
<ul>
<li>RemoteDN</li>
<li>RemoteCertExpiry</li>
<li>GUID</li>
<li>RemoteAddress</li>
<li>RemoteHost</li>
<li>ReceiptId</li>
<li>ReceiptIdPath</li>
<li>ReceivedTime</li>
<li>ReceivedTimeHistory</li>
<li>ReceivedPath</li>
</ul>
stroom-meta/stroom-meta-api/src/main/java/stroom/meta/api/AttributeMapUtil.java