diff -r 000000000000 -r 373ffda63c9a src/share/jaxws_classes/javax/xml/soap/AttachmentPart.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/jaxws_classes/javax/xml/soap/AttachmentPart.java Wed Apr 27 01:27:09 2016 +0800
@@ -0,0 +1,526 @@
+/*
+ * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javax.xml.soap;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Iterator;
+
+import javax.activation.DataHandler;
+
+/**
+ * A single attachment to a SOAPMessage
object. A SOAPMessage
+ * object may contain zero, one, or many AttachmentPart
objects.
+ * Each AttachmentPart
object consists of two parts,
+ * application-specific content and associated MIME headers. The
+ * MIME headers consists of name/value pairs that can be used to
+ * identify and describe the content.
+ *
+ * An AttachmentPart
object must conform to certain standards.
+ *
Content-Type
AttachmentPart
object and MUST conform to [RFC2045].
+ * The following is an example of a Content-Type header:
+ * + * Content-Type: application/xml + *+ * The following line of code, in which
ap
is an
+ * AttachmentPart
object, sets the header shown in
+ * the previous example.
+ * + * ap.setMimeHeader("Content-Type", "application/xml"); + *+ *
+ *
+ * There are no restrictions on the content portion of an
+ * AttachmentPart
object. The content may be anything from a
+ * simple plain text object to a complex XML document or image file.
+ *
+ *
+ * An AttachmentPart
object is created with the method
+ * SOAPMessage.createAttachmentPart
. After setting its MIME headers,
+ * the AttachmentPart
object is added to the message
+ * that created it with the method SOAPMessage.addAttachmentPart
.
+ *
+ *
+ * The following code fragment, in which m
is a
+ * SOAPMessage
object and contentStringl
is a
+ * String
, creates an instance of AttachmentPart
,
+ * sets the AttachmentPart
object with some content and
+ * header information, and adds the AttachmentPart
object to
+ * the SOAPMessage
object.
+ *
+ * AttachmentPart ap1 = m.createAttachmentPart(); + * ap1.setContent(contentString1, "text/plain"); + * m.addAttachmentPart(ap1); + *+ * + * + *
+ * The following code fragment creates and adds a second
+ * AttachmentPart
instance to the same message. jpegData
+ * is a binary byte buffer representing the jpeg file.
+ *
+ * AttachmentPart ap2 = m.createAttachmentPart(); + * byte[] jpegData = ...; + * ap2.setContent(new ByteArrayInputStream(jpegData), "image/jpeg"); + * m.addAttachmentPart(ap2); + *+ *
+ * The getContent
method retrieves the contents and header from
+ * an AttachmentPart
object. Depending on the
+ * DataContentHandler
objects present, the returned
+ * Object
can either be a typed Java object corresponding
+ * to the MIME type or an InputStream
object that contains the
+ * content as bytes.
+ *
+ * String content1 = ap1.getContent(); + * java.io.InputStream content2 = ap2.getContent(); + *+ * + * The method
clearContent
removes all the content from an
+ * AttachmentPart
object but does not affect its header information.
+ * + * ap1.clearContent(); + *+ */ + +public abstract class AttachmentPart { + /** + * Returns the number of bytes in this
AttachmentPart
+ * object.
+ *
+ * @return the size of this AttachmentPart
object in bytes
+ * or -1 if the size cannot be determined
+ * @exception SOAPException if the content of this attachment is
+ * corrupted of if there was an exception while trying
+ * to determine the size.
+ */
+ public abstract int getSize() throws SOAPException;
+
+ /**
+ * Clears out the content of this AttachmentPart
object.
+ * The MIME header portion is left untouched.
+ */
+ public abstract void clearContent();
+
+ /**
+ * Gets the content of this AttachmentPart
object as a Java
+ * object. The type of the returned Java object depends on (1) the
+ * DataContentHandler
object that is used to interpret the bytes
+ * and (2) the Content-Type
given in the header.
+ *
+ * For the MIME content types "text/plain", "text/html" and "text/xml", the
+ * DataContentHandler
object does the conversions to and
+ * from the Java types corresponding to the MIME types.
+ * For other MIME types,the DataContentHandler
object
+ * can return an InputStream
object that contains the content data
+ * as raw bytes.
+ *
+ * A SAAJ-compliant implementation must, as a minimum, return a
+ * java.lang.String
object corresponding to any content
+ * stream with a Content-Type
value of
+ * text/plain
, a
+ * javax.xml.transform.stream.StreamSource
object corresponding to a
+ * content stream with a Content-Type
value of
+ * text/xml
, a java.awt.Image
object
+ * corresponding to a content stream with a
+ * Content-Type
value of image/gif
or
+ * image/jpeg
. For those content types that an
+ * installed DataContentHandler
object does not understand, the
+ * DataContentHandler
object is required to return a
+ * java.io.InputStream
object with the raw bytes.
+ *
+ * @return a Java object with the content of this AttachmentPart
+ * object
+ *
+ * @exception SOAPException if there is no content set into this
+ * AttachmentPart
object or if there was a data
+ * transformation error
+ */
+ public abstract Object getContent() throws SOAPException;
+
+ /**
+ * Gets the content of this AttachmentPart
object as an
+ * InputStream as if a call had been made to getContent
and no
+ * DataContentHandler
had been registered for the
+ * content-type
of this AttachmentPart
.
+ *
+ * Note that reading from the returned InputStream would result in consuming
+ * the data in the stream. It is the responsibility of the caller to reset
+ * the InputStream appropriately before calling a Subsequent API. If a copy
+ * of the raw attachment content is required then the {@link #getRawContentBytes} API
+ * should be used instead.
+ *
+ * @return an InputStream
from which the raw data contained by
+ * the AttachmentPart
can be accessed.
+ *
+ * @throws SOAPException if there is no content set into this
+ * AttachmentPart
object or if there was a data
+ * transformation error.
+ *
+ * @since SAAJ 1.3
+ * @see #getRawContentBytes
+ */
+ public abstract InputStream getRawContent() throws SOAPException;
+
+ /**
+ * Gets the content of this AttachmentPart
object as a
+ * byte[] array as if a call had been made to getContent
and no
+ * DataContentHandler
had been registered for the
+ * content-type
of this AttachmentPart
.
+ *
+ * @return a byte[]
array containing the raw data of the
+ * AttachmentPart
.
+ *
+ * @throws SOAPException if there is no content set into this
+ * AttachmentPart
object or if there was a data
+ * transformation error.
+ *
+ * @since SAAJ 1.3
+ */
+ public abstract byte[] getRawContentBytes() throws SOAPException;
+
+ /**
+ * Returns an InputStream
which can be used to obtain the
+ * content of AttachmentPart
as Base64 encoded
+ * character data, this method would base64 encode the raw bytes
+ * of the attachment and return.
+ *
+ * @return an InputStream
from which the Base64 encoded
+ * AttachmentPart
can be read.
+ *
+ * @throws SOAPException if there is no content set into this
+ * AttachmentPart
object or if there was a data
+ * transformation error.
+ *
+ * @since SAAJ 1.3
+ */
+ public abstract InputStream getBase64Content() throws SOAPException;
+
+ /**
+ * Sets the content of this attachment part to that of the given
+ * Object
and sets the value of the Content-Type
+ * header to the given type. The type of the
+ * Object
should correspond to the value given for the
+ * Content-Type
. This depends on the particular
+ * set of DataContentHandler
objects in use.
+ *
+ *
+ * @param object the Java object that makes up the content for
+ * this attachment part
+ * @param contentType the MIME string that specifies the type of
+ * the content
+ *
+ * @exception IllegalArgumentException may be thrown if the contentType
+ * does not match the type of the content object, or if there
+ * was no DataContentHandler
object for this
+ * content object
+ *
+ * @see #getContent
+ */
+ public abstract void setContent(Object object, String contentType);
+
+ /**
+ * Sets the content of this attachment part to that contained by the
+ * InputStream
content
and sets the value of the
+ * Content-Type
header to the value contained in
+ * contentType
.
+ *
+ * A subsequent call to getSize() may not be an exact measure
+ * of the content size.
+ *
+ * @param content the raw data to add to the attachment part
+ * @param contentType the value to set into the Content-Type
+ * header
+ *
+ * @exception SOAPException if an there is an error in setting the content
+ * @exception NullPointerException if content
is null
+ * @since SAAJ 1.3
+ */
+ public abstract void setRawContent(InputStream content, String contentType) throws SOAPException;
+
+ /**
+ * Sets the content of this attachment part to that contained by the
+ * byte[]
array content
and sets the value of the
+ * Content-Type
header to the value contained in
+ * contentType
.
+ *
+ * @param content the raw data to add to the attachment part
+ * @param contentType the value to set into the Content-Type
+ * header
+ * @param offset the offset in the byte array of the content
+ * @param len the number of bytes that form the content
+ *
+ * @exception SOAPException if an there is an error in setting the content
+ * or content is null
+ * @since SAAJ 1.3
+ */
+ public abstract void setRawContentBytes(
+ byte[] content, int offset, int len, String contentType)
+ throws SOAPException;
+
+
+ /**
+ * Sets the content of this attachment part from the Base64 source
+ * InputStream
and sets the value of the
+ * Content-Type
header to the value contained in
+ * contentType
, This method would first decode the base64
+ * input and write the resulting raw bytes to the attachment.
+ *
+ * A subsequent call to getSize() may not be an exact measure
+ * of the content size.
+ *
+ * @param content the base64 encoded data to add to the attachment part
+ * @param contentType the value to set into the Content-Type
+ * header
+ *
+ * @exception SOAPException if an there is an error in setting the content
+ * @exception NullPointerException if content
is null
+ *
+ * @since SAAJ 1.3
+ */
+ public abstract void setBase64Content(
+ InputStream content, String contentType) throws SOAPException;
+
+
+ /**
+ * Gets the DataHandler
object for this AttachmentPart
+ * object.
+ *
+ * @return the DataHandler
object associated with this
+ * AttachmentPart
object
+ *
+ * @exception SOAPException if there is no data in
+ * this AttachmentPart
object
+ */
+ public abstract DataHandler getDataHandler()
+ throws SOAPException;
+
+ /**
+ * Sets the given DataHandler
object as the data handler
+ * for this AttachmentPart
object. Typically, on an incoming
+ * message, the data handler is automatically set. When
+ * a message is being created and populated with content, the
+ * setDataHandler
method can be used to get data from
+ * various data sources into the message.
+ *
+ * @param dataHandler the DataHandler
object to be set
+ *
+ * @exception IllegalArgumentException if there was a problem with
+ * the specified DataHandler
object
+ */
+ public abstract void setDataHandler(DataHandler dataHandler);
+
+
+ /**
+ * Gets the value of the MIME header whose name is "Content-ID".
+ *
+ * @return a String
giving the value of the
+ * "Content-ID" header or null
if there
+ * is none
+ * @see #setContentId
+ */
+ public String getContentId() {
+ String[] values = getMimeHeader("Content-ID");
+ if (values != null && values.length > 0)
+ return values[0];
+ return null;
+ }
+
+ /**
+ * Gets the value of the MIME header whose name is "Content-Location".
+ *
+ * @return a String
giving the value of the
+ * "Content-Location" header or null
if there
+ * is none
+ */
+ public String getContentLocation() {
+ String[] values = getMimeHeader("Content-Location");
+ if (values != null && values.length > 0)
+ return values[0];
+ return null;
+ }
+
+ /**
+ * Gets the value of the MIME header whose name is "Content-Type".
+ *
+ * @return a String
giving the value of the
+ * "Content-Type" header or null
if there
+ * is none
+ */
+ public String getContentType() {
+ String[] values = getMimeHeader("Content-Type");
+ if (values != null && values.length > 0)
+ return values[0];
+ return null;
+ }
+
+ /**
+ * Sets the MIME header whose name is "Content-ID" with the given value.
+ *
+ * @param contentId a String
giving the value of the
+ * "Content-ID" header
+ *
+ * @exception IllegalArgumentException if there was a problem with
+ * the specified contentId
value
+ * @see #getContentId
+ */
+ public void setContentId(String contentId)
+ {
+ setMimeHeader("Content-ID", contentId);
+ }
+
+
+ /**
+ * Sets the MIME header whose name is "Content-Location" with the given value.
+ *
+ *
+ * @param contentLocation a String
giving the value of the
+ * "Content-Location" header
+ * @exception IllegalArgumentException if there was a problem with
+ * the specified content location
+ */
+ public void setContentLocation(String contentLocation)
+ {
+ setMimeHeader("Content-Location", contentLocation);
+ }
+
+ /**
+ * Sets the MIME header whose name is "Content-Type" with the given value.
+ *
+ * @param contentType a String
giving the value of the
+ * "Content-Type" header
+ *
+ * @exception IllegalArgumentException if there was a problem with
+ * the specified content type
+ */
+ public void setContentType(String contentType)
+ {
+ setMimeHeader("Content-Type", contentType);
+ }
+
+ /**
+ * Removes all MIME headers that match the given name.
+ *
+ * @param header the string name of the MIME header/s to
+ * be removed
+ */
+ public abstract void removeMimeHeader(String header);
+
+ /**
+ * Removes all the MIME header entries.
+ */
+ public abstract void removeAllMimeHeaders();
+
+
+ /**
+ * Gets all the values of the header identified by the given
+ * String
.
+ *
+ * @param name the name of the header; example: "Content-Type"
+ * @return a String
array giving the value for the
+ * specified header
+ * @see #setMimeHeader
+ */
+ public abstract String[] getMimeHeader(String name);
+
+
+ /**
+ * Changes the first header entry that matches the given name
+ * to the given value, adding a new header if no existing header
+ * matches. This method also removes all matching headers but the first.
+ *
+ * Note that RFC822 headers can only contain US-ASCII characters.
+ *
+ * @param name a String
giving the name of the header
+ * for which to search
+ * @param value a String
giving the value to be set for
+ * the header whose name matches the given name
+ *
+ * @exception IllegalArgumentException if there was a problem with
+ * the specified mime header name or value
+ */
+ public abstract void setMimeHeader(String name, String value);
+
+
+ /**
+ * Adds a MIME header with the specified name and value to this
+ * AttachmentPart
object.
+ *
+ * Note that RFC822 headers can contain only US-ASCII characters.
+ *
+ * @param name a String
giving the name of the header
+ * to be added
+ * @param value a String
giving the value of the header
+ * to be added
+ *
+ * @exception IllegalArgumentException if there was a problem with
+ * the specified mime header name or value
+ */
+ public abstract void addMimeHeader(String name, String value);
+
+ /**
+ * Retrieves all the headers for this AttachmentPart
object
+ * as an iterator over the MimeHeader
objects.
+ *
+ * @return an Iterator
object with all of the Mime
+ * headers for this AttachmentPart
object
+ */
+ public abstract Iterator getAllMimeHeaders();
+
+ /**
+ * Retrieves all MimeHeader
objects that match a name in
+ * the given array.
+ *
+ * @param names a String
array with the name(s) of the
+ * MIME headers to be returned
+ * @return all of the MIME headers that match one of the names in the
+ * given array as an Iterator
object
+ */
+ public abstract Iterator getMatchingMimeHeaders(String[] names);
+
+ /**
+ * Retrieves all MimeHeader
objects whose name does
+ * not match a name in the given array.
+ *
+ * @param names a String
array with the name(s) of the
+ * MIME headers not to be returned
+ * @return all of the MIME headers in this AttachmentPart
object
+ * except those that match one of the names in the
+ * given array. The nonmatching MIME headers are returned as an
+ * Iterator
object.
+ */
+ public abstract Iterator getNonMatchingMimeHeaders(String[] names);
+}