Java tutorial
/** * Copyright (C) 2012 Ness Computing, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.nesscomputing.httpclient.factory.httpclient4; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; import com.google.common.base.Preconditions; import org.apache.commons.io.Charsets; import org.apache.commons.lang3.ObjectUtils; import org.apache.http.entity.AbstractHttpEntity; import org.apache.http.protocol.HTTP; /** * A self contained, repeatable entity that obtains its content from * a {@link String}. */ public class BetterStringEntity extends AbstractHttpEntity implements Cloneable { protected final byte[] content; /** * Creates a StringEntity with the specified content and charset * * @param string content to be used. Not {@code null}. * @param charset character set to be used. May be {@code null}, in which case the default is {@link HTTP#DEFAULT_CONTENT_CHARSET} i.e. "ISO-8859-1" * * @throws IllegalArgumentException if the string parameter is null */ BetterStringEntity(final String string, Charset charset) { super(); Preconditions.checkArgument(string != null, "Source string may not be null"); final Charset charsetObj = ObjectUtils.firstNonNull(charset, Charsets.ISO_8859_1); this.content = string.getBytes(charsetObj); setContentType(HTTP.PLAIN_TEXT_TYPE + HTTP.CHARSET_PARAM + charsetObj.name()); } @Override public boolean isRepeatable() { return true; } @Override public long getContentLength() { return this.content.length; } @Override public InputStream getContent() throws IOException { return new ByteArrayInputStream(this.content); } @Override public void writeTo(final OutputStream outstream) throws IOException { if (outstream == null) { throw new IllegalArgumentException("Output stream may not be null"); } outstream.write(this.content); outstream.flush(); } /** * Tells that this entity is not streaming. * * @return <code>false</code> */ @Override public boolean isStreaming() { return false; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } }