Class EncoderRegistry
This class handles creation of the request body (i.e. for a
PUT or POST operation) based on content-type. When a
body is set from the builder, it is
processed based on the request content-type. For instance, the encodeForm(Map) method
will be invoked if the request content-type is form-urlencoded, which will
cause the following:body=[a:1, b:'two'] to be encoded as
the equivalent a=1invalid input: '&b'=two in the request body.
Most default encoders can handle a closure as a request body. In this
case, the closure is executed and a suitable 'builder' passed to the
closure that is used for constructing the content. In the case of
binary encoding this would be an OutputStream; for TEXT encoding it would
be a PrintWriter, and for XML it would be an already-bound
StreamingMarkupBuilder. See each encode... method
for details for each particular content-type.
Contrary to its name, this class does not have anything to do with the
content-encoding HTTP header.
- See Also:
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionReturns a map of default encoders.protected org.apache.http.entity.StringEntitycreateEntity(Object ct, String data) Helper method used by encoder methods to create anHttpEntityinstance that encapsulates the request data.org.apache.http.HttpEntityencodeForm(String formData, Object contentType) Accepts a String as a url-encoded form post.org.apache.http.client.entity.UrlEncodedFormEntityencodeForm(Map<?, ?> params) Set the request body as a url-encoded list of parameters.org.apache.http.client.entity.UrlEncodedFormEntityencodeForm(Map<?, ?> params, Object contentType) org.apache.http.entity.InputStreamEntityencodeStream(Object data, Object contentType) Default request encoder for a binary stream.org.apache.http.HttpEntityencodeText(Object data, Object contentType) Default handler used for a plain text content-type.org.apache.http.HttpEntityEncode the content as XML.groovy.lang.ClosureRetrieve a encoder for the given content-type.iterator()Iterate over the entire parser mapgroovy.lang.ClosurepropertyMissing(Object key) Alias forgetAt(Object)to allow property-style access.voidpropertyMissing(Object key, groovy.lang.Closure value) Alias forputAt(Object, Closure)to allow property-style access.voidRegister a new encoder for the given content type.voidsetCharset(String charset) Set the charset used in the content-type header of all requests that send textual data.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Iterable
forEach, spliterator
-
Field Details
-
charset
Charset charset -
registeredEncoders
-
-
Constructor Details
-
EncoderRegistry
public EncoderRegistry()
-
-
Method Details
-
setCharset
Set the charset used in the content-type header of all requests that send textual data. This must be a chaset supported by the Java platform- Parameters:
charset-- See Also:
-
encodeStream
public org.apache.http.entity.InputStreamEntity encodeStream(Object data, Object contentType) throws UnsupportedEncodingException Default request encoder for a binary stream. Acceptable argument types are:- InputStream
- byte[] / ByteArrayOutputStream
- Closure
- Parameters:
data-- Returns:
- an
HttpEntityencapsulating this request data - Throws:
UnsupportedEncodingException
-
encodeText
Default handler used for a plain text content-type. Acceptable argument types are:- Closure
- Writable
- Reader
PrintWriteris passed as the single argument to the closure. Any data sent to the writer from the closure will be sent to the request content body.- Parameters:
data-- Returns:
- an
HttpEntityencapsulating this request data - Throws:
IOException
-
encodeForm
public org.apache.http.client.entity.UrlEncodedFormEntity encodeForm(Map<?, ?> params) throws UnsupportedEncodingExceptionSet the request body as a url-encoded list of parameters. This is typically used to simulate a HTTP form POST. For multi-valued parameters, enclose the values in a list, e.g.[ key1 : ['val1', 'val2'], key2 : 'etc.' ]
- Parameters:
params-- Returns:
- an
HttpEntityencapsulating this request data - Throws:
UnsupportedEncodingException
-
encodeForm
public org.apache.http.client.entity.UrlEncodedFormEntity encodeForm(Map<?, ?> params, Object contentType) throws UnsupportedEncodingException- Throws:
UnsupportedEncodingException
-
encodeForm
public org.apache.http.HttpEntity encodeForm(String formData, Object contentType) throws UnsupportedEncodingException Accepts a String as a url-encoded form post. This method assumes the String is an already-encoded POST string.- Parameters:
formData- a url-encoded form POST string. See The W3C spec for more info.- Returns:
- an
HttpEntityencapsulating this request data - Throws:
UnsupportedEncodingException
-
encodeXML
public org.apache.http.HttpEntity encodeXML(Object xml, Object contentType) throws UnsupportedEncodingException Encode the content as XML. The argument may be either an object whosetoStringproduces valid markup, or a Closure which will be interpreted as a builder definition. A closure argument is passed toStreamingMarkupBuilder.bind(groovy.lang.Closure).- Parameters:
xml- data that defines the XML structure- Returns:
- an
HttpEntityencapsulating this request data - Throws:
UnsupportedEncodingException
-
createEntity
protected org.apache.http.entity.StringEntity createEntity(Object ct, String data) throws UnsupportedEncodingException Helper method used by encoder methods to create anHttpEntityinstance that encapsulates the request data. This may be used by any non-streaming encoder that needs to send textual data. It also sets thecharsetportion of the content-type header.- Parameters:
ct- content-type of the datadata- textual request data to be encoded- Returns:
- an instance to be used for the
request content - Throws:
UnsupportedEncodingException
-
buildDefaultEncoderMap
-
getAt
Retrieve a encoder for the given content-type. This is called by HTTPBuilder to retrieve the correct encoder for a given content-type. The encoder is then used to serialize the request data in the request body.- Parameters:
contentType-- Returns:
- encoder that can interpret the given content type, or null.
-
putAt
Register a new encoder for the given content type. If any encoder previously existed for that content type it will be replaced. The closure must return anHttpEntity. It will also usually accept a single argument, which will be whatever is set in the request configuration closure viaHTTPBuilder.RequestConfigDelegate.setBody(Object).- Parameters:
contentType-closure-
-
propertyMissing
Alias forgetAt(Object)to allow property-style access.- Parameters:
key-- Returns:
-
propertyMissing
Alias forputAt(Object, Closure)to allow property-style access.- Parameters:
key-value-
-
iterator
-