protected Metadata parseMetadata(InputStream is, Metadata metadata, MultivaluedMap<String, String> httpHeaders, UriInfo info) throws IOException {
        final ParseContext context = new ParseContext();
        Parser parser = TikaResource.createParser();
        fillMetadata(parser, metadata, httpHeaders);
        fillParseContext(httpHeaders, metadata, context);
        //no need to parse embedded docs
        context.set(DocumentSelector.class, metadata1 -> false);

        TikaResource.logRequest(LOG, "/meta", metadata);
        TikaResource.parse(parser, LOG, info.getPath(), is, new LanguageHandler() {
            public void endDocument() {
                metadata.set("language", getLanguage().getLanguage());
            }
        }, metadata, context);
        return metadata;
    }
Get a specific metadata field. If the input stream cannot be parsed, but a
value was found for the given metadata field, then the value of the field
is returned as part of a 200 OK response; otherwise a
{@link javax.ws.rs.core.Response.Status#BAD_REQUEST} is generated. If the stream
was successfully parsed but the specific metadata field was not found, then a
{@link javax.ws.rs.core.Response.Status#NOT_FOUND} is returned.
<p/>
Note that this method handles multivalue fields and returns possibly more
metadata value than requested.
<p/>
If you want XMP, you must be careful to specify the exact XMP key.
For example, "Author" will return nothing, but "dc:creator" will return the correct value.

@param is          inputstream
@param httpHeaders httpheaders
@param info        info
@param field       the tika metadata field name
@return one of {@link javax.ws.rs.core.Response.Status#OK},
{@link javax.ws.rs.core.Response.Status#NOT_FOUND}, or
{@link javax.ws.rs.core.Response.Status#BAD_REQUEST}
@throws Exception
tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/MetadataResource.java