changeset 17824:ad37f4ce2062

8184435: Cleanup of javadoc in javax.print package Reviewed-by: prr, psadhukhan
author serb
date Thu, 31 Aug 2017 15:47:34 -0700
parents c6f9f9e5f186
children 6581f08c67b6
files src/java.desktop/share/classes/javax/print/AttributeException.java src/java.desktop/share/classes/javax/print/CancelablePrintJob.java src/java.desktop/share/classes/javax/print/Doc.java src/java.desktop/share/classes/javax/print/DocFlavor.java src/java.desktop/share/classes/javax/print/DocPrintJob.java src/java.desktop/share/classes/javax/print/FlavorException.java src/java.desktop/share/classes/javax/print/MimeType.java src/java.desktop/share/classes/javax/print/MultiDoc.java src/java.desktop/share/classes/javax/print/MultiDocPrintJob.java src/java.desktop/share/classes/javax/print/MultiDocPrintService.java src/java.desktop/share/classes/javax/print/PrintException.java src/java.desktop/share/classes/javax/print/PrintService.java src/java.desktop/share/classes/javax/print/PrintServiceLookup.java src/java.desktop/share/classes/javax/print/ServiceUI.java src/java.desktop/share/classes/javax/print/ServiceUIFactory.java src/java.desktop/share/classes/javax/print/SimpleDoc.java src/java.desktop/share/classes/javax/print/StreamPrintService.java src/java.desktop/share/classes/javax/print/StreamPrintServiceFactory.java src/java.desktop/share/classes/javax/print/URIException.java src/java.desktop/share/classes/javax/print/attribute/Attribute.java src/java.desktop/share/classes/javax/print/attribute/AttributeSet.java src/java.desktop/share/classes/javax/print/attribute/AttributeSetUtilities.java src/java.desktop/share/classes/javax/print/attribute/DateTimeSyntax.java src/java.desktop/share/classes/javax/print/attribute/DocAttribute.java src/java.desktop/share/classes/javax/print/attribute/DocAttributeSet.java src/java.desktop/share/classes/javax/print/attribute/EnumSyntax.java src/java.desktop/share/classes/javax/print/attribute/HashAttributeSet.java src/java.desktop/share/classes/javax/print/attribute/HashDocAttributeSet.java src/java.desktop/share/classes/javax/print/attribute/HashPrintJobAttributeSet.java src/java.desktop/share/classes/javax/print/attribute/HashPrintRequestAttributeSet.java src/java.desktop/share/classes/javax/print/attribute/HashPrintServiceAttributeSet.java src/java.desktop/share/classes/javax/print/attribute/IntegerSyntax.java src/java.desktop/share/classes/javax/print/attribute/PrintJobAttribute.java src/java.desktop/share/classes/javax/print/attribute/PrintJobAttributeSet.java src/java.desktop/share/classes/javax/print/attribute/PrintRequestAttribute.java src/java.desktop/share/classes/javax/print/attribute/PrintRequestAttributeSet.java src/java.desktop/share/classes/javax/print/attribute/PrintServiceAttribute.java src/java.desktop/share/classes/javax/print/attribute/PrintServiceAttributeSet.java src/java.desktop/share/classes/javax/print/attribute/ResolutionSyntax.java src/java.desktop/share/classes/javax/print/attribute/SetOfIntegerSyntax.java src/java.desktop/share/classes/javax/print/attribute/Size2DSyntax.java src/java.desktop/share/classes/javax/print/attribute/SupportedValuesAttribute.java src/java.desktop/share/classes/javax/print/attribute/TextSyntax.java src/java.desktop/share/classes/javax/print/attribute/URISyntax.java src/java.desktop/share/classes/javax/print/attribute/UnmodifiableSetException.java src/java.desktop/share/classes/javax/print/attribute/package-info.java src/java.desktop/share/classes/javax/print/attribute/standard/Chromaticity.java src/java.desktop/share/classes/javax/print/attribute/standard/ColorSupported.java src/java.desktop/share/classes/javax/print/attribute/standard/Compression.java src/java.desktop/share/classes/javax/print/attribute/standard/Copies.java src/java.desktop/share/classes/javax/print/attribute/standard/CopiesSupported.java src/java.desktop/share/classes/javax/print/attribute/standard/DateTimeAtCompleted.java src/java.desktop/share/classes/javax/print/attribute/standard/DateTimeAtCreation.java src/java.desktop/share/classes/javax/print/attribute/standard/DateTimeAtProcessing.java src/java.desktop/share/classes/javax/print/attribute/standard/Destination.java src/java.desktop/share/classes/javax/print/attribute/standard/DialogTypeSelection.java src/java.desktop/share/classes/javax/print/attribute/standard/DocumentName.java src/java.desktop/share/classes/javax/print/attribute/standard/Fidelity.java src/java.desktop/share/classes/javax/print/attribute/standard/Finishings.java src/java.desktop/share/classes/javax/print/attribute/standard/JobHoldUntil.java src/java.desktop/share/classes/javax/print/attribute/standard/JobImpressions.java src/java.desktop/share/classes/javax/print/attribute/standard/JobImpressionsCompleted.java src/java.desktop/share/classes/javax/print/attribute/standard/JobImpressionsSupported.java src/java.desktop/share/classes/javax/print/attribute/standard/JobKOctets.java src/java.desktop/share/classes/javax/print/attribute/standard/JobKOctetsProcessed.java src/java.desktop/share/classes/javax/print/attribute/standard/JobKOctetsSupported.java src/java.desktop/share/classes/javax/print/attribute/standard/JobMediaSheets.java src/java.desktop/share/classes/javax/print/attribute/standard/JobMediaSheetsCompleted.java src/java.desktop/share/classes/javax/print/attribute/standard/JobMediaSheetsSupported.java src/java.desktop/share/classes/javax/print/attribute/standard/JobMessageFromOperator.java src/java.desktop/share/classes/javax/print/attribute/standard/JobName.java src/java.desktop/share/classes/javax/print/attribute/standard/JobOriginatingUserName.java src/java.desktop/share/classes/javax/print/attribute/standard/JobPriority.java src/java.desktop/share/classes/javax/print/attribute/standard/JobPrioritySupported.java src/java.desktop/share/classes/javax/print/attribute/standard/JobSheets.java src/java.desktop/share/classes/javax/print/attribute/standard/JobState.java src/java.desktop/share/classes/javax/print/attribute/standard/JobStateReason.java src/java.desktop/share/classes/javax/print/attribute/standard/JobStateReasons.java src/java.desktop/share/classes/javax/print/attribute/standard/Media.java src/java.desktop/share/classes/javax/print/attribute/standard/MediaName.java src/java.desktop/share/classes/javax/print/attribute/standard/MediaPrintableArea.java src/java.desktop/share/classes/javax/print/attribute/standard/MediaSize.java src/java.desktop/share/classes/javax/print/attribute/standard/MediaSizeName.java src/java.desktop/share/classes/javax/print/attribute/standard/MediaTray.java src/java.desktop/share/classes/javax/print/attribute/standard/MultipleDocumentHandling.java src/java.desktop/share/classes/javax/print/attribute/standard/NumberOfDocuments.java src/java.desktop/share/classes/javax/print/attribute/standard/NumberOfInterveningJobs.java src/java.desktop/share/classes/javax/print/attribute/standard/NumberUp.java src/java.desktop/share/classes/javax/print/attribute/standard/NumberUpSupported.java src/java.desktop/share/classes/javax/print/attribute/standard/OrientationRequested.java src/java.desktop/share/classes/javax/print/attribute/standard/OutputDeviceAssigned.java src/java.desktop/share/classes/javax/print/attribute/standard/PDLOverrideSupported.java src/java.desktop/share/classes/javax/print/attribute/standard/PageRanges.java src/java.desktop/share/classes/javax/print/attribute/standard/PagesPerMinute.java src/java.desktop/share/classes/javax/print/attribute/standard/PagesPerMinuteColor.java src/java.desktop/share/classes/javax/print/attribute/standard/PresentationDirection.java src/java.desktop/share/classes/javax/print/attribute/standard/PrintQuality.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterInfo.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterIsAcceptingJobs.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterLocation.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterMakeAndModel.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterMessageFromOperator.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterMoreInfo.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterMoreInfoManufacturer.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterName.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterResolution.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterState.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterStateReason.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterStateReasons.java src/java.desktop/share/classes/javax/print/attribute/standard/PrinterURI.java src/java.desktop/share/classes/javax/print/attribute/standard/QueuedJobCount.java src/java.desktop/share/classes/javax/print/attribute/standard/ReferenceUriSchemesSupported.java src/java.desktop/share/classes/javax/print/attribute/standard/RequestingUserName.java src/java.desktop/share/classes/javax/print/attribute/standard/Severity.java src/java.desktop/share/classes/javax/print/attribute/standard/SheetCollate.java src/java.desktop/share/classes/javax/print/attribute/standard/Sides.java src/java.desktop/share/classes/javax/print/attribute/standard/package-info.java src/java.desktop/share/classes/javax/print/event/PrintEvent.java src/java.desktop/share/classes/javax/print/event/PrintJobAdapter.java src/java.desktop/share/classes/javax/print/event/PrintJobAttributeEvent.java src/java.desktop/share/classes/javax/print/event/PrintJobAttributeListener.java src/java.desktop/share/classes/javax/print/event/PrintJobEvent.java src/java.desktop/share/classes/javax/print/event/PrintJobListener.java src/java.desktop/share/classes/javax/print/event/PrintServiceAttributeEvent.java src/java.desktop/share/classes/javax/print/event/PrintServiceAttributeListener.java src/java.desktop/share/classes/javax/print/event/package-info.java src/java.desktop/share/classes/javax/print/package-info.java
diffstat 127 files changed, 8418 insertions(+), 8919 deletions(-) [+]
line wrap: on
line diff
--- a/src/java.desktop/share/classes/javax/print/AttributeException.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/AttributeException.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -28,27 +28,22 @@
 import javax.print.attribute.Attribute;
 
 /**
- * Interface AttributeException is a mixin interface which a subclass of
- * {@link
- * PrintException PrintException} can implement to report an error condition
- * involving one or more printing attributes that a particular Print
+ * Interface {@code AttributeException} is a mixin interface which a subclass of
+ * {@link PrintException PrintException} can implement to report an error
+ * condition involving one or more printing attributes that a particular Print
  * Service instance does not support. Either the attribute is not supported at
  * all, or the attribute is supported but the particular specified value is not
- * supported. The Print Service API does not define any print exception
- * classes that implement interface AttributeException, that being left to the
+ * supported. The Print Service API does not define any print exception classes
+ * that implement interface {@code AttributeException}, that being left to the
  * Print Service implementor's discretion.
- *
  */
-
 public interface AttributeException {
 
-
     /**
      * Returns the array of printing attribute classes for which the Print
-     * Service instance does not support the attribute at all, or null if
-     * there are no such attributes. The objects in the returned array are
-     * classes that extend the base interface
-     * {@link javax.print.attribute.Attribute Attribute}.
+     * Service instance does not support the attribute at all, or {@code null}
+     * if there are no such attributes. The objects in the returned array are
+     * classes that extend the base interface {@link Attribute Attribute}.
      *
      * @return unsupported attribute classes
      */
@@ -57,10 +52,10 @@
     /**
      * Returns the array of printing attributes for which the Print Service
      * instance supports the attribute but does not support that particular
-     * value of the attribute, or null if there are no such attribute values.
+     * value of the attribute, or {@code null} if there are no such attribute
+     * values.
      *
      * @return unsupported attribute values
      */
     public Attribute[] getUnsupportedValues();
-
-    }
+}
--- a/src/java.desktop/share/classes/javax/print/CancelablePrintJob.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/CancelablePrintJob.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2017, 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
@@ -26,52 +26,47 @@
 package javax.print;
 
 /**
- * This interface is used by a printing application to cancel a
- * print job.  This interface extends {@link DocPrintJob}.  A
- * {@code DocPrintJob} implementation returned from a print
- * service implements this interface if the print job can be
- * cancelled.  Before trying to cancel
- * a print job, the client needs to test if the
- * {@code DocPrintJob} object returned from the print service
- * actually implements this interface.  Clients should never assume
- * that a {@code DocPrintJob} implements this interface.  A
- * print service might support cancellation only for certain types
- * of print data and representation class names.  This means that
- * only some of the {@code DocPrintJob} objects returned from
- * a service will implement this interface.
+ * This interface is used by a printing application to cancel a print job. This
+ * interface extends {@link DocPrintJob}. A {@code DocPrintJob} implementation
+ * returned from a print service implements this interface if the print job can
+ * be cancelled. Before trying to cancel a print job, the client needs to test
+ * if the {@code DocPrintJob} object returned from the print service actually
+ * implements this interface. Clients should never assume that a
+ * {@code DocPrintJob} implements this interface. A print service might support
+ * cancellation only for certain types of print data and representation class
+ * names. This means that only some of the {@code DocPrintJob} objects returned
+ * from a service will implement this interface.
  * <p>
- * Service implementors are encouraged to implement this optional interface
- * and to deliver a javax.print.event.PrintJobEvent.JOB_CANCELLED event
- * to any listeners if a job is successfully cancelled with an
- * implementation of this interface. Services should also note that an
- * implementation of this method may be made from a separate client thread
- * than that which made the print request.  Thus the implementation of
- * this interface must be made thread safe.
+ * Service implementors are encouraged to implement this optional interface and
+ * to deliver a {@link javax.print.event.PrintJobEvent#JOB_CANCELED} event to
+ * any listeners if a job is successfully cancelled with an implementation of
+ * this interface. Services should also note that an implementation of this
+ * method may be made from a separate client thread than that which made the
+ * print request. Thus the implementation of this interface must be made thread
+ * safe.
  */
-
 public interface CancelablePrintJob extends DocPrintJob {
 
     /**
      * Stops further processing of a print job.
      * <p>
-     * If a service supports this method it cannot be concluded that
-     * job cancellation will always succeed. A job may not be able to be
-     * cancelled once it has reached and passed some point in its processing.
-     * A successful cancellation means only that the entire job was not
-     * printed, some portion may already have printed when cancel returns.
+     * If a service supports this method it cannot be concluded that job
+     * cancellation will always succeed. A job may not be able to be cancelled
+     * once it has reached and passed some point in its processing. A successful
+     * cancellation means only that the entire job was not printed, some portion
+     * may already have printed when cancel returns.
      * <p>
-     * The service will throw a PrintException if the cancellation did not
-     * succeed. A job which has not yet been submitted for printing should
-     * throw this exception.
-     * Cancelling an already successfully cancelled Print Job is not
-     * considered an error and will always succeed.
+     * The service will throw a {@code PrintException} if the cancellation did
+     * not succeed. A job which has not yet been submitted for printing should
+     * throw this exception. Cancelling an already successfully cancelled Print
+     * Job is not considered an error and will always succeed.
      * <p>
      * Cancellation in some services may be a lengthy process, involving
-     * requests to a server and processing of its print queue. Clients
-     * may wish to execute cancel in a thread which does not affect
-     * application execution.
-     * @throws PrintException if the job could not be successfully cancelled.
+     * requests to a server and processing of its print queue. Clients may wish
+     * to execute cancel in a thread which does not affect application
+     * execution.
+     *
+     * @throws PrintException if the job could not be successfully cancelled
      */
     public void cancel() throws PrintException;
-
 }
--- a/src/java.desktop/share/classes/javax/print/Doc.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/Doc.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -25,181 +25,165 @@
 
 package javax.print;
 
+import java.io.IOException;
 import java.io.InputStream;
-import java.io.IOException;
 import java.io.Reader;
 
 import javax.print.attribute.DocAttributeSet;
 
-
 /**
- * Interface Doc specifies the interface for an object that supplies one piece
- * of print data for a Print Job. "Doc" is a short, easy-to-pronounce term
+ * Interface {@code Doc} specifies the interface for an object that supplies one
+ * piece of print data for a Print Job. "Doc" is a short, easy-to-pronounce term
  * that means "a piece of print data." The client passes to the Print Job an
- * object that implements interface Doc, and the Print Job calls methods on
- * that object to obtain the print data. The Doc interface lets a Print Job:
- * <UL>
- * <LI>
- * Determine the format, or "doc flavor" (class {@link DocFlavor DocFlavor}),
- * in which the print data is available. A doc flavor designates the print
- * data format (a MIME type) and the representation class of the object
- * from which the print data comes.
- *
- * <LI>
- * Obtain the print data representation object, which is an instance of the
- * doc flavor's representation class. The Print Job can then obtain the actual
- * print data from the representation object.
- *
- * <LI>
- * Obtain the printing attributes that specify additional characteristics of
- * the doc or that specify processing instructions to be applied to the doc.
- * Printing attributes are defined in package {@link javax.print.attribute
- * javax.print.attribute}. The doc returns its printing attributes stored in
- * an {@link javax.print.attribute.DocAttributeSet javax.print.attribute.DocAttributeSet}.
- * </UL>
- * <P>
- * Each method in an implementation of interface Doc is permitted always to
- * return the same object each time the method is called.
- * This has implications
- * for a Print Job or other caller of a doc object whose print data
+ * object that implements interface {@code Doc}, and the Print Job calls methods
+ * on that object to obtain the print data. The {@code Doc} interface lets a
+ * Print Job:
+ * <ul>
+ *   <li>Determine the format, or "doc flavor" (class
+ *   {@link DocFlavor DocFlavor}), in which the print data is available. A doc
+ *   flavor designates the print data format (a MIME type) and the
+ *   representation class of the object from which the print data comes.
+ *   <li>Obtain the print data representation object, which is an instance of
+ *   the doc flavor's representation class. The Print Job can then obtain the
+ *   actual print data from the representation object.
+ *   <li>Obtain the printing attributes that specify additional characteristics
+ *   of the doc or that specify processing instructions to be applied to the
+ *   doc. Printing attributes are defined in package
+ *   {@link javax.print.attribute}. The doc returns its printing attributes
+ *   stored in an {@link DocAttributeSet javax.print.attribute.DocAttributeSet}.
+ * </ul>
+ * Each method in an implementation of interface {@code Doc} is permitted always
+ * to return the same object each time the method is called. This has
+ * implications for a Print Job or other caller of a doc object whose print data
  * representation object "consumes" the print data as the caller obtains the
  * print data, such as a print data representation object which is a stream.
- * Once the Print Job has called {@link #getPrintData()
- * getPrintData()} and obtained the stream, any further calls to
- * {@link #getPrintData() getPrintData()} will return the same
- * stream object upon which reading may already be in progress, <I>not</I> a new
- * stream object that will re-read the print data from the beginning. Specifying
- * a doc object to behave this way simplifies the implementation of doc objects,
- * and is justified on the grounds that a particular doc is intended to convey
- * print data only to one Print Job, not to several different Print Jobs. (To
- * convey the same print data to several different Print Jobs, you have to
- * create several different doc objects on top of the same print data source.)
- * <P>
- * Interface Doc affords considerable implementation flexibility. The print data
- * might already be in existence when the doc object is constructed. In this
- * case the objects returned by the doc's methods can be supplied to the doc's
- * constructor, be stored in the doc ahead of time, and simply be returned when
- * called for. Alternatively, the print data might not exist yet when the doc
- * object is constructed. In this case the doc object might provide a "lazy"
+ * Once the Print Job has called {@link #getPrintData() getPrintData()} and
+ * obtained the stream, any further calls to {@link #getPrintData()
+ * getPrintData()} will return the same stream object upon which reading may
+ * already be in progress, <i>not</i> a new stream object that will re-read the
+ * print data from the beginning. Specifying a doc object to behave this way
+ * simplifies the implementation of doc objects, and is justified on the grounds
+ * that a particular doc is intended to convey print data only to one Print Job,
+ * not to several different Print Jobs. (To convey the same print data to
+ * several different Print Jobs, you have to create several different doc
+ * objects on top of the same print data source.)
+ * <p>
+ * Interface {@code Doc} affords considerable implementation flexibility. The
+ * print data might already be in existence when the doc object is constructed.
+ * In this case the objects returned by the doc's methods can be supplied to the
+ * doc's constructor, be stored in the doc ahead of time, and simply be returned
+ * when called for. Alternatively, the print data might not exist yet when the
+ * doc object is constructed. In this case the doc object might provide a "lazy"
  * implementation that generates the print data representation object (and/or
  * the print data) only when the Print Job calls for it (when the Print Job
  * calls the {@link #getPrintData() getPrintData()} method).
- * <P>
+ * <p>
  * There is no restriction on the number of client threads that may be
  * simultaneously accessing the same doc. Therefore, all implementations of
- * interface Doc must be designed to be multiple thread safe.
+ * interface {@code Doc} must be designed to be multiple thread safe.
  * <p>
  * However there can only be one consumer of the print data obtained from a
- * Doc.
+ * {@code Doc}.
  * <p>
- * If print data is obtained from the client as a stream, by calling Doc's
- * {@code getReaderForText()} or {@code getStreamForBytes()}
- * methods, or because the print data source is already an InputStream or
- * Reader, then the print service should always close these streams for the
- * client on all job completion conditions. With the following caveat.
- * If the print data is itself a stream, the service will always close it.
- * If the print data is otherwise something that can be requested as a stream,
- * the service will only close the stream if it has obtained the stream before
- * terminating. That is, just because a print service might request data as
- * a stream does not mean that it will, with the implications that Doc
+ * If print data is obtained from the client as a stream, by calling
+ * {@code Doc}'s {@code getReaderForText()} or {@code getStreamForBytes()}
+ * methods, or because the print data source is already an {@code InputStream}
+ * or {@code Reader}, then the print service should always close these streams
+ * for the client on all job completion conditions. With the following caveat.
+ * If the print data is itself a stream, the service will always close it. If
+ * the print data is otherwise something that can be requested as a stream, the
+ * service will only close the stream if it has obtained the stream before
+ * terminating. That is, just because a print service might request data as a
+ * stream does not mean that it will, with the implications that {@code Doc}
  * implementors which rely on the service to close them should create such
  * streams only in response to a request from the service.
- * <HR>
  */
 public interface Doc {
 
     /**
-     * Determines the doc flavor in which this doc object will supply its
-     * piece of print data.
+     * Determines the doc flavor in which this doc object will supply its piece
+     * of print data.
      *
-     * @return  Doc flavor.
+     * @return doc flavor
      */
     public DocFlavor getDocFlavor();
 
     /**
      * Obtains the print data representation object that contains this doc
-     * object's piece of print data in the format corresponding to the
-     * supported doc flavor.
-     * The {@code getPrintData()} method returns an instance of
-     * the representation class whose name is given by {@link
-     * #getDocFlavor() getDocFlavor()}.{@link
-     * DocFlavor#getRepresentationClassName()
-     * getRepresentationClassName()}, and the return value can be cast
-     * from class Object to that representation class.
+     * object's piece of print data in the format corresponding to the supported
+     * doc flavor. The {@code getPrintData()} method returns an instance of the
+     * representation class whose name is given by{@link #getDocFlavor()
+     * getDocFlavor()}.{@link DocFlavor#getRepresentationClassName()
+     * getRepresentationClassName()}, and the return value can be cast from
+     * class {@code Object} to that representation class.
      *
-     * @return  Print data representation object.
-     *
-     * @exception  IOException
-     *     Thrown if the representation class is a stream and there was an I/O
-     *     error while constructing the stream.
+     * @return print data representation object
+     * @throws IOException if the representation class is a stream and there was
+     *         an I/O error while constructing the stream
      */
     public Object getPrintData() throws IOException;
 
     /**
      * Obtains the set of printing attributes for this doc object. If the
      * returned attribute set includes an instance of a particular attribute
-     * <I>X,</I> the printer must use that attribute value for this doc,
-     * overriding any value of attribute <I>X</I> in the job's attribute set.
-     * If the returned attribute set does not include an instance
-     * of a particular attribute <I>X</I> or if null is returned, the printer
-     * must consult the job's attribute set to obtain the value for
-     * attribute <I>X,</I> and if not found there, the printer must use an
+     * <i>X,</i> the printer must use that attribute value for this doc,
+     * overriding any value of attribute <i>X</i> in the job's attribute set. If
+     * the returned attribute set does not include an instance of a particular
+     * attribute <i>X</i> or if {@code null} is returned, the printer must
+     * consult the job's attribute set to obtain the value for attribute
+     * <i>X,</i> and if not found there, the printer must use an
      * implementation-dependent default value. The returned attribute set is
      * unmodifiable.
      *
-     * @return  Unmodifiable set of printing attributes for this doc, or null
-     *          to obtain all attribute values from the job's attribute
-     *          set.
+     * @return unmodifiable set of printing attributes for this doc, or
+     *         {@code null} to obtain all attribute values from the job's
+     *         attribute set
      */
     public DocAttributeSet getAttributes();
 
     /**
-     * Obtains a reader for extracting character print data from this doc.
-     * The Doc implementation is required to support this method if the
-     * DocFlavor has one of the following print data representation classes,
-     * and return null otherwise:
-     * <UL>
-     * <LI> char[]
-     * <LI> java.lang.String
-     * <LI> java.io.Reader
-     * </UL>
+     * Obtains a reader for extracting character print data from this doc. The
+     * {@code Doc} implementation is required to support this method if the
+     * {@code DocFlavor} has one of the following print data representation
+     * classes, and return {@code null} otherwise:
+     * <ul>
+     *   <li>char[]
+     *   <li>java.lang.String
+     *   <li>java.io.Reader
+     * </ul>
      * The doc's print data representation object is used to construct and
-     * return a Reader for reading the print data as a stream of characters
-     * from the print data representation object.
-     * However, if the print data representation object is itself a Reader,
-     * then the print data representation object is simply returned.
+     * return a {@code Reader} for reading the print data as a stream of
+     * characters from the print data representation object. However, if the
+     * print data representation object is itself a {@code Reader}, then the
+     * print data representation object is simply returned.
      *
-     * @return  Reader for reading the print data characters from this doc.
-     *          If a reader cannot be provided because this doc does not meet
-     *          the criteria stated above, null is returned.
-     *
-     * @exception  IOException
-     *     Thrown if there was an I/O error while creating the reader.
+     * @return reader for reading the print data characters from this doc. If a
+     *         reader cannot be provided because this doc does not meet the
+     *         criteria stated above, {@code null} is returned.
+     * @throws IOException if there was an I/O error while creating the reader
      */
     public Reader getReaderForText() throws IOException;
 
     /**
-     * Obtains an input stream for extracting byte print data from this
-     * doc.  The Doc implementation is required to support this method if
-     * the DocFlavor has one of the following print data representation
-     * classes, and return null otherwise:
-     * <UL>
-     * <LI> byte[]
-     * <LI> java.io.InputStream
-     * </UL>
+     * Obtains an input stream for extracting byte print data from this doc. The
+     * {@code Doc} implementation is required to support this method if the
+     * {@code DocFlavor} has one of the following print data representation
+     * classes, and return {@code null} otherwise:
+     * <ul>
+     *   <li>byte[]
+     *   <li>java.io.InputStream
+     * </ul>
      * This doc's print data representation object is obtained, then an input
      * stream for reading the print data from the print data representation
      * object as a stream of bytes is created and returned. However, if the
      * print data representation object is itself an input stream, then the
      * print data representation object is simply returned.
      *
-     * @return  Input stream for reading the print data bytes from this doc. If
-     *          an input stream cannot be provided because this doc does not
-     *          meet the criteria stated above, null is returned.
-     *
-     * @exception  IOException
-     *     Thrown if there was an I/O error while creating the input stream.
+     * @return input stream for reading the print data bytes from this doc. If
+     *         an input stream cannot be provided because this doc does not meet
+     *         the criteria stated above, {@code null} is returned.
+     * @throws IOException if there was an I/O error while creating the input
+     *         stream
      */
     public InputStream getStreamForBytes() throws IOException;
-
 }
--- a/src/java.desktop/share/classes/javax/print/DocFlavor.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/DocFlavor.java	Thu Aug 31 15:47:34 2017 -0700
@@ -30,447 +30,376 @@
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
 
-
 /**
- * Class {@code DocFlavor} encapsulates an object that specifies the
- * format in which print data is supplied to a {@link DocPrintJob}.
- * "Doc" is a short, easy-to-pronounce term that means "a piece of print data."
- * The print data format, or "doc flavor", consists of two things:
- * <UL>
- * <LI>
- * <B>MIME type.</B> This is a Multipurpose Internet Mail Extensions (MIME)
- * media type (as defined in <A HREF="http://www.ietf.org/rfc/rfc2045.txt">RFC
- * 2045</A> and <A HREF="http://www.ietf.org/rfc/rfc2046.txt">RFC 2046</A>)
- * that specifies how the print data is to be interpreted.
- * The charset of text data should be the IANA MIME-preferred name, or its
- * canonical name if no preferred name is specified. Additionally a few
- * historical names supported by earlier versions of the Java platform may
- * be recognized.
- * See <a href="../../java/lang/package-summary.html#charenc">
- * character encodings</a> for more information on the character encodings
- * supported on the Java platform.
+ * Class {@code DocFlavor} encapsulates an object that specifies the format in
+ * which print data is supplied to a {@link DocPrintJob}. "Doc" is a short,
+ * easy-to-pronounce term that means "a piece of print data." The print data
+ * format, or "doc flavor", consists of two things:
+ * <ul>
+ *   <li><b>MIME type.</b> This is a Multipurpose Internet Mail Extensions
+ *   (MIME) media type (as defined in
+ *   <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a> and
+ *   <a href="http://www.ietf.org/rfc/rfc2046.txt">RFC 2046</a>) that specifies
+ *   how the print data is to be interpreted. The charset of text data should be
+ *   the IANA MIME-preferred name, or its canonical name if no preferred name is
+ *   specified. Additionally a few historical names supported by earlier
+ *   versions of the Java platform may be recognized. See
+ *   <a href="../../java/lang/package-summary.html#charenc">character encodings
+ *   </a> for more information on the character encodings supported on the Java
+ *   platform.
+ *   <li><b>Representation class name.</b> This specifies the fully-qualified
+ *   name of the class of the object from which the actual print data comes, as
+ *   returned by the {@link Class#getName() Class.getName()} method. (Thus the
+ *   class name for {@code byte[]} is {@code "[B"}, for {@code char[]} it is
+ *   {@code "[C"}.)
+ * </ul>
+ * A {@code DocPrintJob} obtains its print data by means of interface
+ * {@link Doc Doc}. A {@code Doc} object lets the {@code DocPrintJob} determine
+ * the doc flavor the client can supply. A {@code Doc} object also lets the
+ * {@code DocPrintJob} obtain an instance of the doc flavor's representation
+ * class, from which the {@code DocPrintJob} then obtains the actual print data.
  *
- * <LI>
- * <B>Representation class name.</B> This specifies the fully-qualified name of
- * the class of the object from which the actual print data comes, as returned
- * by the {@link java.lang.Class#getName() Class.getName()} method.
- * (Thus the class name for {@code byte[]} is {@code "[B"}, for
- * {@code char[]} it is {@code "[C"}.)
- * </UL>
- * <P>
- * A {@code DocPrintJob} obtains its print data by means of interface
- * {@link Doc Doc}. A {@code Doc} object lets the {@code DocPrintJob}
- * determine the doc flavor the client can supply.  A {@code Doc} object
- * also lets the {@code DocPrintJob} obtain an instance of the doc flavor's
- * representation class, from which the {@code DocPrintJob} then obtains
- * the actual print data.
- *
- * <HR>
- * <H3>Client Formatted Print Data</H3>
- * There are two broad categories of print data, client formatted print data
- * and service formatted print data.
- * <P>
- * For <B>client formatted print data</B>, the client determines or knows the
- * print data format.
- * For example the client may have a JPEG encoded image, a URL for
- * HTML code, or a disk file containing plain text in some encoding,
- * possibly obtained from an external source, and
- * requires a way to describe the data format to the print service.
+ * <hr>
+ * <h3>Client Formatted Print Data</h3>
+ * There are two broad categories of print data, client formatted print data and
+ * service formatted print data.
+ * <p>
+ * For <b>client formatted print data</b>, the client determines or knows the
+ * print data format. For example the client may have a JPEG encoded image, a
+ * {@code URL} for HTML code, or a disk file containing plain text in some
+ * encoding, possibly obtained from an external source, and requires a way to
+ * describe the data format to the print service.
  * <p>
  * The doc flavor's representation class is a conduit for the JPS
- * {@code DocPrintJob} to obtain a sequence of characters or
- * bytes from the client. The
- * doc flavor's MIME type is one of the standard media types telling how to
- * interpret the sequence of characters or bytes. For a list of standard media
- * types, see the Internet Assigned Numbers Authority's (IANA's) <A
- * HREF="http://www.iana.org/assignments/media-types/">Media Types
- * Directory</A>. Interface {@link Doc Doc} provides two utility operations,
+ * {@code DocPrintJob} to obtain a sequence of characters or bytes from the
+ * client. The doc flavor's MIME type is one of the standard media types telling
+ * how to interpret the sequence of characters or bytes. For a list of standard
+ * media types, see the Internet Assigned Numbers Authority's (IANA's)
+ * <a href="http://www.iana.org/assignments/media-types/">Media Types Directory
+ * </a>. Interface {@link Doc Doc} provides two utility operations,
  * {@link Doc#getReaderForText() getReaderForText} and
- * {@link Doc#getStreamForBytes() getStreamForBytes()}, to help a
- * {@code Doc} object's client extract client formatted print data.
- * <P>
+ * {@link Doc#getStreamForBytes() getStreamForBytes()}, to help a {@code Doc}
+ * object's client extract client formatted print data.
+ * <p>
  * For client formatted print data, the print data representation class is
  * typically one of the following (although other representation classes are
  * permitted):
- * <UL>
- * <LI>
- * Character array ({@code char[]}) -- The print data consists of the
- * Unicode characters in the array.
+ * <ul>
+ *   <li>Character array ({@code char[]}) -- The print data consists of the
+ *   Unicode characters in the array.
+ *   <li>{@code String} -- The print data consists of the Unicode characters in
+ *   the string.
+ *   <li>Character stream ({@link java.io.Reader java.io.Reader}) -- The print
+ *   data consists of the Unicode characters read from the stream up to the
+ *   end-of-stream.
+ *   <li>Byte array ({@code byte[]}) -- The print data consists of the bytes in
+ *   the array. The bytes are encoded in the character set specified by the doc
+ *   flavor's MIME type. If the MIME type does not specify a character set, the
+ *   default character set is US-ASCII.
+ *   <li>Byte stream ({@link java.io.InputStream java.io.InputStream}) -- The
+ *   print data consists of the bytes read from the stream up to the
+ *   end-of-stream. The bytes are encoded in the character set specified by the
+ *   doc flavor's MIME type. If the MIME type does not specify a character set,
+ *   the default character set is US-ASCII.
+ *   <li>Uniform Resource Locator ({@link java.net.URL URL}) -- The print data
+ *   consists of the bytes read from the URL location. The bytes are encoded in
+ *   the character set specified by the doc flavor's MIME type. If the MIME type
+ *   does not specify a character set, the default character set is US-ASCII.
+ *   When the representation class is a {@code URL}, the print service itself
+ *   accesses and downloads the document directly from its {@code URL} address,
+ *   without involving the client. The service may be some form of network print
+ *   service which is executing in a different environment. This means you
+ *   should not use a {@code URL} print data flavor to print a document at a
+ *   restricted {@code URL} that the client can see but the printer cannot see.
+ *   This also means you should not use a {@code URL} print data flavor to print
+ *   a document stored in a local file that is not available at a {@code URL}
+ *   accessible independently of the client. For example, a file that is not
+ *   served up by an HTTP server or FTP server. To print such documents, let the
+ *   client open an input stream on the {@code URL} or file and use an input
+ *   stream data flavor.
+ * </ul>
  *
- * <LI>
- * {@code String}  --
- * The print data consists of the Unicode characters in the string.
- *
- * <LI>
- * Character stream ({@link java.io.Reader java.io.Reader})
- * -- The print data consists of the Unicode characters read from the stream
- * up to the end-of-stream.
- *
- * <LI>
- * Byte array ({@code byte[]}) -- The print data consists of the bytes in
- * the array. The bytes are encoded in the character set specified by the doc
- * flavor's MIME type. If the MIME type does not specify a character set, the
- * default character set is US-ASCII.
- *
- * <LI>
- * Byte stream ({@link java.io.InputStream java.io.InputStream}) --
- * The print data consists of the bytes read from the stream up to the
- * end-of-stream. The bytes are encoded in the character set specified by the
- * doc flavor's MIME type. If the MIME type does not specify a character set,
- * the default character set is US-ASCII.
-
- * <LI>
- * Uniform Resource Locator ({@link java.net.URL URL})
- * -- The print data consists of the bytes read from the URL location.
- * The bytes are encoded in the character set specified by the doc flavor's
- * MIME type. If the MIME type does not specify a character set, the default
- * character set is US-ASCII.
- * <P>
- * When the representation class is a URL, the print service itself accesses
- * and downloads the document directly from its URL address, without involving
- * the client. The service may be some form of network print service which
- * is executing in a different environment.
- * This means you should not use a URL print data flavor to print a
- * document at a restricted URL that the client can see but the printer cannot
- * see. This also means you should not use a URL print data flavor to print a
- * document stored in a local file that is not available at a URL
- * accessible independently of the client.
- * For example, a file that is not served up by an HTTP server or FTP server.
- * To print such documents, let the client open an input stream on the URL
- * or file and use an input stream data flavor.
- * </UL>
- *
- * <HR>
+ * <hr>
  * <h3>Default and Platform Encodings</h3>
- * <P>
  * For byte print data where the doc flavor's MIME type does not include a
  * {@code charset} parameter, the Java Print Service instance assumes the
  * US-ASCII character set by default. This is in accordance with
- * <A HREF="http://www.ietf.org/rfc/rfc2046.txt">RFC 2046</A>, which says the
- * default character set is US-ASCII. Note that US-ASCII is a subset of
- * UTF-8, so in the future this may be widened if a future RFC endorses
- * UTF-8 as the default in a compatible manner.
+ * <a href="http://www.ietf.org/rfc/rfc2046.txt">RFC 2046</a>, which says the
+ * default character set is US-ASCII. Note that US-ASCII is a subset of UTF-8,
+ * so in the future this may be widened if a future RFC endorses UTF-8 as the
+ * default in a compatible manner.
  * <p>
- * Also note that this is different than the behaviour of the Java runtime
- * when interpreting a stream of bytes as text data. That assumes the
- * default encoding for the user's locale. Thus, when spooling a file in local
- * encoding to a Java Print Service it is important to correctly specify
- * the encoding. Developers working in the English locales should
- * be particularly conscious of this, as their platform encoding corresponds
- * to the default mime charset. By this coincidence that particular
- * case may work without specifying the encoding of platform data.
+ * Also note that this is different than the behaviour of the Java runtime when
+ * interpreting a stream of bytes as text data. That assumes the default
+ * encoding for the user's locale. Thus, when spooling a file in local encoding
+ * to a Java Print Service it is important to correctly specify the encoding.
+ * Developers working in the English locales should be particularly conscious of
+ * this, as their platform encoding corresponds to the default mime charset. By
+ * this coincidence that particular case may work without specifying the
+ * encoding of platform data.
  * <p>
  * Every instance of the Java virtual machine has a default character encoding
  * determined during virtual-machine startup and typically depends upon the
- * locale and charset being used by the underlying operating system.
- * In a distributed environment there is no guarantee that two VM share
- * the same default encoding. Thus clients which want to stream platform
- * encoded text data from the host platform to a Java Print Service instance
- * must explicitly declare the charset and not rely on defaults.
+ * locale and charset being used by the underlying operating system. In a
+ * distributed environment there is no guarantee that two VM share the same
+ * default encoding. Thus clients which want to stream platform encoded text
+ * data from the host platform to a Java Print Service instance must explicitly
+ * declare the charset and not rely on defaults.
  * <p>
  * The preferred form is the official IANA primary name for an encoding.
- * Applications which stream text data should always specify the charset
- * in the mime type, which necessitates obtaining the encoding of the host
- * platform for data (eg files) stored in that platform's encoding.
- * A CharSet which corresponds to this and is suitable for use in a
- * mime-type for a DocFlavor can be obtained
- * from {@link DocFlavor#hostEncoding DocFlavor.hostEncoding}
- * This may not always be the primary IANA name but is guaranteed to be
- * understood by this VM.
- * For common flavors, the pre-defined *HOST DocFlavors may be used.
+ * Applications which stream text data should always specify the charset in the
+ * mime type, which necessitates obtaining the encoding of the host platform for
+ * data (eg files) stored in that platform's encoding. A {@code CharSet} which
+ * corresponds to this and is suitable for use in a mime-type for a
+ * {@code DocFlavor} can be obtained from
+ * {@link DocFlavor#hostEncoding DocFlavor.hostEncoding} This may not always be
+ * the primary IANA name but is guaranteed to be understood by this VM. For
+ * common flavors, the pre-defined *HOST {@code DocFlavors} may be used.
  * <p>
- * See <a href="../../java/lang/package-summary.html#charenc">
- * character encodings</a> for more information on the character encodings
- * supported on the Java platform.
- * <HR>
+ * See <a href="../../java/lang/package-summary.html#charenc">character
+ * encodings</a> for more information on the character encodings supported on
+ * the Java platform.
+ *
+ * <hr>
  * <h3>Recommended DocFlavors</h3>
- * <P>
  * The Java Print Service API does not define any mandatorily supported
- * DocFlavors.
- * However, here are some examples of MIME types that a Java Print Service
- * instance might support for client formatted print data.
- * Nested classes inside class DocFlavor declare predefined static
- * constant DocFlavor objects for these example doc flavors; class DocFlavor's
- * constructor can be used to create an arbitrary doc flavor.
- * <UL>
- * <LI>Preformatted text
- * <table class="striped">
- * <caption>MIME-Types and their descriptions</caption>
- * <thead>
- * <TR>
- *  <TH>MIME-Type</TH><TH>Description</TH>
- * </TR>
- * </thead>
- * <tbody>
- * <TR>
- * <TD>{@code "text/plain"}</TD>
- * <TD>Plain text in the default character set (US-ASCII)</TD>
- * </TR>
- * <TR>
- * <TD><code>"text/plain; charset=<I>xxx</I>"</code></TD>
- * <TD>Plain text in character set <I>xxx</I></TD>
- * </TR>
- * <TR>
- * <TD>{@code "text/html"}</TD>
- * <TD>HyperText Markup Language in the default character set (US-ASCII)</TD>
- * </TR>
- * <TR>
- * <TD><code>"text/html; charset=<I>xxx</I>"</code></TD>
- * <TD>HyperText Markup Language in character set <I>xxx</I></TD>
- * </TR>
- * </tbody>
- * </TABLE>
- * <P>
- * In general, preformatted text print data is provided either in a character
- * oriented representation class (character array, String, Reader) or in a
- * byte oriented representation class (byte array, InputStream, URL).
+ * {@code DocFlavors}. However, here are some examples of MIME types that a Java
+ * Print Service instance might support for client formatted print data. Nested
+ * classes inside class {@code DocFlavor} declare predefined static constant
+ * {@code DocFlavor} objects for these example doc flavors; class
+ * {@code DocFlavor}'s constructor can be used to create an arbitrary doc
+ * flavor.
+ * <ul>
+ *   <li>Preformatted text
+ *   <table class="striped">
+ *   <caption>MIME-Types and their descriptions</caption>
+ *   <thead>
+ *     <tr>
+ *       <th>MIME-Type
+ *       <th>Description
+ *   </thead>
+ *   <tbody>
+ *     <tr>
+ *       <td>{@code "text/plain"}
+ *       <td>Plain text in the default character set (US-ASCII)
+ *     <tr>
+ *       <td><code> "text/plain; charset=<i>xxx</i>"</code>
+ *       <td>Plain text in character set <i>xxx</i>
+ *     <tr>
+ *       <td>{@code "text/html"}
+ *       <td>HyperText Markup Language in the default character set (US-ASCII)
+ *     <tr>
+ *       <td><code> "text/html; charset=<i>xxx</i>"</code>
+ *       <td>HyperText Markup Language in character set <i>xxx</i>
+ *   </tbody>
+ *   </table>
+ *   In general, preformatted text print data is provided either in a character
+ *   oriented representation class (character array, String, Reader) or in a
+ *   byte oriented representation class (byte array, InputStream, URL).
+ *   <li>Preformatted page description language (PDL) documents
+ *   <table class="striped">
+ *   <caption>MIME-Types and their descriptions</caption>
+ *   <thead>
+ *     <tr>
+ *       <th>MIME-Type
+ *       <th>Description
+ *   </thead>
+ *   <tbody>
+ *     <tr>
+ *       <td>{@code "application/pdf"}
+ *       <td>Portable Document Format document
+ *     <tr>
+ *       <td>{@code "application/postscript"}
+ *       <td>PostScript document
+ *     <tr>
+ *       <td>{@code "application/vnd.hp-PCL"}
+ *       <td>Printer Control Language document
+ *   </tbody>
+ *   </table>
+ *   In general, preformatted PDL print data is provided in a byte oriented
+ *   representation class (byte array, {@code InputStream}, {@code URL}).
+ *   <li>Preformatted images
+ *   <table class="striped">
+ *   <caption>MIME-Types and their descriptions</caption>
+ *   <thead>
+ *     <tr>
+ *       <th>MIME-Type
+ *       <th>Description
+ *   </thead>
+ *   <tbody>
+ *     <tr>
+ *       <td>{@code "image/gif"}
+ *       <td>Graphics Interchange Format image
+ *     <tr>
+ *       <td>{@code "image/jpeg"}
+ *       <td>Joint Photographic Experts Group image
+ *     <tr>
+ *       <td>{@code "image/png"}
+ *       <td>Portable Network Graphics image
+ *   </tbody>
+ *   </table>
+ *   In general, preformatted image print data is provided in a byte oriented
+ *   representation class (byte array, {@code InputStream}, {@code URL}).
+ *   <li>Preformatted autosense print data
+ *   <table class="striped">
+ *   <caption>MIME-Types and their descriptions</caption>
+ *   <thead>
+ *     <tr>
+ *       <th>MIME-Type
+ *       <th>Description
+ *   </thead>
+ *   <tbody>
+ *     <tr>
+ *       <td>{@code "application/octet-stream"}
+ *       <td>The print data format is unspecified (just an octet stream)
+ *   </tbody>
+ *   </table>
+ *   The printer decides how to interpret the print data; the way this
+ *   "autosensing" works is implementation dependent. In general, preformatted
+ *   autosense print data is provided in a byte oriented representation class
+ *   (byte array, {@code InputStream}, {@code URL}).
+ * </ul>
  *
- *  <LI>Preformatted page description language (PDL) documents
- *
- * <table class="striped">
- * <caption>MIME-Types and their descriptions</caption>
- * <thead>
- * <TR>
- *  <TH>MIME-Type</TH><TH>Description</TH>
- * </TR>
- * </thead>
- * <tbody>
- * <TR>
- * <TD>{@code "application/pdf"}</TD>
- * <TD>Portable Document Format document</TD>
- * </TR>
- * <TR>
- * <TD>{@code "application/postscript"}</TD>
- * <TD>PostScript document</TD>
- * </TR>
- * <TR>
- * <TD>{@code "application/vnd.hp-PCL"}</TD>
- * <TD>Printer Control Language document</TD>
- * </TR>
- * </tbody>
- * </TABLE>
- * <P>
- * In general, preformatted PDL print data is provided in a byte oriented
- * representation class (byte array, InputStream, URL).
- *
- *  <LI>Preformatted images
- *
- * <table class="striped">
- * <caption>MIME-Types and their descriptions</caption>
- * <thead>
- * <TR>
- *  <TH>MIME-Type</TH><TH>Description</TH>
- * </TR>
- * </thead>
- * <tbody>
- * <TR>
- * <TD>{@code "image/gif"}</TD>
- * <TD>Graphics Interchange Format image</TD>
- * </TR>
- * <TR>
- * <TD>{@code "image/jpeg"}</TD>
- * <TD>Joint Photographic Experts Group image</TD>
- * </TR>
- * <TR>
- * <TD>{@code "image/png"}</TD>
- * <TD>Portable Network Graphics image</TD>
- * </TR>
- * </tbody>
- * </TABLE>
- * <P>
- * In general, preformatted image print data is provided in a byte oriented
- * representation class (byte array, InputStream, URL).
- *
- *  <LI>Preformatted autosense print data
- *
- * <table class="striped">
- * <caption>MIME-Types and their descriptions</caption>
- * <thead>
- * <TR>
- *  <TH>MIME-Type</TH><TH>Description</TH>
- * </TR>
- * </thead>
- * <tbody>
- * <TR>
- * <TD>{@code "application/octet-stream"}</TD>
- * <TD>The print data format is unspecified (just an octet stream)</TD>
- * </TR>
- * </tbody>
- * </TABLE>
- * <P>
- * The printer decides how to interpret the print data; the way this
- * "autosensing" works is implementation dependent. In general, preformatted
- * autosense print data is provided in a byte oriented representation class
- * (byte array, InputStream, URL).
- * </UL>
- *
- * <HR>
- * <H3>Service Formatted Print Data</H3>
- * <P>
- * For <B>service formatted print data</B>, the Java Print Service instance
+ * <hr>
+ * <h3>Service Formatted Print Data</h3>
+ * For <b>service formatted print data</b>, the Java Print Service instance
  * determines the print data format. The doc flavor's representation class
  * denotes an interface whose methods the {@code DocPrintJob} invokes to
- * determine the content to be printed -- such as a renderable image
- * interface or a Java printable interface.
- * The doc flavor's MIME type is the special value
- * {@code "application/x-java-jvm-local-objectref"} indicating the client
- * will supply a reference to a Java object that implements the interface
- * named as the representation class.
- * This MIME type is just a placeholder; what's
+ * determine the content to be printed -- such as a renderable image interface
+ * or a Java printable interface. The doc flavor's MIME type is the special
+ * value {@code "application/x-java-jvm-local-objectref"} indicating the client
+ * will supply a reference to a Java object that implements the interface named
+ * as the representation class. This MIME type is just a placeholder; what's
  * important is the print data representation class.
- * <P>
+ * <p>
  * For service formatted print data, the print data representation class is
  * typically one of the following (although other representation classes are
- * permitted). Nested classes inside class DocFlavor declare predefined static
- * constant DocFlavor objects for these example doc flavors; class DocFlavor's
- * constructor can be used to create an arbitrary doc flavor.
- * <UL>
- * <LI>
- * Renderable image object -- The client supplies an object that implements
- * interface
- * {@link java.awt.image.renderable.RenderableImage RenderableImage}. The
- * printer calls methods
- * in that interface to obtain the image to be printed.
+ * permitted). Nested classes inside class {@code DocFlavor} declare predefined
+ * static constant {@code DocFlavor} objects for these example doc flavors;
+ * class {@code DocFlavor}'s constructor can be used to create an arbitrary doc
+ * flavor.
+ * <ul>
+ *   <li>Renderable image object -- The client supplies an object that
+ *   implements interface
+ *   {@link java.awt.image.renderable.RenderableImage RenderableImage}. The
+ *   printer calls methods in that interface to obtain the image to be printed.
+ *   <li>Printable object -- The client supplies an object that implements
+ *   interface {@link java.awt.print.Printable Printable}. The printer calls
+ *   methods in that interface to obtain the pages to be printed, one by one.
+ *   For each page, the printer supplies a graphics context, and whatever the
+ *   client draws in that graphics context gets printed.
+ *   <li>Pageable object -- The client supplies an object that implements
+ *   interface {@link java.awt.print.Pageable Pageable}. The printer calls
+ *   methods in that interface to obtain the pages to be printed, one by one.
+ *   For each page, the printer supplies a graphics context, and whatever the
+ *   client draws in that graphics context gets printed.
+ * </ul>
  *
- * <LI>
- * Printable object -- The client supplies an object that implements interface
- * {@link java.awt.print.Printable Printable}.
- * The printer calls methods in that interface to obtain the pages to be
- * printed, one by one.
- * For each page, the printer supplies a graphics context, and whatever the
- * client draws in that graphics context gets printed.
- *
- * <LI>
- * Pageable object -- The client supplies an object that implements interface
- * {@link java.awt.print.Pageable Pageable}. The printer calls
- * methods in that interface to obtain the pages to be printed, one by one.
- * For each page, the printer supplies a graphics context, and whatever
- * the client draws in that graphics context gets printed.
- * </UL>
- *
- * <HR>
- *
- * <HR>
- * <H3>Pre-defined Doc Flavors</H3>
- * A Java Print Service instance is not <B><I>required</I></B> to support the
- * following print data formats and print data representation classes.  In
- * fact, a developer using this class should <b>never</b> assume that a
- * particular print service supports the document types corresponding to
- * these pre-defined doc flavors.  Always query the print service
- * to determine what doc flavors it supports.  However,
- * developers who have print services that support these doc flavors are
- * encouraged to refer to the predefined singleton instances created here.
- * <UL>
- * <LI>
- * Plain text print data provided through a byte stream. Specifically, the
- * following doc flavors are recommended to be supported:
- * <BR>&#183;&nbsp;&nbsp;
- * {@code ("text/plain", "java.io.InputStream")}
- * <BR>&#183;&nbsp;&nbsp;
- * {@code ("text/plain; charset=us-ascii", "java.io.InputStream")}
- * <BR>&#183;&nbsp;&nbsp;
- * {@code ("text/plain; charset=utf-8", "java.io.InputStream")}
- *
- * <LI>
- * Renderable image objects. Specifically, the following doc flavor is
- * recommended to be supported:
- * <BR>&#183;&nbsp;&nbsp;
- * {@code ("application/x-java-jvm-local-objectref", "java.awt.image.renderable.RenderableImage")}
- * </UL>
- * <P>
- * A Java Print Service instance is allowed to support any other doc flavors
- * (or none) in addition to the above mandatory ones, at the implementation's
+ * <hr>
+ * <h3>Pre-defined Doc Flavors</h3>
+ * A Java Print Service instance is not <b><i>required</i></b> to support the
+ * following print data formats and print data representation classes. In fact,
+ * a developer using this class should <b>never</b> assume that a particular
+ * print service supports the document types corresponding to these pre-defined
+ * doc flavors. Always query the print service to determine what doc flavors it
+ * supports. However, developers who have print services that support these doc
+ * flavors are encouraged to refer to the predefined singleton instances created
+ * here.
+ * <ul>
+ *   <li>Plain text print data provided through a byte stream. Specifically, the
+ *   following doc flavors are recommended to be supported:
+ *   <br>&#183;&nbsp;&nbsp;
+ *   {@code ("text/plain", "java.io.InputStream")}
+ *   <br>&#183;&nbsp;&nbsp;
+ *   {@code ("text/plain; charset=us-ascii", "java.io.InputStream")}
+ *   <br>&#183;&nbsp;&nbsp;
+ *   {@code ("text/plain; charset=utf-8", "java.io.InputStream")}
+ *   <li>Renderable image objects. Specifically, the following doc flavor is
+ *   recommended to be supported:
+ *   <br>&#183;&nbsp;&nbsp;
+ *   {@code ("application/x-java-jvm-local-objectref", "java.awt.image.renderable.RenderableImage")}
+ * </ul>
+ * A Java Print Service instance is allowed to support any other doc flavors (or
+ * none) in addition to the above mandatory ones, at the implementation's
  * choice.
- * <P>
+ * <p>
  * Support for the above doc flavors is desirable so a printing client can rely
  * on being able to print on any JPS printer, regardless of which doc flavors
  * the printer supports. If the printer doesn't support the client's preferred
  * doc flavor, the client can at least print plain text, or the client can
  * convert its data to a renderable image and print the image.
- * <P>
+ * <p>
  * Furthermore, every Java Print Service instance must fulfill these
  * requirements for processing plain text print data:
- * <UL>
- * <LI>
- * The character pair carriage return-line feed (CR-LF) means
- * "go to column 1 of the next line."
- * <LI>
- * A carriage return (CR) character standing by itself means
- * "go to column 1 of the next line."
- * <LI>
- * A line feed (LF) character standing by itself means
- * "go to column 1 of the next line."
- * </UL>
- * <P>
+ * <ul>
+ *   <li>The character pair carriage return-line feed (CR-LF) means "go to
+ *   column 1 of the next line."
+ *   <li>A carriage return (CR) character standing by itself means "go to column
+ *   1 of the next line."
+ *   <li>A line feed (LF) character standing by itself means "go to column 1 of
+ *   the next line."
+ * </ul>
  * The client must itself perform all plain text print data formatting not
  * addressed by the above requirements.
  *
- * <H3>Design Rationale</H3>
- * <P>
- * Class DocFlavor in package javax.print.data is similar to class
- * {@link java.awt.datatransfer.DataFlavor DataFlavor}. Class
- * {@code DataFlavor}
- * is not used in the Java Print Service (JPS) API
- * for three reasons which are all rooted in allowing the JPS API to be
- * shared by other print services APIs which may need to run on Java profiles
- * which do not include all of the Java Platform, Standard Edition.
- * <OL TYPE=1>
- * <LI>
- * The JPS API is designed to be used in Java profiles which do not support
- * AWT.
+ * <h3>Design Rationale</h3>
+ * Class {@code DocFlavor} in package {@code javax.print} is similar to class
+ * {@link java.awt.datatransfer.DataFlavor}. Class {@code DataFlavor} is not
+ * used in the Java Print Service (JPS) API for three reasons which are all
+ * rooted in allowing the JPS API to be shared by other print services APIs
+ * which may need to run on Java profiles which do not include all of the Java
+ * Platform, Standard Edition.
+ * <ol type=1>
+ *   <li>The JPS API is designed to be used in Java profiles which do not
+ *   support AWT.
+ *   <li>The implementation of class {@code java.awt.datatransfer.DataFlavor}
+ *   does not guarantee that equivalent data flavors will have the same
+ *   serialized representation. {@code DocFlavor} does, and can be used in
+ *   services which need this.
+ *   <li>The implementation of class {@code java.awt.datatransfer.DataFlavor}
+ *   includes a human presentable name as part of the serialized representation.
+ *   This is not appropriate as part of a service matching constraint.
+ * </ol>
+ * Class {@code DocFlavor}'s serialized representation uses the following
+ * canonical form of a MIME type string. Thus, two doc flavors with MIME types
+ * that are not identical but that are equivalent (that have the same canonical
+ * form) may be considered equal.
+ * <ul>
+ *   <li>The media type, media subtype, and parameters are retained, but all
+ *   comments and whitespace characters are discarded.
+ *   <li>The media type, media subtype, and parameter names are converted to
+ *   lowercase.
+ *   <li>The parameter values retain their original case, except a charset
+ *   parameter value for a text media type is converted to lowercase.
+ *   <li>Quote characters surrounding parameter values are removed.
+ *   <li>Quoting backslash characters inside parameter values are removed.
+ *   <li>The parameters are arranged in ascending order of parameter name.
+ * </ul>
+ * Class {@code DocFlavor}'s serialized representation also contains the
+ * fully-qualified class <i>name</i> of the representation class (a
+ * {@code String} object), rather than the representation class itself (a
+ * {@code Class} object). This allows a client to examine the doc flavors a Java
+ * Print Service instance supports without having to load the representation
+ * classes, which may be problematic for limited-resource clients.
  *
- * <LI>
- * The implementation of class {@code java.awt.datatransfer.DataFlavor}
- * does not guarantee that equivalent data flavors will have the same
- * serialized representation. DocFlavor does, and can be used in services
- * which need this.
- *
- * <LI>
- * The implementation of class {@code java.awt.datatransfer.DataFlavor}
- * includes a human presentable name as part of the serialized representation.
- * This is not appropriate as part of a service matching constraint.
- * </OL>
- * <P>
- * Class DocFlavor's serialized representation uses the following
- * canonical form of a MIME type string. Thus, two doc flavors with MIME types
- * that are not identical but that are equivalent (that have the same
- * canonical form) may be considered equal.
- * <UL>
- * <LI> The media type, media subtype, and parameters are retained, but all
- *      comments and whitespace characters are discarded.
- * <LI> The media type, media subtype, and parameter names are converted to
- *      lowercase.
- * <LI> The parameter values retain their original case, except a charset
- *      parameter value for a text media type is converted to lowercase.
- * <LI> Quote characters surrounding parameter values are removed.
- * <LI> Quoting backslash characters inside parameter values are removed.
- * <LI> The parameters are arranged in ascending order of parameter name.
- * </UL>
- * <P>
- * Class DocFlavor's serialized representation also contains the
- * fully-qualified class <I>name</I> of the representation class
- * (a String object), rather than the representation class itself
- * (a Class object). This allows a client to examine the doc flavors a
- * Java Print Service instance supports without having
- * to load the representation classes, which may be problematic for
- * limited-resource clients.
- *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public class DocFlavor implements Serializable, Cloneable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = -4512080796965449721L;
 
     /**
-     * A String representing the host operating system encoding.
-     * This will follow the conventions documented in
+     * A string representing the host operating system encoding. This will
+     * follow the conventions documented in
      * <a href="http://www.ietf.org/rfc/rfc2278.txt">
      * <i>RFC&nbsp;2278:&nbsp;IANA Charset Registration Procedures</i></a>
      * except where historical names are returned for compatibility with
-     * previous versions of the Java platform.
-     * The value returned from method is valid only for the VM which
-     * returns it, for use in a DocFlavor.
-     * This is the charset for all the "HOST" pre-defined DocFlavors in
+     * previous versions of the Java platform. The value returned from method is
+     * valid only for the VM which returns it, for use in a {@code DocFlavor}.
+     * This is the charset for all the "HOST" pre-defined {@code DocFlavors} in
      * the executing VM.
      */
     public static final String hostEncoding;
@@ -488,6 +417,7 @@
 
     /**
      * Representation class name.
+     *
      * @serial
      */
     private String myClassName;
@@ -497,21 +427,17 @@
      */
     private transient String myStringValue = null;
 
-
     /**
      * Constructs a new doc flavor object from the given MIME type and
      * representation class name. The given MIME type is converted into
      * canonical form and stored internally.
      *
-     * @param  mimeType   MIME media type string.
-     * @param  className  Fully-qualified representation class name.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code mimeType} is null or
-     *     {@code className} is null.
-     * @exception  IllegalArgumentException
-     *     (unchecked exception) Thrown if {@code mimeType} does not
-     *     obey the syntax for a MIME media type string.
+     * @param  mimeType MIME media type string
+     * @param  className fully-qualified representation class name
+     * @throws NullPointerException if {@code mimeType} or {@code className} is
+     *         {@code null}
+     * @throws IllegalArgumentException if {@code mimeType} does not obey the
+     *         syntax for a MIME media type string
      */
     public DocFlavor(String mimeType, String className) {
         if (className == null) {
@@ -522,8 +448,9 @@
     }
 
     /**
-     * Returns this doc flavor object's MIME type string based on the
-     * canonical form. Each parameter value is enclosed in quotes.
+     * Returns this doc flavor object's MIME type string based on the canonical
+     * form. Each parameter value is enclosed in quotes.
+     *
      * @return the mime type
      */
     public String getMimeType() {
@@ -532,6 +459,7 @@
 
     /**
      * Returns this doc flavor object's media type (from the MIME type).
+     *
      * @return the media type
      */
     public String getMediaType() {
@@ -540,6 +468,7 @@
 
     /**
      * Returns this doc flavor object's media subtype (from the MIME type).
+     *
      * @return the media sub-type
      */
     public String getMediaSubtype() {
@@ -547,19 +476,18 @@
     }
 
     /**
-     * Returns a {@code String} representing a MIME
-     * parameter.
-     * Mime types may include parameters which are usually optional.
-     * The charset for text types is a commonly useful example.
-     * This convenience method will return the value of the specified
-     * parameter if one was specified in the mime type for this flavor.
+     * Returns a {@code String} representing a MIME parameter. Mime types may
+     * include parameters which are usually optional. The charset for text types
+     * is a commonly useful example. This convenience method will return the
+     * value of the specified parameter if one was specified in the mime type
+     * for this flavor.
      *
-     * @param paramName the name of the paramater. This name is internally
-     * converted to the canonical lower case format before performing
-     * the match.
-     * @return String representing a mime parameter, or
-     * null if that parameter is not in the mime type string.
-     * @exception NullPointerException if paramName is null.
+     * @param  paramName the name of the parameter. This name is internally
+     *         converted to the canonical lower case format before performing
+     *         the match.
+     * @return a string representing a mime parameter, or {@code null} if that
+     *         parameter is not in the mime type string
+     * @throws NullPointerException if paramName is {@code null}
      */
     public String getParameter(String paramName) {
         return myMimeType.getParameterMap().get(paramName.toLowerCase());
@@ -567,7 +495,8 @@
 
     /**
      * Returns the name of this doc flavor object's representation class.
-     * @return the name of the representation class.
+     *
+     * @return the name of the representation class
      */
     public String getRepresentationClassName() {
         return myClassName;
@@ -576,10 +505,9 @@
     /**
      * Converts this {@code DocFlavor} to a string.
      *
-     * @return  MIME type string based on the canonical form. Each parameter
-     *          value is enclosed in quotes.
-     *          A "class=" parameter is appended to the
-     *          MIME type string to indicate the representation class name.
+     * @return MIME type string based on the canonical form. Each parameter
+     *         value is enclosed in quotes. A "class=" parameter is appended to
+     *         the MIME type string to indicate the representation class name.
      */
     public String toString() {
         return getStringValue();
@@ -593,22 +521,21 @@
     }
 
     /**
-     * Determines if this doc flavor object is equal to the given object.
-     * The two are equal if the given object is not null, is an instance
-     * of {@code DocFlavor}, has a MIME type equivalent to this doc
-     * flavor object's MIME type (that is, the MIME types have the same media
-     * type, media subtype, and parameters), and has the same representation
-     * class name as this doc flavor object. Thus, if two doc flavor objects'
-     * MIME types are the same except for comments, they are considered equal.
-     * However, two doc flavor objects with MIME types of "text/plain" and
-     * "text/plain; charset=US-ASCII" are not considered equal, even though
-     * they represent the same media type (because the default character
-     * set for plain text is US-ASCII).
+     * Determines if this doc flavor object is equal to the given object. The
+     * two are equal if the given object is not {@code null}, is an instance of
+     * {@code DocFlavor}, has a MIME type equivalent to this doc flavor object's
+     * MIME type (that is, the MIME types have the same media type, media
+     * subtype, and parameters), and has the same representation class name as
+     * this doc flavor object. Thus, if two doc flavor objects' MIME types are
+     * the same except for comments, they are considered equal. However, two doc
+     * flavor objects with MIME types of "text/plain" and "text/plain;
+     * charset=US-ASCII" are not considered equal, even though they represent
+     * the same media type (because the default character set for plain text is
+     * US-ASCII).
      *
-     * @param  obj  Object to test.
-     *
-     * @return  True if this doc flavor object equals {@code obj}, false
-     *          otherwise.
+     * @param  obj {@code Object} to test
+     * @return {@code true} if this doc flavor object equals {@code obj},
+     *         {@code false} otherwise
      */
     public boolean equals(Object obj) {
         return
@@ -619,6 +546,8 @@
 
     /**
      * Returns this doc flavor object's string value.
+     *
+     * @return the string value
      */
     private String getStringValue() {
         if (myStringValue == null) {
@@ -630,8 +559,9 @@
     /**
      * Write the instance to a stream (ie serialize the object).
      *
+     * @param  s the output stream
      * @throws IOException if I/O errors occur while writing to the underlying
-     * stream
+     *         stream
      */
     private void writeObject(ObjectOutputStream s) throws IOException {
 
@@ -642,14 +572,15 @@
     /**
      * Reconstitute an instance from a stream (that is, deserialize it).
      *
+     * @param  s the input stream
      * @throws ClassNotFoundException if the class of a serialized object could
-     * not be found.
+     *         not be found
      * @throws IOException if I/O errors occur while reading from the underlying
-     * stream
-     * @serialData
-     * The serialised form of a DocFlavor is the String naming the
-     * representation class followed by the String representing the canonical
-     * form of the mime type.
+     *         stream
+     * @serialData The serialised form of a {@code DocFlavor} is the
+     *             {@code String} naming the representation class followed by
+     *             the {@code String} representing the canonical form of the
+     *             mime type
      */
     private void readObject(ObjectInputStream s)
         throws ClassNotFoundException, IOException {
@@ -659,167 +590,140 @@
     }
 
     /**
-     * Class DocFlavor.BYTE_ARRAY provides predefined static constant
-     * DocFlavor objects for example doc flavors using a byte array
+     * Class {@code DocFlavor.BYTE_ARRAY} provides predefined static constant
+     * {@code DocFlavor} objects for example doc flavors using a byte array
      * ({@code byte[]}) as the print data representation class.
      *
-     * @author  Alan Kaminsky
+     * @author Alan Kaminsky
      */
     public static class BYTE_ARRAY extends DocFlavor {
 
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = -9065578006593857475L;
 
         /**
-         * Constructs a new doc flavor with the given MIME type and a print
-         * data representation class name of {@code "[B"} (byte array).
+         * Constructs a new doc flavor with the given MIME type and a print data
+         * representation class name of {@code "[B"} (byte array).
          *
-         * @param  mimeType   MIME media type string.
-         *
-         * @exception  NullPointerException
-         *     (unchecked exception) Thrown if {@code mimeType} is null.
-         * @exception  IllegalArgumentException
-         *     (unchecked exception) Thrown if {@code mimeType} does not
-         *     obey the syntax for a MIME media type string.
+         * @param  mimeType MIME media type string
+         * @throws NullPointerException if {@code mimeType} is {@code null}
+         * @throws IllegalArgumentException if {@code mimeType} does not obey
+         *         the syntax for a MIME media type string
          */
         public BYTE_ARRAY (String mimeType) {
             super (mimeType, "[B");
         }
 
         /**
-         * Doc flavor with MIME type = {@code "text/plain"},
-         * encoded in the host platform encoding.
-         * See {@link DocFlavor#hostEncoding hostEncoding}
-         * Print data representation class name =
-         * {@code "[B"} (byte array).
+         * Doc flavor with MIME type = {@code "text/plain"}, encoded in the host
+         * platform encoding. See {@link DocFlavor#hostEncoding hostEncoding}.
+         * Print data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_PLAIN_HOST =
             new BYTE_ARRAY ("text/plain; charset="+hostEncoding);
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-8"},
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-8"},
+         * print data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_PLAIN_UTF_8 =
             new BYTE_ARRAY ("text/plain; charset=utf-8");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-16"},
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-16"},
+         * print data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_PLAIN_UTF_16 =
             new BYTE_ARRAY ("text/plain; charset=utf-16");
 
-
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-16be"}
-         * (big-endian byte ordering),
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-16be"}
+         * (big-endian byte ordering), print data representation class name =
+         * {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_PLAIN_UTF_16BE =
             new BYTE_ARRAY ("text/plain; charset=utf-16be");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-16le"}
-         * (little-endian byte ordering),
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-16le"}
+         * (little-endian byte ordering), print data representation class name =
+         * {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_PLAIN_UTF_16LE =
             new BYTE_ARRAY ("text/plain; charset=utf-16le");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=us-ascii"},
-         * print data representation class name =
-         * {@code "[B"} (byte array).
+         * Doc flavor with MIME type = {@code "text/plain; charset=us-ascii"},
+         * print data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_PLAIN_US_ASCII =
             new BYTE_ARRAY ("text/plain; charset=us-ascii");
 
 
         /**
-         * Doc flavor with MIME type = {@code "text/html"},
-         * encoded in the host platform encoding.
-         * See {@link DocFlavor#hostEncoding hostEncoding}
-         * Print data representation class name =
-         * {@code "[B"} (byte array).
+         * Doc flavor with MIME type = {@code "text/html"}, encoded in the host
+         * platform encoding. See {@link DocFlavor#hostEncoding hostEncoding}.
+         * Print data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_HTML_HOST =
             new BYTE_ARRAY ("text/html; charset="+hostEncoding);
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-8"},
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-8"}, print
+         * data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_HTML_UTF_8 =
             new BYTE_ARRAY ("text/html; charset=utf-8");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-16"},
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-16"},
+         * print data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_HTML_UTF_16 =
             new BYTE_ARRAY ("text/html; charset=utf-16");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-16be"}
-         * (big-endian byte ordering),
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-16be"}
+         * (big-endian byte ordering), print data representation class name =
+         * {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_HTML_UTF_16BE =
             new BYTE_ARRAY ("text/html; charset=utf-16be");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-16le"}
-         * (little-endian byte ordering),
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-16le"}
+         * (little-endian byte ordering), print data representation class name =
+         * {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_HTML_UTF_16LE =
             new BYTE_ARRAY ("text/html; charset=utf-16le");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=us-ascii"},
-         * print data representation class name =
-         * {@code "[B"} (byte array).
+         * Doc flavor with MIME type = {@code "text/html; charset=us-ascii"},
+         * print data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY TEXT_HTML_US_ASCII =
             new BYTE_ARRAY ("text/html; charset=us-ascii");
 
 
         /**
-         * Doc flavor with MIME type = {@code "application/pdf"}, print
-         * data representation class name = {@code "[B"} (byte array).
+         * Doc flavor with MIME type = {@code "application/pdf"}, print data
+         * representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY PDF = new BYTE_ARRAY ("application/pdf");
 
         /**
-         * Doc flavor with MIME type = {@code "application/postscript"},
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "application/postscript"}, print
+         * data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY POSTSCRIPT =
             new BYTE_ARRAY ("application/postscript");
 
         /**
-         * Doc flavor with MIME type = {@code "application/vnd.hp-PCL"},
-         * print data representation class name = {@code "[B"} (byte
-         * array).
+         * Doc flavor with MIME type = {@code "application/vnd.hp-PCL"}, print
+         * data representation class name = {@code "[B"} (byte array).
          */
         public static final BYTE_ARRAY PCL =
             new BYTE_ARRAY ("application/vnd.hp-PCL");
@@ -843,376 +747,337 @@
         public static final BYTE_ARRAY PNG = new BYTE_ARRAY ("image/png");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "application/octet-stream"},
-         * print data representation class name = {@code "[B"} (byte
-         * array). The client must determine that data described
-         * using this DocFlavor is valid for the printer.
+         * Doc flavor with MIME type = {@code "application/octet-stream"}, print
+         * data representation class name = {@code "[B"} (byte array). The
+         * client must determine that data described using this
+         * {@code DocFlavor} is valid for the printer.
          */
         public static final BYTE_ARRAY AUTOSENSE =
             new BYTE_ARRAY ("application/octet-stream");
-
     }
 
     /**
-     * Class DocFlavor.INPUT_STREAM provides predefined static constant
-     * DocFlavor objects for example doc flavors using a byte stream ({@link
-     * java.io.InputStream java.io.InputStream}) as the print
-     * data representation class.
+     * Class {@code DocFlavor.INPUT_STREAM} provides predefined static constant
+     * {@code DocFlavor} objects for example doc flavors using a byte stream
+     * ({@link java.io.InputStream java.io.InputStream}) as the print data
+     * representation class.
      *
-     * @author  Alan Kaminsky
+     * @author Alan Kaminsky
      */
     public static class INPUT_STREAM extends DocFlavor {
 
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = -7045842700749194127L;
 
         /**
-         * Constructs a new doc flavor with the given MIME type and a print
-         * data representation class name of
-         * {@code "java.io.InputStream"} (byte stream).
+         * Constructs a new doc flavor with the given MIME type and a print data
+         * representation class name of {@code "java.io.InputStream"} (byte
+         * stream).
          *
-         * @param  mimeType   MIME media type string.
-         *
-         * @exception  NullPointerException
-         *     (unchecked exception) Thrown if {@code mimeType} is null.
-         * @exception  IllegalArgumentException
-         *     (unchecked exception) Thrown if {@code mimeType} does not
-         *     obey the syntax for a MIME media type string.
+         * @param  mimeType MIME media type string
+         * @throws NullPointerException if {@code mimeType} is {@code null}
+         * @throws IllegalArgumentException if {@code mimeType} does not obey
+         *         the syntax for a MIME media type string.
          */
         public INPUT_STREAM (String mimeType) {
             super (mimeType, "java.io.InputStream");
         }
 
         /**
-         * Doc flavor with MIME type = {@code "text/plain"},
-         * encoded in the host platform encoding.
-         * See {@link DocFlavor#hostEncoding hostEncoding}
-         * Print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/plain"}, encoded in the host
+         * platform encoding. See {@link DocFlavor#hostEncoding hostEncoding}.
+         * Print data representation class name = {@code "java.io.InputStream"}
+         * (byte stream).
          */
         public static final INPUT_STREAM TEXT_PLAIN_HOST =
             new INPUT_STREAM ("text/plain; charset="+hostEncoding);
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-8"},
-         * print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-8"},
+         * print data representation class name = {@code "java.io.InputStream"}
+         * (byte stream).
          */
         public static final INPUT_STREAM TEXT_PLAIN_UTF_8 =
             new INPUT_STREAM ("text/plain; charset=utf-8");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-16"},
-         * print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-16"},
+         * print data representation class name = {@code "java.io.InputStream"}
+         * (byte stream).
          */
         public static final INPUT_STREAM TEXT_PLAIN_UTF_16 =
             new INPUT_STREAM ("text/plain; charset=utf-16");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-16be"}
-         * (big-endian byte ordering),
-         * print data representation class name =
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-16be"}
+         * (big-endian byte ordering), print data representation class name =
          * {@code "java.io.InputStream"} (byte stream).
          */
         public static final INPUT_STREAM TEXT_PLAIN_UTF_16BE =
             new INPUT_STREAM ("text/plain; charset=utf-16be");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-16le"}
-         * (little-endian byte ordering),
-         * print data representation class name =
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-16le"}
+         * (little-endian byte ordering), print data representation class name =
          * {@code "java.io.InputStream"} (byte stream).
          */
         public static final INPUT_STREAM TEXT_PLAIN_UTF_16LE =
             new INPUT_STREAM ("text/plain; charset=utf-16le");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=us-ascii"},
-         * print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/plain; charset=us-ascii"},
+         * print data representation class name = {@code "java.io.InputStream"}
+         * (byte stream).
          */
         public static final INPUT_STREAM TEXT_PLAIN_US_ASCII =
                 new INPUT_STREAM ("text/plain; charset=us-ascii");
 
         /**
-         * Doc flavor with MIME type = {@code "text/html"},
-         * encoded in the host platform encoding.
-         * See {@link DocFlavor#hostEncoding hostEncoding}
-         * Print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/html"}, encoded in the host
+         * platform encoding. See {@link DocFlavor#hostEncoding hostEncoding}.
+         * Print data representation class name = {@code "java.io.InputStream"}
+         * (byte stream).
          */
         public static final INPUT_STREAM TEXT_HTML_HOST =
             new INPUT_STREAM ("text/html; charset="+hostEncoding);
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-8"},
-         * print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-8"}, print
+         * data representation class name = {@code "java.io.InputStream"} (byte
+         * stream).
          */
         public static final INPUT_STREAM TEXT_HTML_UTF_8 =
             new INPUT_STREAM ("text/html; charset=utf-8");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-16"},
-         * print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-16"},
+         * print data representation class name = {@code "java.io.InputStream"}
+         * (byte stream).
          */
         public static final INPUT_STREAM TEXT_HTML_UTF_16 =
             new INPUT_STREAM ("text/html; charset=utf-16");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-16be"}
-         * (big-endian byte ordering),
-         * print data representation class name =
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-16be"}
+         * (big-endian byte ordering), print data representation class name =
          * {@code "java.io.InputStream"} (byte stream).
          */
         public static final INPUT_STREAM TEXT_HTML_UTF_16BE =
             new INPUT_STREAM ("text/html; charset=utf-16be");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-16le"}
-         * (little-endian byte ordering),
-         * print data representation class name =
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-16le"}
+         * (little-endian byte ordering), print data representation class name =
          * {@code "java.io.InputStream"} (byte stream).
          */
         public static final INPUT_STREAM TEXT_HTML_UTF_16LE =
             new INPUT_STREAM ("text/html; charset=utf-16le");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=us-ascii"},
-         * print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/html; charset=us-ascii"},
+         * print data representation class name = {@code "java.io.InputStream"}
+         * (byte stream).
          */
         public static final INPUT_STREAM TEXT_HTML_US_ASCII =
             new INPUT_STREAM ("text/html; charset=us-ascii");
 
-
         /**
-         * Doc flavor with MIME type = {@code "application/pdf"}, print
-         * data representation class name = {@code "java.io.InputStream"}
-         * (byte stream).
+         * Doc flavor with MIME type = {@code "application/pdf"}, print data
+         * representation class name = {@code "java.io.InputStream"} (byte
+         * stream).
          */
         public static final INPUT_STREAM PDF = new INPUT_STREAM ("application/pdf");
 
         /**
-         * Doc flavor with MIME type = {@code "application/postscript"},
-         * print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "application/postscript"}, print
+         * data representation class name = {@code "java.io.InputStream"} (byte
+         * stream).
          */
         public static final INPUT_STREAM POSTSCRIPT =
             new INPUT_STREAM ("application/postscript");
 
         /**
-         * Doc flavor with MIME type = {@code "application/vnd.hp-PCL"},
-         * print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * Doc flavor with MIME type = {@code "application/vnd.hp-PCL"}, print
+         * data representation class name = {@code "java.io.InputStream"} (byte
+         * stream).
          */
         public static final INPUT_STREAM PCL =
             new INPUT_STREAM ("application/vnd.hp-PCL");
 
         /**
          * Doc flavor with MIME type = {@code "image/gif"}, print data
-         * representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * representation class name = {@code "java.io.InputStream"} (byte
+         * stream).
          */
         public static final INPUT_STREAM GIF = new INPUT_STREAM ("image/gif");
 
         /**
          * Doc flavor with MIME type = {@code "image/jpeg"}, print data
-         * representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * representation class name = {@code "java.io.InputStream"} (byte
+         * stream).
          */
         public static final INPUT_STREAM JPEG = new INPUT_STREAM ("image/jpeg");
 
         /**
          * Doc flavor with MIME type = {@code "image/png"}, print data
-         * representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
+         * representation class name = {@code "java.io.InputStream"} (byte
+         * stream).
          */
         public static final INPUT_STREAM PNG = new INPUT_STREAM ("image/png");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "application/octet-stream"},
-         * print data representation class name =
-         * {@code "java.io.InputStream"} (byte stream).
-         * The client must determine that data described
-         * using this DocFlavor is valid for the printer.
+         * Doc flavor with MIME type = {@code "application/octet-stream"}, print
+         * data representation class name = {@code "java.io.InputStream"} (byte
+         * stream). The client must determine that data described using this
+         * {@code DocFlavor} is valid for the printer.
          */
         public static final INPUT_STREAM AUTOSENSE =
             new INPUT_STREAM ("application/octet-stream");
-
     }
 
     /**
-     * Class DocFlavor.URL provides predefined static constant DocFlavor
-     * objects.
-     * For example doc flavors using a Uniform Resource Locator ({@link
-     * java.net.URL java.net.URL}) as the print data
+     * Class {@code DocFlavor.URL} provides predefined static constant
+     * {@code DocFlavor} objects. For example doc flavors using a Uniform
+     * Resource Locator ({@link java.net.URL java.net.URL}) as the print data
      * representation class.
      *
-     * @author  Alan Kaminsky
+     * @author Alan Kaminsky
      */
     public static class URL extends DocFlavor {
+
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = 2936725788144902062L;
 
         /**
-         * Constructs a new doc flavor with the given MIME type and a print
-         * data representation class name of {@code "java.net.URL"}.
+         * Constructs a new doc flavor with the given MIME type and a print data
+         * representation class name of {@code "java.net.URL"}.
          *
-         * @param  mimeType   MIME media type string.
-         *
-         * @exception  NullPointerException
-         *     (unchecked exception) Thrown if {@code mimeType} is null.
-         * @exception  IllegalArgumentException
-         *     (unchecked exception) Thrown if {@code mimeType} does not
-         *     obey the syntax for a MIME media type string.
+         * @param  mimeType MIME media type string
+         * @throws NullPointerException if {@code mimeType} is {@code null}
+         * @throws IllegalArgumentException if {@code mimeType} does not obey
+         *         the syntax for a MIME media type string
          */
         public URL (String mimeType) {
             super (mimeType, "java.net.URL");
         }
 
         /**
-         * Doc flavor with MIME type = {@code "text/plain"},
-         * encoded in the host platform encoding.
-         * See {@link DocFlavor#hostEncoding hostEncoding}
-         * Print data representation class name =
-         * {@code "java.net.URL"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/plain"}, encoded in the host
+         * platform encoding. See {@link DocFlavor#hostEncoding hostEncoding}.
+         * Print data representation class name = {@code "java.net.URL"} (byte
+         * stream).
          */
         public static final URL TEXT_PLAIN_HOST =
             new URL ("text/plain; charset="+hostEncoding);
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-8"},
-         * print data representation class name =
-         * {@code "java.net.URL"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-8"},
+         * print data representation class name = {@code "java.net.URL"} (byte
+         * stream).
          */
         public static final URL TEXT_PLAIN_UTF_8 =
             new URL ("text/plain; charset=utf-8");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-16"},
-         * print data representation class name =
-         * {@code java.net.URL""} (byte stream).
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-16"},
+         * print data representation class name = {@code java.net.URL""} (byte
+         * stream).
          */
         public static final URL TEXT_PLAIN_UTF_16 =
             new URL ("text/plain; charset=utf-16");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-16be"}
-         * (big-endian byte ordering),
-         * print data representation class name =
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-16be"}
+         * (big-endian byte ordering), print data representation class name =
          * {@code "java.net.URL"} (byte stream).
          */
         public static final URL TEXT_PLAIN_UTF_16BE =
             new URL ("text/plain; charset=utf-16be");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=utf-16le"}
-         * (little-endian byte ordering),
-         * print data representation class name =
+         * Doc flavor with MIME type = {@code "text/plain; charset=utf-16le"}
+         * (little-endian byte ordering), print data representation class name =
          * {@code "java.net.URL"} (byte stream).
          */
         public static final URL TEXT_PLAIN_UTF_16LE =
             new URL ("text/plain; charset=utf-16le");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/plain; charset=us-ascii"},
-         * print data representation class name =
-         * {@code "java.net.URL"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/plain; charset=us-ascii"},
+         * print data representation class name = {@code "java.net.URL"} (byte
+         * stream).
          */
         public static final URL TEXT_PLAIN_US_ASCII =
             new URL ("text/plain; charset=us-ascii");
 
         /**
-         * Doc flavor with MIME type = {@code "text/html"},
-         * encoded in the host platform encoding.
-         * See {@link DocFlavor#hostEncoding hostEncoding}
-         * Print data representation class name =
-         * {@code "java.net.URL"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/html"}, encoded in the host
+         * platform encoding. See {@link DocFlavor#hostEncoding hostEncoding}.
+         * Print data representation class name = {@code "java.net.URL"} (byte
+         * stream).
          */
         public static final URL TEXT_HTML_HOST =
             new URL ("text/html; charset="+hostEncoding);
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-8"},
-         * print data representation class name =
-         * {@code "java.net.URL"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-8"}, print
+         * data representation class name = {@code "java.net.URL"} (byte
+         * stream).
          */
         public static final URL TEXT_HTML_UTF_8 =
             new URL ("text/html; charset=utf-8");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-16"},
-         * print data representation class name =
-         * {@code "java.net.URL"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-16"},
+         * print data representation class name = {@code "java.net.URL"} (byte
+         * stream).
          */
         public static final URL TEXT_HTML_UTF_16 =
             new URL ("text/html; charset=utf-16");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-16be"}
-         * (big-endian byte ordering),
-         * print data representation class name =
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-16be"}
+         * (big-endian byte ordering), print data representation class name =
          * {@code "java.net.URL"} (byte stream).
          */
         public static final URL TEXT_HTML_UTF_16BE =
             new URL ("text/html; charset=utf-16be");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=utf-16le"}
-         * (little-endian byte ordering),
-         * print data representation class name =
+         * Doc flavor with MIME type = {@code "text/html; charset=utf-16le"}
+         * (little-endian byte ordering), print data representation class name =
          * {@code "java.net.URL"} (byte stream).
          */
         public static final URL TEXT_HTML_UTF_16LE =
             new URL ("text/html; charset=utf-16le");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "text/html; charset=us-ascii"},
-         * print data representation class name =
-         * {@code "java.net.URL"} (byte stream).
+         * Doc flavor with MIME type = {@code "text/html; charset=us-ascii"},
+         * print data representation class name = {@code "java.net.URL"} (byte
+         * stream).
          */
         public static final URL TEXT_HTML_US_ASCII =
             new URL ("text/html; charset=us-ascii");
 
-
         /**
-         * Doc flavor with MIME type = {@code "application/pdf"}, print
-         * data representation class name = {@code "java.net.URL"}.
+         * Doc flavor with MIME type = {@code "application/pdf"}, print data
+         * representation class name = {@code "java.net.URL"}.
          */
         public static final URL PDF = new URL ("application/pdf");
 
         /**
-         * Doc flavor with MIME type = {@code "application/postscript"},
-         * print data representation class name = {@code "java.net.URL"}.
+         * Doc flavor with MIME type = {@code "application/postscript"}, print
+         * data representation class name = {@code "java.net.URL"}.
          */
         public static final URL POSTSCRIPT = new URL ("application/postscript");
 
         /**
-         * Doc flavor with MIME type = {@code "application/vnd.hp-PCL"},
-         * print data representation class name = {@code "java.net.URL"}.
+         * Doc flavor with MIME type = {@code "application/vnd.hp-PCL"}, print
+         * data representation class name = {@code "java.net.URL"}.
          */
         public static final URL PCL = new URL ("application/vnd.hp-PCL");
 
@@ -1235,42 +1100,39 @@
         public static final URL PNG = new URL ("image/png");
 
         /**
-         * Doc flavor with MIME type =
-         * {@code "application/octet-stream"},
-         * print data representation class name = {@code "java.net.URL"}.
-         *  The client must determine that data described
-         * using this DocFlavor is valid for the printer.
+         * Doc flavor with MIME type = {@code "application/octet-stream"}, print
+         * data representation class name = {@code "java.net.URL"}. The client
+         * must determine that data described using this {@code DocFlavor} is
+         * valid for the printer.
          */
         public static final URL AUTOSENSE = new URL ("application/octet-stream");
-
     }
 
     /**
-     * Class DocFlavor.CHAR_ARRAY provides predefined static constant
-     * DocFlavor objects for example doc flavors using a character array
-     * ({@code char[]}) as the print data representation class. As such,
-     * the character set is Unicode.
+     * Class {@code DocFlavor.CHAR_ARRAY} provides predefined static constant
+     * {@code DocFlavor} objects for example doc flavors using a character array
+     * ({@code char[]}) as the print data representation class. As such, the
+     * character set is Unicode.
      *
-     * @author  Alan Kaminsky
+     * @author Alan Kaminsky
      */
     public static class CHAR_ARRAY extends DocFlavor {
 
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = -8720590903724405128L;
 
         /**
-         * Constructs a new doc flavor with the given MIME type and a print
-         * data representation class name of
-         * {@code "[C"} (character array).
+         * Constructs a new doc flavor with the given MIME type and a print data
+         * representation class name of {@code "[C"} (character array).
          *
-         * @param  mimeType  MIME media type string. If it is a text media
-         *                      type, it is assumed to contain a
-         *                      {@code "charset=utf-16"} parameter.
-         *
-         * @exception  NullPointerException
-         *     (unchecked exception) Thrown if {@code mimeType} is null.
-         * @exception  IllegalArgumentException
-         *     (unchecked exception) Thrown if {@code mimeType} does not
-         *     obey the syntax for a MIME media type string.
+         * @param  mimeType MIME media type string. If it is a text media type,
+         *         it is assumed to contain a {@code "charset=utf-16"}
+         *         parameter.
+         * @throws NullPointerException if {@code mimeType} is {@code null}
+         * @throws IllegalArgumentException if {@code mimeType} does not obey
+         *         the syntax for a MIME media type string
          */
         public CHAR_ARRAY (String mimeType) {
             super (mimeType, "[C");
@@ -1278,47 +1140,46 @@
 
         /**
          * Doc flavor with MIME type = {@code "text/plain; charset=utf-16"},
-         * print data representation class name =
-         * {@code "[C"} (character array).
+         * print data representation class name = {@code "[C"} (character
+         * array).
          */
         public static final CHAR_ARRAY TEXT_PLAIN =
             new CHAR_ARRAY ("text/plain; charset=utf-16");
 
         /**
          * Doc flavor with MIME type = {@code "text/html; charset=utf-16"},
-         * print data representation class name =
-         * {@code "[C"} (character array).
+         * print data representation class name = {@code "[C"} (character
+         * array).
          */
         public static final CHAR_ARRAY TEXT_HTML =
             new CHAR_ARRAY ("text/html; charset=utf-16");
-
     }
 
     /**
-     * Class DocFlavor.STRING provides predefined static constant DocFlavor
-     * objects for example doc flavors using a string ({@link java.lang.String
-     * java.lang.String}) as the print data representation class.
+     * Class {@code DocFlavor.STRING} provides predefined static constant
+     * {@code DocFlavor} objects for example doc flavors using a string
+     * ({@link String java.lang.String}) as the print data representation class.
      * As such, the character set is Unicode.
      *
-     * @author  Alan Kaminsky
+     * @author Alan Kaminsky
      */
     public static class STRING extends DocFlavor {
 
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = 4414407504887034035L;
 
         /**
-         * Constructs a new doc flavor with the given MIME type and a print
-         * data representation class name of {@code "java.lang.String"}.
+         * Constructs a new doc flavor with the given MIME type and a print data
+         * representation class name of {@code "java.lang.String"}.
          *
-         * @param  mimeType  MIME media type string. If it is a text media
-         *                      type, it is assumed to contain a
-         *                      {@code "charset=utf-16"} parameter.
-         *
-         * @exception  NullPointerException
-         *     (unchecked exception) Thrown if {@code mimeType} is null.
-         * @exception  IllegalArgumentException
-         *     (unchecked exception) Thrown if {@code mimeType} does not
-         *     obey the syntax for a MIME media type string.
+         * @param  mimeType MIME media type string. If it is a text media type,
+         *         it is assumed to contain a {@code "charset=utf-16"}
+         *         parameter.
+         * @throws NullPointerException if {@code mimeType} is {@code null}
+         * @throws IllegalArgumentException if {@code mimeType} does not obey
+         *         the syntax for a MIME media type string
          */
         public STRING (String mimeType) {
             super (mimeType, "java.lang.String");
@@ -1326,47 +1187,45 @@
 
         /**
          * Doc flavor with MIME type = {@code "text/plain; charset=utf-16"},
-         * print data representation class name =
-         * {@code "java.lang.String"}.
+         * print data representation class name = {@code "java.lang.String"}.
          */
         public static final STRING TEXT_PLAIN =
             new STRING ("text/plain; charset=utf-16");
 
         /**
          * Doc flavor with MIME type = {@code "text/html; charset=utf-16"},
-         * print data representation class name =
-         * {@code "java.lang.String"}.
+         * print data representation class name = {@code "java.lang.String"}.
          */
         public static final STRING TEXT_HTML =
             new STRING ("text/html; charset=utf-16");
     }
 
     /**
-     * Class DocFlavor.READER provides predefined static constant DocFlavor
-     * objects for example doc flavors using a character stream ({@link
-     * java.io.Reader java.io.Reader}) as the print data
+     * Class {@code DocFlavor.READER} provides predefined static constant
+     * {@code DocFlavor} objects for example doc flavors using a character
+     * stream ({@link java.io.Reader java.io.Reader}) as the print data
      * representation class. As such, the character set is Unicode.
      *
-     * @author  Alan Kaminsky
+     * @author Alan Kaminsky
      */
     public static class READER extends DocFlavor {
 
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = 7100295812579351567L;
 
         /**
-         * Constructs a new doc flavor with the given MIME type and a print
-         * data representation class name of\
-         * {@code "java.io.Reader"} (character stream).
+         * Constructs a new doc flavor with the given MIME type and a print data
+         * representation class name of {@code "java.io.Reader"} (character
+         * stream).
          *
-         * @param  mimeType  MIME media type string. If it is a text media
-         *                      type, it is assumed to contain a
-         *                      {@code "charset=utf-16"} parameter.
-         *
-         * @exception  NullPointerException
-         *     (unchecked exception) Thrown if {@code mimeType} is null.
-         * @exception  IllegalArgumentException
-         *     (unchecked exception) Thrown if {@code mimeType} does not
-         *     obey the syntax for a MIME media type string.
+         * @param  mimeType MIME media type string. If it is a text media type,
+         *         it is assumed to contain a {@code "charset=utf-16"}
+         *         parameter.
+         * @throws NullPointerException if {@code mimeType} is {@code null}
+         * @throws IllegalArgumentException if {@code mimeType} does not obey
+         *         the syntax for a MIME media type string
          */
         public READER (String mimeType) {
             super (mimeType, "java.io.Reader");
@@ -1374,16 +1233,16 @@
 
         /**
          * Doc flavor with MIME type = {@code "text/plain; charset=utf-16"},
-         * print data representation class name =
-         * {@code "java.io.Reader"} (character stream).
+         * print data representation class name = {@code "java.io.Reader"}
+         * (character stream).
          */
         public static final READER TEXT_PLAIN =
             new READER ("text/plain; charset=utf-16");
 
         /**
          * Doc flavor with MIME type = {@code "text/html; charset=utf-16"},
-         * print data representation class name =
-         * {@code "java.io.Reader"} (character stream).
+         * print data representation class name = {@code "java.io.Reader"}
+         * (character stream).
          */
         public static final READER TEXT_HTML =
             new READER ("text/html; charset=utf-16");
@@ -1391,27 +1250,27 @@
     }
 
     /**
-     * Class DocFlavor.SERVICE_FORMATTED provides predefined static constant
-     * DocFlavor objects for example doc flavors for service formatted print
-     * data.
+     * Class {@code DocFlavor.SERVICE_FORMATTED} provides predefined static
+     * constant {@code DocFlavor} objects for example doc flavors for service
+     * formatted print data.
      *
-     * @author  Alan Kaminsky
+     * @author Alan Kaminsky
      */
     public static class SERVICE_FORMATTED extends DocFlavor {
 
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = 6181337766266637256L;
 
         /**
          * Constructs a new doc flavor with a MIME type of
-         * {@code "application/x-java-jvm-local-objectref"} indicating
-         * service formatted print data and the given print data
-         * representation class name.
+         * {@code "application/x-java-jvm-local-objectref"} indicating service
+         * formatted print data and the given print data representation class
+         * name.
          *
-         * @param  className  Fully-qualified representation class name.
-         *
-         * @exception  NullPointerException
-         *     (unchecked exception) Thrown if {@code className} is
-         *     null.
+         * @param  className fully-qualified representation class name
+         * @throws NullPointerException if {@code className} is {@code null}
          */
         public SERVICE_FORMATTED (String className) {
             super ("application/x-java-jvm-local-objectref", className);
@@ -1420,8 +1279,8 @@
         /**
          * Service formatted print data doc flavor with print data
          * representation class name =
-         * {@code "java.awt.image.renderable.RenderableImage"}
-         * (renderable image object).
+         * {@code "java.awt.image.renderable.RenderableImage"} (renderable image
+         * object).
          */
         public static final SERVICE_FORMATTED RENDERABLE_IMAGE =
             new SERVICE_FORMATTED("java.awt.image.renderable.RenderableImage");
@@ -1443,5 +1302,4 @@
             new SERVICE_FORMATTED ("java.awt.print.Pageable");
 
         }
-
 }
--- a/src/java.desktop/share/classes/javax/print/DocPrintJob.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/DocPrintJob.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -29,146 +29,132 @@
 import javax.print.attribute.PrintRequestAttributeSet;
 import javax.print.event.PrintJobAttributeListener;
 import javax.print.event.PrintJobListener;
-import javax.print.PrintException;
 
 /**
- *
- * This interface represents a print job that can print a specified
- * document with a set of job attributes.  An object implementing
- * this interface is obtained from a print service.
- *
+ * This interface represents a print job that can print a specified document
+ * with a set of job attributes. An object implementing this interface is
+ * obtained from a print service.
  */
-
 public interface DocPrintJob {
 
     /**
-     * Determines the {@link PrintService} object to which this print job
-     * object is bound.
+     * Determines the {@link PrintService} object to which this print job object
+     * is bound.
      *
-     * @return  {@code PrintService} object.
-     *
+     * @return {@code PrintService} object
      */
     public PrintService getPrintService();
 
     /**
-     * Obtains this Print Job's set of printing attributes.
-     * The returned attribute set object is unmodifiable.
-     * The returned attribute set object is a "snapshot" of this Print Job's
-     * attribute set at the time of the {@link #getAttributes()} method
-     * call; that is, the returned attribute set's object's contents will
-     * not be updated if this Print Job's attribute set's contents change
-     * in the future. To detect changes in attribute values, call
-     * {@code getAttributes()} again and compare the new attribute
-     * set to the previous attribute set; alternatively, register a
-     * listener for print job events.
-     * The returned value may be an empty set but should not be null.
+     * Obtains this Print Job's set of printing attributes. The returned
+     * attribute set object is unmodifiable. The returned attribute set object
+     * is a "snapshot" of this Print Job's attribute set at the time of the
+     * {@code getAttributes()} method call; that is, the returned attribute
+     * set's object's contents will not be updated if this Print Job's attribute
+     * set's contents change in the future. To detect changes in attribute
+     * values, call {@code getAttributes()} again and compare the new attribute
+     * set to the previous attribute set; alternatively, register a listener for
+     * print job events. The returned value may be an empty set but should not
+     * be {@code null}.
+     *
      * @return the print job attributes
      */
      public PrintJobAttributeSet getAttributes();
 
     /**
-     * Registers a listener for event occurring during this print job.
-     * If listener is null, no exception is thrown and no action is
-     * performed.
-     * If listener is already registered, it will be registered again.
+     * Registers a listener for event occurring during this print job. If
+     * listener is {@code null}, no exception is thrown and no action is
+     * performed. If listener is already registered, it will be registered
+     * again.
+     *
+     * @param  listener the object implementing the listener interface
      * @see #removePrintJobListener
-     *
-     * @param listener  The object implementing the listener interface
-     *
      */
     public void addPrintJobListener(PrintJobListener listener);
 
     /**
-     * Removes a listener from this print job.
-     * This method performs no function, nor does it throw an exception,
-     * if the listener specified by the argument was not previously added
-     * to this component. If listener is null, no exception is thrown and
-     * no action is performed. If a listener was registered more than once
-     * only one of the registrations will be removed.
+     * Removes a listener from this print job. This method performs no function,
+     * nor does it throw an exception, if the listener specified by the argument
+     * was not previously added to this print job. If listener is {@code null},
+     * no exception is thrown and no action is performed. If a listener was
+     * registered more than once only one of the registrations will be removed.
+     *
+     * @param  listener the object implementing the listener interface
      * @see #addPrintJobListener
-     *
-     * @param listener  The object implementing the listener interface
      */
     public void removePrintJobListener(PrintJobListener listener);
 
     /**
-     * Registers a listener for changes in the specified attributes.
-     * If listener is null, no exception is thrown and no action is
-     * performed.
-     * To determine the attribute updates that may be reported by this job,
-     * a client can call {@code getAttributes()} and identify the
-     * subset that are interesting and likely to be reported to the
-     * listener. Clients expecting to be updated about changes in a
-     * specific job attribute should verify it is in that set, but
-     * updates about an attribute will be made only if it changes and this
-     * is detected by the job. Also updates may be subject to batching
-     * by the job. To minimize overhead in print job processing it is
-     * recommended to listen on only that subset of attributes which
-     * are likely to change.
-     * If the specified set is empty no attribute updates will be reported
-     * to the listener.
-     * If the attribute set is null, then this means to listen on all
-     * dynamic attributes that the job supports. This may result in no
-     * update notifications if a job can not report any attribute updates.
+     * Registers a listener for changes in the specified attributes. If listener
+     * is {@code null}, no exception is thrown and no action is performed. To
+     * determine the attribute updates that may be reported by this job, a
+     * client can call {@code getAttributes()} and identify the subset that are
+     * interesting and likely to be reported to the listener. Clients expecting
+     * to be updated about changes in a specific job attribute should verify it
+     * is in that set, but updates about an attribute will be made only if it
+     * changes and this is detected by the job. Also updates may be subject to
+     * batching by the job. To minimize overhead in print job processing it is
+     * recommended to listen on only that subset of attributes which are likely
+     * to change. If the specified set is empty no attribute updates will be
+     * reported to the listener. If the attribute set is {@code null}, then this
+     * means to listen on all dynamic attributes that the job supports. This may
+     * result in no update notifications if a job can not report any attribute
+     * updates.
+     * <p>
+     * If listener is already registered, it will be registered again.
      *
-     * If listener is already registered, it will be registered again.
+     * @param  listener the object implementing the listener interface
+     * @param  attributes the attributes to listen on, or {@code null} to mean
+     *         all attributes that can change, as determined by the job
      * @see #removePrintJobAttributeListener
-     *
-     * @param listener  The object implementing the listener interface
-     * @param attributes The attributes to listen on, or null to mean
-     * all attributes that can change, as determined by the job.
      */
     public void addPrintJobAttributeListener(
                                   PrintJobAttributeListener listener,
                                   PrintJobAttributeSet attributes);
 
     /**
-     * Removes an attribute listener from this print job.
-     * This method performs no function, nor does it throw an exception,
-     * if the listener specified by the argument was not previously added
-     * to this component. If the listener is null, no exception is thrown
-     * and no action is performed.
-     * If a listener is registered more than once, even for a different
-     * set of attributes, no guarantee is made which listener is removed.
+     * Removes an attribute listener from this print job. This method performs
+     * no function, nor does it throw an exception, if the listener specified by
+     * the argument was not previously added to this print job. If the listener
+     * is {@code null}, no exception is thrown and no action is performed. If a
+     * listener is registered more than once, even for a different set of
+     * attributes, no guarantee is made which listener is removed.
+     *
+     * @param  listener the object implementing the listener interface
      * @see #addPrintJobAttributeListener
-     *
-     * @param listener  The object implementing the listener interface
-     *
      */
     public void removePrintJobAttributeListener(
                                       PrintJobAttributeListener listener);
 
     /**
-     * Prints a document with the specified job attributes.
-     * This method should only be called once for a given print job.
-     * Calling it again will not result in a new job being spooled to
-     * the printer. The service implementation will define policy
-     * for service interruption and recovery.
+     * Prints a document with the specified job attributes. This method should
+     * only be called once for a given print job. Calling it again will not
+     * result in a new job being spooled to the printer. The service
+     * implementation will define policy for service interruption and recovery.
      * When the print method returns, printing may not yet have completed as
      * printing may happen asynchronously, perhaps in a different thread.
-     * Application clients which  want to monitor the success or failure
-     * should register a PrintJobListener.
+     * Application clients which want to monitor the success or failure should
+     * register a {@code PrintJobListener}.
      * <p>
      * Print service implementors should close any print data streams (ie
-     * Reader or InputStream implementations) that they obtain
-     * from the client doc. Robust clients may still wish to verify this.
-     * An exception is always generated if a {@code DocFlavor} cannot
-     * be printed.
+     * {@code Reader} or {@code InputStream} implementations) that they obtain
+     * from the client doc. Robust clients may still wish to verify this. An
+     * exception is always generated if a {@code DocFlavor} cannot be printed.
      *
-     * @param doc       The document to be printed. If must be a flavor
-     *                                  supported by this PrintJob.
-     *
-     * @param attributes The job attributes to be applied to this print job.
-     *        If this parameter is null then the default attributes are used.
-     * @throws PrintException The exception additionally may implement
-     * an interface that more precisely describes the cause of the
-     * exception
-     * <ul>
-     * <li>FlavorException.
-     *  If the document has a flavor not supported by this print job.
-     * <li>AttributeException.
-     *  If one or more of the attributes are not valid for this print job.
-     * </ul>
+     * @param  doc the document to be printed. It must be a flavor supported by
+     *         this PrintJob.
+     * @param  attributes the job attributes to be applied to this print job. If
+     *         this parameter is {@code null} then the default attributes are
+     *         used.
+     * @throws PrintException the exception additionally may implement an
+     *         interface that more precisely describes the cause of the
+     *         exception
+     *         <ul>
+     *           <li>{@code FlavorException}. If the document has a flavor not
+     *           supported by this print job.
+     *           <li>{@code AttributeException}. If one or more of the
+     *           attributes are not valid for this print job.
+     *         </ul>
      */
     public void print(Doc doc, PrintRequestAttributeSet attributes)
           throws PrintException;
--- a/src/java.desktop/share/classes/javax/print/FlavorException.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/FlavorException.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -25,23 +25,20 @@
 
 package javax.print;
 
-import javax.print.DocFlavor;
-
 /**
- * Interface FlavorException is a mixin interface which a subclass of {@link
- * PrintException PrintException} can implement to report an error condition
- * involving a doc flavor or flavors (class {@link javax.print.DocFlavor
- * DocFlavor}). The Print Service API does not define any print exception
- * classes that implement interface FlavorException, that being left to the
- * Print Service implementor's discretion.
- *
+ * Interface {@code FlavorException} is a mixin interface which a subclass of
+ * {@link PrintException PrintException} can implement to report an error
+ * condition involving a doc flavor or flavors (class {@link DocFlavor}). The
+ * Print Service API does not define any print exception classes that implement
+ * interface {@code FlavorException}, that being left to the Print Service
+ * implementor's discretion.
  */
 public interface FlavorException {
 
     /**
      * Returns the unsupported flavors.
-     * @return the unsupported doc flavors.
+     *
+     * @return the unsupported doc flavors
      */
     public DocFlavor[] getUnsupportedFlavors();
-
 }
--- a/src/java.desktop/share/classes/javax/print/MimeType.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/MimeType.java	Thu Aug 31 15:47:34 2017 -0700
@@ -26,7 +26,6 @@
 package javax.print;
 
 import java.io.Serializable;
-
 import java.util.AbstractMap;
 import java.util.AbstractSet;
 import java.util.Iterator;
@@ -36,63 +35,63 @@
 import java.util.Vector;
 
 /**
- * Class MimeType encapsulates a Multipurpose Internet Mail Extensions (MIME)
- * media type as defined in <A HREF="http://www.ietf.org/rfc/rfc2045.txt">RFC
- * 2045</A> and <A HREF="http://www.ietf.org/rfc/rfc2046.txt">RFC 2046</A>. A
- * MIME type object is part of a {@link DocFlavor DocFlavor} object and
- * specifies the format of the print data.
- * <P>
- * Class MimeType is similar to the like-named
- * class in package {@link java.awt.datatransfer java.awt.datatransfer}. Class
- * java.awt.datatransfer.MimeType is not used in the Jini Print Service API
- * for two reasons:
- * <OL TYPE=1>
- * <LI>
- * Since not all Java profiles include the AWT, the Jini Print Service should
- * not depend on an AWT class.
- * <LI>
- * The implementation of class java.awt.datatransfer.MimeType does not
- * guarantee
- * that equivalent MIME types will have the same serialized representation.
- * Thus, since the Jini Lookup Service (JLUS) matches service attributes based
- * on equality of serialized representations, JLUS searches involving MIME
- * types encapsulated in class java.awt.datatransfer.MimeType may incorrectly
- * fail to match.
- * </OL>
- * <P>
+ * Class {@code MimeType} encapsulates a Multipurpose Internet Mail Extensions
+ * (MIME) media type as defined in
+ * <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a> and
+ * <a href="http://www.ietf.org/rfc/rfc2046.txt">RFC 2046</a>. A MIME type
+ * object is part of a {@link DocFlavor DocFlavor} object and specifies the
+ * format of the print data.
+ * <p>
+ * Class {@code MimeType} is similar to the like-named class in package
+ * {@link java.awt.datatransfer java.awt.datatransfer}. Class
+ * {@link java.awt.datatransfer.MimeType} is not used in the Jini Print Service
+ * API for two reasons:
+ * <ol type=1>
+ *   <li>Since not all Java profiles include the AWT, the Jini Print Service
+ *   should not depend on an AWT class.
+ *   <li>The implementation of class {@code java.awt.datatransfer.MimeType} does
+ *   not guarantee that equivalent MIME types will have the same serialized
+ *   representation. Thus, since the Jini Lookup Service (JLUS) matches service
+ *   attributes based on equality of serialized representations, JLUS searches
+ *   involving MIME types encapsulated in class
+ *   {@code java.awt.datatransfer.MimeType} may incorrectly fail to match.
+ * </ol>
  * Class MimeType's serialized representation is based on the following
  * canonical form of a MIME type string. Thus, two MIME types that are not
- * identical but that are equivalent (that have the same canonical form) will
- * be considered equal by the JLUS's matching algorithm.
- * <UL>
- * <LI> The media type, media subtype, and parameters are retained, but all
- *      comments and whitespace characters are discarded.
- * <LI> The media type, media subtype, and parameter names are converted to
- *      lowercase.
- * <LI> The parameter values retain their original case, except a charset
- *      parameter value for a text media type is converted to lowercase.
- * <LI> Quote characters surrounding parameter values are removed.
- * <LI> Quoting backslash characters inside parameter values are removed.
- * <LI> The parameters are arranged in ascending order of parameter name.
- * </UL>
+ * identical but that are equivalent (that have the same canonical form) will be
+ * considered equal by the JLUS's matching algorithm.
+ * <ul>
+ *   <li>The media type, media subtype, and parameters are retained, but all
+ *   comments and whitespace characters are discarded.
+ *   <li>The media type, media subtype, and parameter names are converted to
+ *   lowercase.
+ *   <li>The parameter values retain their original case, except a charset
+ *   parameter value for a text media type is converted to lowercase.
+ *   <li>Quote characters surrounding parameter values are removed.
+ *   <li>Quoting backslash characters inside parameter values are removed.
+ *   <li>The parameters are arranged in ascending order of parameter name.
+ * </ul>
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 class MimeType implements Serializable, Cloneable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = -2785720609362367683L;
 
     /**
-     * Array of strings that hold pieces of this MIME type's canonical form.
-     * If the MIME type has <I>n</I> parameters, <I>n</I> &gt;= 0, then the
+     * Array of strings that hold pieces of this MIME type's canonical form. If
+     * the MIME type has <i>n</i> parameters, <i>n</i> &gt;= 0, then the
      * strings in the array are:
-     * <BR>Index 0 -- Media type.
-     * <BR>Index 1 -- Media subtype.
-     * <BR>Index 2<I>i</I>+2 -- Name of parameter <I>i</I>,
-     * <I>i</I>=0,1,...,<I>n</I>-1.
-     * <BR>Index 2<I>i</I>+3 -- Value of parameter <I>i</I>,
-     * <I>i</I>=0,1,...,<I>n</I>-1.
-     * <BR>Parameters are arranged in ascending order of parameter name.
+     * <br>Index 0 -- Media type.
+     * <br>Index 1 -- Media subtype.
+     * <br>Index 2<i>i</i>+2 -- Name of parameter <i>i</i>,
+     * <i>i</i>=0,1,...,<i>n</i>-1.
+     * <br>Index 2<i>i</i>+3 -- Value of parameter <i>i</i>,
+     * <i>i</i>=0,1,...,<i>n</i>-1.
+     * <br>Parameters are arranged in ascending order of parameter name.
      * @serial
      */
     private String[] myPieces;
@@ -116,7 +115,17 @@
      * Parameter map entry.
      */
     private class ParameterMapEntry implements Map.Entry<String, String> {
+
+        /**
+         * The index of the entry.
+         */
         private int myIndex;
+
+        /**
+         * Constructs a new parameter map entry.
+         *
+         * @param  theIndex the index of the entry
+         */
         public ParameterMapEntry(int theIndex) {
             myIndex = theIndex;
         }
@@ -144,6 +153,10 @@
      * Parameter map entry set iterator.
      */
     private class ParameterMapEntrySetIterator implements Iterator<Map.Entry<String, String>> {
+
+        /**
+         * The current index of the iterator.
+         */
         private int myIndex = 2;
         public boolean hasNext() {
             return myIndex < myPieces.length;
@@ -187,16 +200,13 @@
     }
 
     /**
-     * Construct a new MIME type object from the given string. The given
-     * string is converted into canonical form and stored internally.
+     * Construct a new MIME type object from the given string. The given string
+     * is converted into canonical form and stored internally.
      *
-     * @param  s  MIME media type string.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code s} is null.
-     * @exception  IllegalArgumentException
-     *     (unchecked exception) Thrown if {@code s} does not obey the
-     *     syntax for a MIME media type string.
+     * @param  s MIME media type string
+     * @throws NullPointerException if {@code s} is {@code null}
+     * @throws IllegalArgumentException if {@code s} does not obey the syntax
+     *         for a MIME media type string
      */
     public MimeType(String s) {
         parse (s);
@@ -205,6 +215,8 @@
     /**
      * Returns this MIME type object's MIME type string based on the canonical
      * form. Each parameter value is enclosed in quotes.
+     *
+     * @return the mime type
      */
     public String getMimeType() {
         return getStringValue();
@@ -212,6 +224,8 @@
 
     /**
      * Returns this MIME type object's media type.
+     *
+     * @return the media type
      */
     public String getMediaType() {
         return myPieces[0];
@@ -219,6 +233,8 @@
 
     /**
      * Returns this MIME type object's media subtype.
+     *
+     * @return the media subtype
      */
     public String getMediaSubtype() {
         return myPieces[1];
@@ -226,11 +242,11 @@
 
     /**
      * Returns an unmodifiable map view of the parameters in this MIME type
-     * object. Each entry in the parameter map view consists of a parameter
-     * name String (key) mapping to a parameter value String. If this MIME
-     * type object has no parameters, an empty map is returned.
+     * object. Each entry in the parameter map view consists of a parameter name
+     * {@code String} (key) mapping to a parameter value {@code String}. If this
+     * MIME type object has no parameters, an empty map is returned.
      *
-     * @return  Parameter map for this MIME type object.
+     * @return parameter map for this MIME type object
      */
     public Map<String, String> getParameterMap() {
         if (myParameterMap == null) {
@@ -242,8 +258,8 @@
     /**
      * Converts this MIME type object to a string.
      *
-     * @return  MIME type string based on the canonical form. Each parameter
-     *          value is enclosed in quotes.
+     * @return MIME type string based on the canonical form. Each parameter
+     *         value is enclosed in quotes.
      */
     public String toString() {
         return getStringValue();
@@ -258,19 +274,18 @@
 
     /**
      * Determine if this MIME type object is equal to the given object. The two
-     * are equal if the given object is not null, is an instance of class
-     * net.jini.print.data.MimeType, and has the same canonical form as this
-     * MIME type object (that is, has the same type, subtype, and parameters).
-     * Thus, if two MIME type objects are the same except for comments, they are
-     * considered equal. However, "text/plain" and "text/plain;
-     * charset=us-ascii" are not considered equal, even though they represent
-     * the same media type (because the default character set for plain text is
-     * US-ASCII).
+     * are equal if the given object is not {@code null}, is an instance of
+     * class {@code javax.print.data.MimeType}, and has the same canonical form
+     * as this MIME type object (that is, has the same type, subtype, and
+     * parameters). Thus, if two MIME type objects are the same except for
+     * comments, they are considered equal. However, "text/plain" and
+     * "text/plain; charset=us-ascii" are not considered equal, even though they
+     * represent the same media type (because the default character set for
+     * plain text is US-ASCII).
      *
-     * @param  obj  Object to test.
-     *
-     * @return  True if this MIME type object equals {@code obj}, false
-     *          otherwise.
+     * @param  obj {@code object} to test
+     * @return {@code true} if this MIME type object equals {@code obj},
+     *         {@code false} otherwise
      */
     public boolean equals (Object obj) {
         return(obj != null &&
@@ -280,6 +295,8 @@
 
     /**
      * Returns this MIME type's string value in canonical form.
+     *
+     * @return the MIME type's string value in canonical form
      */
     private String getStringValue() {
         if (myStringValue == null) {
@@ -300,8 +317,8 @@
         return myStringValue;
     }
 
-// Hidden classes, constants, and operations for parsing a MIME media type
-// string.
+    // Hidden classes, constants, and operations for parsing a MIME media type
+    // string.
 
     // Lexeme types.
     private static final int TOKEN_LEXEME         = 0;
@@ -310,7 +327,9 @@
     private static final int EOF_LEXEME           = 3;
     private static final int ILLEGAL_LEXEME       = 4;
 
-    // Class for a lexical analyzer.
+    /**
+     *Class for a lexical analyzer.
+     */
     private static class LexicalAnalyzer {
         protected String mySource;
         protected int mySourceLength;
@@ -459,18 +478,19 @@
                     break;
                 }
             }
-
         }
-
     }
 
     /**
-     * Returns a lowercase version of the given string. The lowercase version
-     * is constructed by applying Character.toLowerCase() to each character of
-     * the given string, which maps characters to lowercase using the rules of
-     * Unicode. This mapping is the same regardless of locale, whereas the
-     * mapping of String.toLowerCase() may be different depending on the
+     * Returns a lowercase version of the given string. The lowercase version is
+     * constructed by applying {@code Character.toLowerCase()} to each character
+     * of the given string, which maps characters to lowercase using the rules
+     * of Unicode. This mapping is the same regardless of locale, whereas the
+     * mapping of {@code String.toLowerCase()} may be different depending on the
      * default locale.
+     *
+     * @param  s the string
+     * @return the lowercase version of the string
      */
     private static String toUnicodeLowerCase(String s) {
         int n = s.length();
@@ -483,6 +503,9 @@
 
     /**
      * Returns a version of the given string with backslashes removed.
+     *
+     * @param  s the string
+     * @return the string with backslashes removed
      */
     private static String removeBackslashes(String s) {
         int n = s.length();
@@ -503,6 +526,10 @@
     /**
      * Returns a version of the string surrounded by quotes and with interior
      * quotes preceded by a backslash.
+     *
+     * @param  s the string
+     * @return the string surrounded by quotes and with interior quotes preceded
+     *         by a backslash
      */
     private static String addQuotes(String s) {
         int n = s.length();
@@ -524,20 +551,17 @@
     /**
      * Parses the given string into canonical pieces and stores the pieces in
      * {@link #myPieces myPieces}.
-     * <P>
+     * <p>
      * Special rules applied:
-     * <UL>
-     * <LI> If the media type is text, the value of a charset parameter is
-     *      converted to lowercase.
-     * </UL>
+     * <ul>
+     *   <li>If the media type is text, the value of a charset parameter is
+     *   converted to lowercase.
+     * </ul>
      *
-     * @param  s  MIME media type string.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code s} is null.
-     * @exception  IllegalArgumentException
-     *     (unchecked exception) Thrown if {@code s} does not obey the
-     *     syntax for a MIME media type string.
+     * @param  s MIME media type string
+     * @throws NullPointerException if {@code s} is {@code null}
+     * @throws IllegalArgumentException if {@code s} does not obey the syntax
+     *         for a MIME media type string
      */
     private void parse(String s) {
         // Initialize.
--- a/src/java.desktop/share/classes/javax/print/MultiDoc.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/MultiDoc.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -28,54 +28,52 @@
 import java.io.IOException;
 
 /**
- * Interface MultiDoc specifies the interface for an object that supplies more
- * than one piece of print data for a Print Job. "Doc" is a short,
+ * Interface {@code MultiDoc} specifies the interface for an object that
+ * supplies more than one piece of print data for a Print Job. "Doc" is a short,
  * easy-to-pronounce term that means "a piece of print data," and a "multidoc"
- * is a group of several docs. The client passes to the Print Job an object
- * that implements interface MultiDoc, and the Print Job calls methods on
- *  that object to obtain the print data.
- * <P>
- * Interface MultiDoc provides an abstraction similar to a "linked list" of
- * docs. A multidoc object is like a node in the linked list, containing the
+ * is a group of several docs. The client passes to the Print Job an object that
+ * implements interface {@code MultiDoc}, and the Print Job calls methods on
+ * that object to obtain the print data.
+ * <p>
+ * Interface {@code MultiDoc} provides an abstraction similar to a "linked list"
+ * of docs. A multidoc object is like a node in the linked list, containing the
  * current doc in the list and a pointer to the next node (multidoc) in the
- * list. The Print Job can call the multidoc's {@link #getDoc()
- * getDoc()} method to get the current doc. When it's ready to go
- * on to the next doc, the Print Job can call the multidoc's {@link #next()
- * next()} method to get the next multidoc, which contains the
- * next doc. So Print Job code for accessing a multidoc might look like this:
- * <PRE>
+ * list. The Print Job can call the multidoc's {@link #getDoc() getDoc()} method
+ * to get the current doc. When it's ready to go on to the next doc, the Print
+ * Job can call the multidoc's {@link #next() next()} method to get the next
+ * multidoc, which contains the next doc. So Print Job code for accessing a
+ * multidoc might look like this:
+ *
+ * <pre>
  *      void processMultiDoc(MultiDoc theMultiDoc) {
  *
  *          MultiDoc current = theMultiDoc;
-
+ *
  *          while (current != null) {
  *              processDoc (current.getDoc());
  *              current = current.next();
  *          }
  *      }
- * </PRE>
- * <P>
- * Of course, interface MultiDoc can be implemented in any way that fulfills
- * the contract; it doesn't have to use a linked list in the implementation.
- * <P>
- * To get all the print data for a multidoc print job, a Print Service
- * proxy could use either of two patterns:
- * <OL TYPE=1>
- * <LI>
- * The <B>interleaved</B> pattern: Get the doc from the current multidoc. Get
- * the print data representation object from the current doc. Get all the print
- * data from the print data representation object. Get the next multidoc from
- * the current multidoc, and repeat until there are no more. (The code example
- * above uses the interleaved pattern.)
- *
- * <LI>
- * The <B>all-at-once</B> pattern: Get the doc from the current multidoc, and
- * save the doc in a list. Get the next multidoc from the current multidoc, and
- * repeat until there are no more. Then iterate over the list of saved docs. Get
- * the print data representation object from the current doc. Get all the print
- * data from the print data representation object. Go to the next doc in the
- * list, and repeat until there are no more.
- * </OL>
+ * </pre>
+ * Of course, interface {@code MultiDoc} can be implemented in any way that
+ * fulfills the contract; it doesn't have to use a linked list in the
+ * implementation.
+ * <p>
+ * To get all the print data for a multidoc print job, a Print Service proxy
+ * could use either of two patterns:
+ * <ol type=1>
+ *   <li>The <b>interleaved</b> pattern: Get the doc from the current multidoc.
+ *   Get the print data representation object from the current doc. Get all the
+ *   print data from the print data representation object. Get the next multidoc
+ *   from the current multidoc, and repeat until there are no more. (The code
+ *   example above uses the interleaved pattern.)
+ *   <li>The <b>all-at-once</b> pattern: Get the doc from the current multidoc,
+ *   and save the doc in a list. Get the next multidoc from the current
+ *   multidoc, and repeat until there are no more. Then iterate over the list of
+ *   saved docs. Get the print data representation object from the current doc.
+ *   Get all the print data from the print data representation object. Go to the
+ *   next doc in the list, and repeat until there are no more.
+ * </ol>
  * Now, consider a printing client that is generating print data on the fly and
  * does not have the resources to store more than one piece of print data at a
  * time. If the print service proxy used the all-at-once pattern to get the
@@ -83,41 +81,37 @@
  * to keep all the docs' print data around until the print service proxy comes
  * back and asks for them, which the client is not able to do. To work with such
  * a client, the print service proxy must use the interleaved pattern.
- * <P>
+ * <p>
  * To address this problem, and to simplify the design of clients providing
-* multiple docs to a Print Job, every Print Service proxy that supports
- * multidoc print jobs is required to access a MultiDoc object using the
- * interleaved pattern. That is, given a MultiDoc object, the print service
- * proxy will call {@link #getDoc() getDoc()} one or more times
- * until it successfully obtains the current Doc object. The print service proxy
+ * multiple docs to a Print Job, every Print Service proxy that supports
+ * multidoc print jobs is required to access a {@code MultiDoc} object using the
+ * interleaved pattern. That is, given a {@code MultiDoc} object, the print
+ * service proxy will call {@link #getDoc() getDoc()} one or more times until it
+ * successfully obtains the current {@code Doc} object. The print service proxy
  * will then obtain the current doc's print data, not proceeding until all the
  * print data is obtained or an unrecoverable error occurs. If it is able to
- * continue, the print service proxy will then call {@link #next()
- * next()} one or more times until it successfully obtains either
- * the next MultiDoc object or an indication that there are no more. An
- * implementation of interface MultiDoc can assume the print service proxy will
- * follow this interleaved pattern; for any other pattern of usage, the MultiDoc
- * implementation's behavior is unspecified.
- * <P>
+ * continue, the print service proxy will then call {@link #next() next()} one
+ * or more times until it successfully obtains either the next {@code MultiDoc}
+ * object or an indication that there are no more. An implementation of
+ * interface {@code MultiDoc} can assume the print service proxy will follow
+ * this interleaved pattern; for any other pattern of usage, the
+ * {@code MultiDoc} implementation's behavior is unspecified.
+ * <p>
  * There is no restriction on the number of client threads that may be
  * simultaneously accessing the same multidoc. Therefore, all implementations of
  * interface MultiDoc must be designed to be multiple thread safe. In fact, a
  * client thread could be adding docs to the end of the (conceptual) list while
  * a Print Job thread is simultaneously obtaining docs from the beginning of the
  * list; provided the multidoc object synchronizes the threads properly, the two
- * threads will not interfere with each other
+ * threads will not interfere with each other.
  */
-
 public interface MultiDoc {
 
-
     /**
      * Obtain the current doc object.
      *
-     * @return  Current doc object.
-     *
-     * @exception  IOException
-     *     Thrown if a error occurred reading the document.
+     * @return current doc object
+     * @throws IOException if an error occurred when reading the document
      */
     public Doc getDoc() throws IOException;
 
@@ -125,12 +119,9 @@
      * Go to the multidoc object that contains the next doc object in the
      * sequence of doc objects.
      *
-     * @return  Multidoc object containing the next doc object, or null if
-     * there are no further doc objects.
-     *
-     * @exception  IOException
-     *     Thrown if an error occurred locating the next document
+     * @return multidoc object containing the next doc object, or {@code null}
+     *         if there are no further doc objects
+     * @throws IOException if an error occurred locating the next document
      */
     public MultiDoc next() throws IOException;
-
 }
--- a/src/java.desktop/share/classes/javax/print/MultiDocPrintJob.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/MultiDocPrintJob.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -28,39 +28,35 @@
 import javax.print.attribute.PrintRequestAttributeSet;
 
 /**
- *
- * Obtained from a MultiDocPrintService, a MultiDocPrintJob can print a
- * specified collection of documents as a single print job with a set of
+ * Obtained from a {@code MultiDocPrintService}, a {@code MultiDocPrintJob} can
+ * print a specified collection of documents as a single print job with a set of
  * job attributes.
  */
-
 public interface MultiDocPrintJob extends DocPrintJob {
 
-   /**
-     * Print a MultiDoc with the specified job attributes.
-     * This method should only be called once for a given print job.
-     * Calling it again will not result in a new job being spooled to
-     * the printer. The service implementation will define policy
-     * for service interruption and recovery. Application clients which
-     * want to monitor the success or failure should register a
-     * PrintJobListener.
+    /**
+     * Print a {@code MultiDoc} with the specified job attributes. This method
+     * should only be called once for a given print job. Calling it again will
+     * not result in a new job being spooled to the printer. The service
+     * implementation will define policy for service interruption and recovery.
+     * Application clients which want to monitor the success or failure should
+     * register a {@code PrintJobListener}.
      *
-     * @param multiDoc The documents to be printed. ALL must be a flavor
-     *        supported by the PrintJob {@literal &} PrintService.
-     *
-     * @param attributes The job attributes to be applied to this print job.
-     *        If this parameter is null then the default attributes are used.
-     *
-     * @throws PrintException The exception additionally may implement
-     * an interfaces which more precisely describes the cause of the exception
-     * <ul>
-     * <li>FlavorException.
-     *  If the document has a flavor not supported by this print job.
-     * <li>AttributeException.
-     *  If one or more of the attributes are not valid for this print job.
-     * </ul>
+     * @param  multiDoc the documents to be printed. ALL must be a flavor
+     *         supported by the PrintJob {@literal &} PrintService.
+     * @param  attributes the job attributes to be applied to this print job. If
+     *         this parameter is {@code null} then the default attributes are
+     *         used.
+     * @throws PrintException the exception additionally may implement an
+     *         interfaces which more precisely describes the cause of the
+     *         exception
+     *         <ul>
+     *           <li>{@code FlavorException}. If the document has a flavor not
+     *           supported by this print job.
+     *           <li>{@code AttributeException}. If one or more of the
+     *           attributes are not valid for this print job.
+     *         </ul>
      */
     public void print(MultiDoc multiDoc, PrintRequestAttributeSet attributes)
                 throws PrintException;
-
 }
--- a/src/java.desktop/share/classes/javax/print/MultiDocPrintService.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/MultiDocPrintService.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -25,18 +25,18 @@
 
 package javax.print;
 
-
- /** Interface MultiPrintService is the factory for a MultiDocPrintJob.
-  * A MultiPrintService
-  * describes the capabilities of a Printer and can be queried regarding
-  * a printer's supported attributes.
-  */
+/**
+ * Interface {@code MultiPrintService} is the factory for a
+ * {@code MultiDocPrintJob}. A {@code MultiPrintService} describes the
+ * capabilities of a printer and can be queried regarding a printer's supported
+ * attributes.
+ */
 public interface MultiDocPrintService extends PrintService {
 
     /**
      * Create a job which can print a multiDoc.
-     * @return a MultiDocPrintJob
+     *
+     * @return a {@code MultiDocPrintJob}
      */
     public MultiDocPrintJob createMultiDocPrintJob();
-
 }
--- a/src/java.desktop/share/classes/javax/print/PrintException.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/PrintException.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -26,13 +26,16 @@
 package javax.print;
 
 /**
- * Class PrintException encapsulates a printing-related error condition that
- * occurred while using a Print Service instance. This base class
- * furnishes only a string description of the error. Subclasses furnish more
- * detailed information if applicable.
- *
+ * Class {@code PrintException} encapsulates a printing-related error condition
+ * that occurred while using a Print Service instance. This base class furnishes
+ * only a string description of the error. Subclasses furnish more detailed
+ * information if applicable.
  */
 public class PrintException extends Exception {
+
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = -5932531546705242471L;
 
     /**
@@ -45,7 +48,7 @@
     /**
      * Construct a print exception with the given detail message.
      *
-     * @param  s  Detail message, or null if no detail message.
+     * @param  s detail message, or {@code null} if no detail message
      */
     public PrintException (String s) {
         super (s);
@@ -54,20 +57,20 @@
     /**
      * Construct a print exception chaining the supplied exception.
      *
-     * @param  e  Chained exception.
+     * @param  e chained exception
      */
     public PrintException (Exception e) {
         super ( e);
     }
 
     /**
-     * Construct a print exception with the given detail message
-     * and chained exception.
-     * @param  s  Detail message, or null if no detail message.
-     * @param  e  Chained exception.
+     * Construct a print exception with the given detail message and chained
+     * exception.
+     *
+     * @param  s detail message, or {@code null} if no detail message
+     * @param  e chained exception
      */
     public PrintException (String s, Exception e) {
         super (s, e);
     }
-
 }
--- a/src/java.desktop/share/classes/javax/print/PrintService.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/PrintService.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -25,22 +25,19 @@
 
 package javax.print;
 
-import java.util.Locale;
-
 import javax.print.attribute.Attribute;
 import javax.print.attribute.AttributeSet;
 import javax.print.attribute.PrintServiceAttribute;
 import javax.print.attribute.PrintServiceAttributeSet;
 import javax.print.event.PrintServiceAttributeListener;
 
-
 /**
- * Interface PrintService is the factory for a DocPrintJob. A PrintService
- * describes the capabilities of a Printer and can be queried regarding
- * a printer's supported attributes.
- * <P>
+ * Interface {@code PrintService} is the factory for a {@code DocPrintJob}. A
+ * {@code PrintService} describes the capabilities of a printer and can be
+ * queried regarding a printer's supported attributes.
+ * <p>
  * Example:
- *   <PRE>{@code
+ *   <pre>{@code
  *   DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
  *   PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
  *   aset.add(MediaSizeName.ISO_A4);
@@ -56,299 +53,263 @@
  *        } catch (PrintException e) {
  *        }
  *   }
- *   }</PRE>
+ *   }</pre>
  */
 public interface PrintService {
 
-    /** Returns a String name for this print service which may be used
-      * by applications to request a particular print service.
-      * In a suitable context, such as a name service, this name must be
-      * unique.
-      * In some environments this unique name may be the same as the user
-      * friendly printer name defined as the
-      * {@link javax.print.attribute.standard.PrinterName PrinterName}
-      * attribute.
-      * @return name of the service.
-      */
+    /**
+     * Returns a string name for this print service which may be used by
+     * applications to request a particular print service. In a suitable
+     * context, such as a name service, this name must be unique. In some
+     * environments this unique name may be the same as the user friendly
+     * printer name defined as the
+     * {@link javax.print.attribute.standard.PrinterName PrinterName} attribute.
+     *
+     * @return name of the service
+     */
     public String getName();
 
     /**
-     * Creates and returns a PrintJob capable of handling data from
-     * any of the supported document flavors.
-     * @return a DocPrintJob object
+     * Creates and returns a {@code PrintJob} capable of handling data from any
+     * of the supported document flavors.
+     *
+     * @return a {@code DocPrintJob} object
      */
     public DocPrintJob createPrintJob();
 
     /**
-     * Registers a listener for events on this PrintService.
-     * @param listener  a PrintServiceAttributeListener, which
-     *        monitors the status of a print service
+     * Registers a listener for events on this {@code PrintService}.
+     *
+     * @param  listener a PrintServiceAttributeListener, which monitors the
+     *         status of a print service
      * @see #removePrintServiceAttributeListener
      */
     public void addPrintServiceAttributeListener(
                                        PrintServiceAttributeListener listener);
 
     /**
-     * Removes the print-service listener from this print service.
-     * This means the listener is no longer interested in
-     * {@code PrintService} events.
-     * @param listener  a PrintServiceAttributeListener object
+     * Removes the print-service listener from this print service. This means
+     * the listener is no longer interested in {@code PrintService} events.
+     *
+     * @param  listener a {@code PrintServiceAttributeListener} object
      * @see #addPrintServiceAttributeListener
      */
     public void removePrintServiceAttributeListener(
                                        PrintServiceAttributeListener listener);
 
     /**
-     * Obtains this print service's set of printer description attributes
-     * giving this Print Service's status. The returned attribute set object
-     * is unmodifiable. The returned attribute set object is a "snapshot" of
-     * this Print Service's attribute set at the time of the
-     * {@code getAttributes()} method call: that is, the returned
-     * attribute set's contents will <I>not</I> be updated if this print
-     * service's attribute set's contents change in the future. To detect
-     * changes in attribute values, call {@code getAttributes()} again
-     * and compare the new attribute set to the previous attribute set;
-     * alternatively, register a listener for print service events.
+     * Obtains this print service's set of printer description attributes giving
+     * this Print Service's status. The returned attribute set object is
+     * unmodifiable. The returned attribute set object is a "snapshot" of this
+     * Print Service's attribute set at the time of the {@code getAttributes()}
+     * method call: that is, the returned attribute set's contents will
+     * <i>not</i> be updated if this print service's attribute set's contents
+     * change in the future. To detect changes in attribute values, call
+     * {@code getAttributes()} again and compare the new attribute set to the
+     * previous attribute set; alternatively, register a listener for print
+     * service events.
      *
-     * @return  Unmodifiable snapshot of this Print Service's attribute set.
-     *          May be empty, but not null.
+     * @return unmodifiable snapshot of this Print Service's attribute set. May
+     *         be empty, but not {@code null}.
      */
     public PrintServiceAttributeSet getAttributes();
 
     /**
-     * Gets the value of the single specified service attribute.
-     * This may be useful to clients which only need the value of one
-     * attribute and want to minimize overhead.
-     * @param <T> the type of the specified service attribute
-     * @param category the category of a PrintServiceAttribute supported
-     * by this service - may not be null.
-     * @return the value of the supported attribute or null if the
-     * attribute is not supported by this service.
-     * @exception NullPointerException if the category is null.
-     * @exception  IllegalArgumentException
-     *     (unchecked exception) if {@code category} is not a
-     *     {@code Class} that implements interface
-     *{@link javax.print.attribute.PrintServiceAttribute PrintServiceAttribute}.
+     * Gets the value of the single specified service attribute. This may be
+     * useful to clients which only need the value of one attribute and want to
+     * minimize overhead.
+     *
+     * @param  <T> the type of the specified service attribute
+     * @param  category the category of a {@code PrintServiceAttribute}
+     *         supported by this service - may not be {@code null}
+     * @return the value of the supported attribute or {@code null} if the
+     *         attribute is not supported by this service
+     * @throws NullPointerException if the category is {@code null}
+     * @throws IllegalArgumentException if {@code category} is not a
+     *         {@code Class} that implements interface
+     *         {@link PrintServiceAttribute PrintServiceAttribute}
      */
     public <T extends PrintServiceAttribute>
         T getAttribute(Class<T> category);
 
     /**
-     * Determines the print data formats a client can specify when setting
-     * up a job for this {@code PrintService}. A print data format is
-     * designated by a "doc
-     * flavor" (class {@link javax.print.DocFlavor DocFlavor})
-     * consisting of a MIME type plus a print data representation class.
-     * <P>
-     * Note that some doc flavors may not be supported in combination
-     * with all attributes. Use {@code getUnsupportedAttributes(..)}
-     * to validate specific combinations.
+     * Determines the print data formats a client can specify when setting up a
+     * job for this {@code PrintService}. A print data format is designated by a
+     * "doc flavor" (class {@link DocFlavor DocFlavor}) consisting of a MIME
+     * type plus a print data representation class.
+     * <p>
+     * Note that some doc flavors may not be supported in combination with all
+     * attributes. Use {@code getUnsupportedAttributes(..)} to validate specific
+     * combinations.
      *
-     * @return  Array of supported doc flavors, should have at least
-     *          one element.
-     *
+     * @return array of supported doc flavors, should have at least one element
      */
     public DocFlavor[] getSupportedDocFlavors();
 
     /**
-     * Determines if this print service supports a specific
-     * {@code DocFlavor}.  This is a convenience method to determine
-     * if the {@code DocFlavor} would be a member of the result of
-     * {@code getSupportedDocFlavors()}.
+     * Determines if this print service supports a specific {@code DocFlavor}.
+     * This is a convenience method to determine if the {@code DocFlavor} would
+     * be a member of the result of {@code getSupportedDocFlavors()}.
      * <p>
-     * Note that some doc flavors may not be supported in combination
-     * with all attributes. Use {@code getUnsupportedAttributes(..)}
-     * to validate specific combinations.
+     * Note that some doc flavors may not be supported in combination with all
+     * attributes. Use {@code getUnsupportedAttributes(..)} to validate specific
+     * combinations.
      *
-     * @param flavor the {@code DocFlavor} to query for support.
-     * @return  {@code true} if this print service supports the
-     * specified {@code DocFlavor}; {@code false} otherwise.
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code flavor} is null.
+     * @param  flavor the {@code DocFlavor} to query for support
+     * @return {@code true} if this print service supports the specified
+     *         {@code DocFlavor}; {@code false} otherwise
+     * @throws NullPointerException if {@code flavor} is {@code null}
      */
     public boolean isDocFlavorSupported(DocFlavor flavor);
 
-
     /**
-     * Determines the printing attribute categories a client can specify
-     * when setting up a job for this print service.
-     * A printing attribute category is
+     * Determines the printing attribute categories a client can specify when
+     * setting up a job for this print service. A printing attribute category is
      * designated by a {@code Class} that implements interface
-     * {@link javax.print.attribute.Attribute Attribute}. This method returns
-     * just the attribute <I>categories</I> that are supported; it does not
-     * return the particular attribute <I>values</I> that are supported.
-     * <P>
-     * This method returns all the printing attribute
-     * categories this print service supports for any possible job.
-     * Some categories may not be supported in a particular context (ie
-     * for a particular {@code DocFlavor}).
-     * Use one of the methods that include a {@code DocFlavor} to
-     * validate the request before submitting it, such as
+     * {@link Attribute Attribute}. This method returns just the attribute
+     * <i>categories</i> that are supported; it does not return the particular
+     * attribute <i>values</i> that are supported.
+     * <p>
+     * This method returns all the printing attribute categories this print
+     * service supports for any possible job. Some categories may not be
+     * supported in a particular context (ie for a particular
+     * {@code DocFlavor}). Use one of the methods that include a
+     * {@code DocFlavor} to validate the request before submitting it, such as
      * {@code getSupportedAttributeValues(..)}.
      *
-     * @return  Array of printing attribute categories that the client can
-     *          specify as a doc-level or job-level attribute in a Print
-     *          Request. Each element in the array is a {@link java.lang.Class
-     *          Class} that implements interface {@link
-     *          javax.print.attribute.Attribute Attribute}.
-     *          The array is empty if no categories are supported.
+     * @return array of printing attribute categories that the client can
+     *         specify as a doc-level or job-level attribute in a Print Request.
+     *         Each element in the array is a {@link Class Class} that
+     *         implements interface {@link Attribute Attribute}. The array is
+     *         empty if no categories are supported.
      */
     public Class<?>[] getSupportedAttributeCategories();
 
     /**
-     * Determines whether a client can specify the given printing
-     * attribute category when setting up a job for this print service. A
-     * printing attribute category is designated by a {@code Class}
-     * that implements interface {@link javax.print.attribute.Attribute
-     * Attribute}. This method tells whether the attribute <I>category</I> is
-     * supported; it does not tell whether a particular attribute <I>value</I>
-     * is supported.
+     * Determines whether a client can specify the given printing attribute
+     * category when setting up a job for this print service. A printing
+     * attribute category is designated by a {@code Class} that implements
+     * interface {@link Attribute Attribute}. This method
+     * tells whether the attribute <i>category</i> is supported; it does not
+     * tell whether a particular attribute <i>value</i> is supported.
      * <p>
-     * Some categories may not be supported in a particular context (ie
-     * for a particular {@code DocFlavor}).
-     * Use one of the methods which include a {@code DocFlavor} to
-     * validate the request before submitting it, such as
+     * Some categories may not be supported in a particular context (ie for a
+     * particular {@code DocFlavor}). Use one of the methods which include a
+     * {@code DocFlavor} to validate the request before submitting it, such as
      * {@code getSupportedAttributeValues(..)}.
-     * <P>
-     * This is a convenience method to determine if the category
-     * would be a member of the result of
-     * {@code getSupportedAttributeCategories()}.
+     * <p>
+     * This is a convenience method to determine if the category would be a
+     * member of the result of {@code getSupportedAttributeCategories()}.
      *
-     * @param  category    Printing attribute category to test. It must be a
-     *                        {@code Class} that implements
-     *                        interface
-     *                {@link javax.print.attribute.Attribute Attribute}.
-     *
-     * @return  {@code true} if this print service supports
-     *          specifying a doc-level or
-     *          job-level attribute in {@code category} in a Print
-     *          Request; {@code false} if it doesn't.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code category} is null.
-     * @exception  IllegalArgumentException
-     *     (unchecked exception) Thrown if {@code category} is not a
-     *     {@code Class} that implements interface
-     *     {@link javax.print.attribute.Attribute Attribute}.
+     * @param  category printing attribute category to test. It must be a
+     *         {@code Class} that implements interface
+     *         {@link Attribute Attribute}.
+     * @return {@code true} if this print service supports specifying a
+     *         doc-level or job-level attribute in {@code category} in a Print
+     *         Request; {@code false} if it doesn't
+     * @throws NullPointerException if {@code category} is {@code null}
+     * @throws IllegalArgumentException if {@code category} is not a
+     *         {@code Class} that implements interface
+     *         {@link Attribute Attribute}
      */
     public boolean
         isAttributeCategorySupported(Class<? extends Attribute> category);
 
     /**
-     * Determines this print service's default printing attribute value in
-     * the given category. A printing attribute value is an instance of
-     * a class that implements interface
-     * {@link javax.print.attribute.Attribute Attribute}. If a client sets
-     * up a print job and does not specify any attribute value in the
-     * given category, this Print Service will use the
-     * default attribute value instead.
+     * Determines this print service's default printing attribute value in the
+     * given category. A printing attribute value is an instance of a class that
+     * implements interface {@link Attribute Attribute}. If a client sets up a
+     * print job and does not specify any attribute value in the given category,
+     * this Print Service will use the default attribute value instead.
      * <p>
-     * Some attributes may not be supported in a particular context (ie
-     * for a particular {@code DocFlavor}).
-     * Use one of the methods that include a {@code DocFlavor} to
-     * validate the request before submitting it, such as
+     * Some attributes may not be supported in a particular context (ie for a
+     * particular {@code DocFlavor}). Use one of the methods that include a
+     * {@code DocFlavor} to validate the request before submitting it, such as
      * {@code getSupportedAttributeValues(..)}.
-     * <P>
-     * Not all attributes have a default value. For example the
-     * service will not have a defaultvalue for {@code RequestingUser}
-     * i.e. a null return for a supported category means there is no
-     * service default value for that category. Use the
-     * {@code isAttributeCategorySupported(Class)} method to
-     * distinguish these cases.
+     * <p>
+     * Not all attributes have a default value. For example the service will not
+     * have a default value for {@code RequestingUser} i.e. a {@code null}
+     * return for a supported category means there is no service default value
+     * for that category. Use the {@code isAttributeCategorySupported(Class)}
+     * method to distinguish these cases.
      *
-     * @param  category    Printing attribute category for which the default
-     *                     attribute value is requested. It must be a {@link
-     *                        java.lang.Class Class} that implements interface
-     *                        {@link javax.print.attribute.Attribute
-     *                        Attribute}.
-     *
-     * @return  Default attribute value for {@code category}, or null
-     *       if this Print Service does not support specifying a doc-level or
-     *          job-level attribute in {@code category} in a Print
-     *          Request, or the service does not have a default value
-     *          for this attribute.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code category} is null.
-     * @exception  IllegalArgumentException
-     *     (unchecked exception) Thrown if {@code category} is not a
-     *     {@link java.lang.Class Class} that implements interface {@link
-     *     javax.print.attribute.Attribute Attribute}.
+     * @param  category printing attribute category for which the default
+     *         attribute value is requested. It must be a {@link Class Class}
+     *         that implements interface {@link Attribute Attribute}.
+     * @return default attribute value for {@code category}, or {@code null} if
+     *         this Print Service does not support specifying a doc-level or
+     *         job-level attribute in {@code category} in a Print Request, or
+     *         the service does not have a default value for this attribute
+     * @throws NullPointerException if {@code category} is {@code null}
+     * @throws IllegalArgumentException if {@code category} is not a
+     *         {@link Class Class} that implements interface
+     *         {@link Attribute Attribute}
      */
     public Object
         getDefaultAttributeValue(Class<? extends Attribute> category);
 
     /**
-     * Determines the printing attribute values a client can specify in
-     * the given category when setting up a job for this print service. A
-     * printing
+     * Determines the printing attribute values a client can specify in the
+     * given category when setting up a job for this print service. A printing
      * attribute value is an instance of a class that implements interface
-     * {@link javax.print.attribute.Attribute Attribute}.
-     * <P>
-     * If {@code flavor} is null and {@code attributes} is null
-     * or is an empty set, this method returns all the printing attribute
-     * values this Print Service supports for any possible job. If
-     * {@code flavor} is not null or {@code attributes} is not
-     * an empty set, this method returns just the printing attribute values
-     * that are compatible with the given doc flavor and/or set of attributes.
-     * That is, a null return value may indicate that specifying this attribute
-     * is incompatible with the specified DocFlavor.
-     * Also if DocFlavor is not null it must be a flavor supported by this
-     * PrintService, else IllegalArgumentException will be thrown.
-     * <P>
-     * If the {@code attributes} parameter contains an Attribute whose
-     * category is the same as the {@code category} parameter, the service
-     * must ignore this attribute in the AttributeSet.
+     * {@link Attribute Attribute}.
      * <p>
-     * {@code DocAttribute}s which are to be specified on the
-     * {@code Doc} must be included in this set to accurately
-     * represent the context.
+     * If {@code flavor} is {@code null} and {@code attributes} is {@code null}
+     * or is an empty set, this method returns all the printing attribute values
+     * this Print Service supports for any possible job. If {@code flavor} is not
+     * {@code null} or {@code attributes} is not an empty set, this method
+     * returns just the printing attribute values that are compatible with the
+     * given doc flavor and/or set of attributes. That is, a {@code null} return
+     * value may indicate that specifying this attribute is incompatible with
+     * the specified DocFlavor. Also if {@code DocFlavor} is not {@code null} it
+     * must be a flavor supported by this {@code PrintService}, else
+     * {@code IllegalArgumentException} will be thrown.
      * <p>
-     * This method returns an Object because different printing attribute
-     * categories indicate the supported attribute values in different ways.
-     * The documentation for each printing attribute in package {@link
-     * javax.print.attribute.standard javax.print.attribute.standard}
+     * If the {@code attributes} parameter contains an {@code Attribute} whose
+     * category is the same as the {@code category} parameter, the service must
+     * ignore this attribute in the {@code AttributeSet}.
+     * <p>
+     * {@code DocAttribute}s which are to be specified on the {@code Doc} must
+     * be included in this set to accurately represent the context.
+     * <p>
+     * This method returns an {@code Object} because different printing
+     * attribute categories indicate the supported attribute values in different
+     * ways. The documentation for each printing attribute in package
+     * {@link javax.print.attribute.standard javax.print.attribute.standard}
      * describes how each attribute indicates its supported values. Possible
      * ways of indicating support include:
-     * <UL>
-     * <LI>
-     * Return a single instance of the attribute category to indicate that any
-     * value is legal -- used, for example, by an attribute whose value is an
-     * arbitrary text string. (The value of the returned attribute object is
-     * irrelevant.)
-     * <LI>
-     * Return an array of one or more instances of the attribute category,
-     * containing the legal values -- used, for example, by an attribute with
-     * a list of enumerated values. The type of the array is an array of the
-     * specified attribute category type as returned by its
-     * {@code getCategory(Class)}.
-     * <LI>
-     * Return a single object (of some class other than the attribute category)
-     * that indicates bounds on the legal values -- used, for example, by an
-     * integer-valued attribute that must lie within a certain range.
-     * </UL>
+     * <ul>
+     *   <li>Return a single instance of the attribute category to indicate that
+     *   any value is legal -- used, for example, by an attribute whose value is
+     *   an arbitrary text string. (The value of the returned attribute object
+     *   is irrelevant.)
+     *   <li>Return an array of one or more instances of the attribute category,
+     *   containing the legal values -- used, for example, by an attribute with
+     *   a list of enumerated values. The type of the array is an array of the
+     *   specified attribute category type as returned by its
+     *   {@code getCategory(Class)}.
+     *   <li>Return a single object (of some class other than the attribute
+     *   category) that indicates bounds on the legal values -- used, for
+     *   example, by an integer-valued attribute that must lie within a certain
+     *   range.
+     * </ul>
      *
-     * @param  category    Printing attribute category to test. It must be a
-     *                        {@link java.lang.Class Class} that implements
-     *                        interface {@link
-     *                        javax.print.attribute.Attribute Attribute}.
-     * @param  flavor      Doc flavor for a supposed job, or null.
-     * @param  attributes  Set of printing attributes for a supposed job
-     *                        (both job-level attributes and document-level
-     *                        attributes), or null.
-     *
-     * @return  Object indicating supported values for {@code category},
-     *          or null if this Print Service does not support specifying a
-     *          doc-level or job-level attribute in {@code category} in
-     *          a Print Request.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code category} is null.
-     * @exception  IllegalArgumentException
-     *     (unchecked exception) Thrown if {@code category} is not a
-     *     {@link java.lang.Class Class} that implements interface {@link
-     *     javax.print.attribute.Attribute Attribute}, or
-     *     {@code DocFlavor} is not supported by this service.
+     * @param  category printing attribute category to test. It must be a
+     *         {@link Class Class} that implements interface
+     *         {@link Attribute Attribute}.
+     * @param  flavor doc flavor for a supposed job, or {@code null}
+     * @param  attributes set of printing attributes for a supposed job (both
+     *         job-level attributes and document-level attributes), or
+     *         {@code null}
+     * @return object indicating supported values for {@code category}, or
+     *         {@code null} if this Print Service does not support specifying a
+     *         doc-level or job-level attribute in {@code category} in a Print
+     *         Request
+     * @throws NullPointerException if {@code category} is {@code null}
+     * @throws IllegalArgumentException if {@code category} is not a
+     *         {@link Class Class} that implements interface
+     *         {@link Attribute Attribute}, or {@code DocFlavor} is not
+     *         supported by this service
      */
     public Object
         getSupportedAttributeValues(Class<? extends Attribute> category,
@@ -356,133 +317,121 @@
                                     AttributeSet attributes);
 
     /**
-     * Determines whether a client can specify the given printing
-     * attribute
-     * value when setting up a job for this Print Service. A printing
-     * attribute value is an instance of a class that implements interface
-     *  {@link javax.print.attribute.Attribute Attribute}.
-     * <P>
-     * If {@code flavor} is null and {@code attributes} is null or
-     * is an empty set, this method tells whether this Print Service supports
+     * Determines whether a client can specify the given printing attribute
+     * value when setting up a job for this Print Service. A printing attribute
+     * value is an instance of a class that implements interface
+     * {@link Attribute Attribute}.
+     * <p>
+     * If {@code flavor} is {@code null} and {@code attributes} is {@code null}
+     * or is an empty set, this method tells whether this Print Service supports
      * the given printing attribute value for some possible combination of doc
-     * flavor and set of attributes. If {@code flavor} is not null or
-     * {@code attributes} is not an empty set, this method tells whether
-     * this Print Service supports the given printing attribute value in
-     * combination with the given doc flavor and/or set of attributes.
+     * flavor and set of attributes. If {@code flavor} is not {@code null} or
+     * {@code attributes} is not an empty set, this method tells whether this
+     * Print Service supports the given printing attribute value in combination
+     * with the given doc flavor and/or set of attributes.
      * <p>
-     * Also if DocFlavor is not null it must be a flavor supported by this
-     * PrintService, else IllegalArgumentException will be thrown.
+     * Also if {@code DocFlavor} is not {@code null} it must be a flavor
+     * supported by this {@code PrintService}, else
+     * {@code IllegalArgumentException} will be thrown.
      * <p>
-     * {@code DocAttribute}s which are to be specified on the
-     * {@code Doc} must be included in this set to accurately
-     * represent the context.
+     * {@code DocAttribute}s which are to be specified on the {@code Doc} must
+     * be included in this set to accurately represent the context.
      * <p>
-     * This is a convenience method to determine if the value
-     * would be a member of the result of
-     * {@code getSupportedAttributeValues(...)}.
+     * This is a convenience method to determine if the value would be a member
+     * of the result of {@code getSupportedAttributeValues(...)}.
      *
-     * @param  attrval       Printing attribute value to test.
-     * @param  flavor      Doc flavor for a supposed job, or null.
-     * @param  attributes  Set of printing attributes for a supposed job
-     *                        (both job-level attributes and document-level
-     *                        attributes), or null.
-     *
-     * @return  True if this Print Service supports specifying
-     *        {@code attrval} as a doc-level or job-level attribute in a
-     *          Print Request, false if it doesn't.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception)  if {@code attrval} is null.
-     * @exception  IllegalArgumentException if flavor is not supported by
-     *      this PrintService.
+     * @param  attrval printing attribute value to test
+     * @param  flavor doc flavor for a supposed job, or {@code null}
+     * @param  attributes set of printing attributes for a supposed job (both
+     *         job-level attributes and document-level attributes), or
+     *         {@code null}
+     * @return {@code true} if this Print Service supports specifying
+     *         {@code attrval} as a doc-level or job-level attribute in a Print
+     *         Request, {@code false} if it doesn't
+     * @throws NullPointerException if {@code attrval} is {@code null}
+     * @throws IllegalArgumentException if flavor is not supported by this
+     *         {@code PrintService}
      */
     public boolean isAttributeValueSupported(Attribute attrval,
                                              DocFlavor flavor,
                                              AttributeSet attributes);
 
-
     /**
-     * Identifies the attributes that are unsupported for a print request
-     * in the context of a particular DocFlavor.
-     * This method is useful for validating a potential print job and
-     * identifying the specific attributes which cannot be supported.
-     * It is important to supply only a supported DocFlavor or an
-     * IllegalArgumentException will be thrown. If the
-     * return value from this method is null, all attributes are supported.
+     * Identifies the attributes that are unsupported for a print request in the
+     * context of a particular {@code DocFlavor}. This method is useful for
+     * validating a potential print job and identifying the specific attributes
+     * which cannot be supported. It is important to supply only a supported
+     * {@code DocFlavor} or an {@code IllegalArgumentException} will be thrown.
+     * If the return value from this method is {@code null}, all attributes are
+     * supported.
      * <p>
-     * {@code DocAttribute}s which are to be specified on the
-     * {@code Doc} must be included in this set to accurately
-     * represent the context.
+     * {@code DocAttribute}s which are to be specified on the {@code Doc} must
+     * be included in this set to accurately represent the context.
      * <p>
-     * If the return value is non-null, all attributes in the returned
-     * set are unsupported with this DocFlavor. The returned set does not
-     * distinguish attribute categories that are unsupported from
+     * If the return value is {@code non-null}, all attributes in the returned
+     * set are unsupported with this {@code DocFlavor}. The returned set does
+     * not distinguish attribute categories that are unsupported from
      * unsupported attribute values.
      * <p>
-     * A supported print request can then be created by removing
-     * all unsupported attributes from the original attribute set,
-     * except in the case that the DocFlavor is unsupported.
+     * A supported print request can then be created by removing all unsupported
+     * attributes from the original attribute set, except in the case that the
+     * {@code DocFlavor} is unsupported.
      * <p>
-     * If any attributes are unsupported only because they are in conflict
-     * with other attributes then it is at the discretion of the service
-     * to select the attribute(s) to be identified as the cause of the
-     * conflict.
+     * If any attributes are unsupported only because they are in conflict with
+     * other attributes then it is at the discretion of the service to select
+     * the attribute(s) to be identified as the cause of the conflict.
      * <p>
-     * Use {@code isDocFlavorSupported()} to verify that a DocFlavor
-     * is supported before calling this method.
+     * Use {@code isDocFlavorSupported()} to verify that a {@code DocFlavor} is
+     * supported before calling this method.
      *
-     * @param  flavor      Doc flavor to test, or null
-     * @param  attributes  Set of printing attributes for a supposed job
-     *                        (both job-level attributes and document-level
-     *                        attributes), or null.
-     *
-     * @return  null if this Print Service supports the print request
-     * specification, else the unsupported attributes.
-     *
-     * @exception IllegalArgumentException if {@code flavor} is
-     *             not supported by this PrintService.
+     * @param  flavor doc flavor to test, or {@code null}
+     * @param  attributes set of printing attributes for a supposed job (both
+     *         job-level attributes and document-level attributes), or
+     *         {@code null}
+     * @return {@code null} if this Print Service supports the print request
+     *         specification, else the unsupported attributes
+     * @throws IllegalArgumentException if {@code flavor} is not supported by
+     *         this {@code PrintService}
      */
     public AttributeSet getUnsupportedAttributes(DocFlavor flavor,
                                            AttributeSet attributes);
 
     /**
-     * Returns a factory for UI components which allow users to interact
-     * with the service in various roles.
-     * Services which do not provide any UI should return null.
-     * Print Services which do provide UI but want to be supported in
-     * an environment with no UI support should ensure that the factory
-     * is not initialised unless the application calls this method to
-     * obtain the factory.
-     * See {@code ServiceUIFactory} for more information.
-     * @return null or a factory for UI components.
+     * Returns a factory for UI components which allow users to interact with
+     * the service in various roles. Services which do not provide any UI should
+     * return {@code null}. Print Services which do provide UI but want to be
+     * supported in an environment with no UI support should ensure that the
+     * factory is not initialised unless the application calls this method to
+     * obtain the factory. See {@code ServiceUIFactory} for more information.
+     *
+     * @return {@code null} or a factory for UI components
      */
     public ServiceUIFactory getServiceUIFactory();
 
     /**
-     * Determines if two services are referring to the same underlying
-     * service.  Objects encapsulating a print service may not exhibit
-     * equality of reference even though they refer to the same underlying
-     * service.
+     * Determines if two services are referring to the same underlying service.
+     * Objects encapsulating a print service may not exhibit equality of
+     * reference even though they refer to the same underlying service.
      * <p>
      * Clients should call this method to determine if two services are
      * referring to the same underlying service.
      * <p>
-     * Services must implement this method and return true only if the
-     * service objects being compared may be used interchangeably by the
-     * client.
+     * Services must implement this method and return {@code true} only if the
+     * service objects being compared may be used interchangeably by the client.
      * Services are free to return the same object reference to an underlying
      * service if that, but clients must not depend on equality of reference.
-     * @param obj the reference object with which to compare.
-     * @return true if this service is the same as the obj argument,
-     * false otherwise.
+     *
+     * @param  obj the reference object with which to compare
+     * @return {@code true} if this service is the same as the obj argument,
+     *         {@code false} otherwise
      */
     public boolean equals(Object obj);
 
     /**
      * This method should be implemented consistently with
      * {@code equals(Object)}.
-     * @return hash code of this object.
+     *
+     * @return hash code of this object
      */
     public int hashCode();
-
 }
--- a/src/java.desktop/share/classes/javax/print/PrintServiceLookup.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/PrintServiceLookup.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,56 +23,69 @@
  * questions.
  */
 
-
 package javax.print;
 
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
+
 import javax.print.attribute.AttributeSet;
 
 import sun.awt.AppContext;
-import java.util.ServiceLoader;
-import java.util.ServiceConfigurationError;
 
-/** Implementations of this class provide lookup services for
-  * print services (typically equivalent to printers) of a particular type.
-  * <p>
-  * Multiple implementations may be installed concurrently.
-  * All implementations must be able to describe the located printers
-  * as instances of a PrintService.
-  * Typically implementations of this service class are located
-  * automatically in JAR files (see the SPI JAR file specification).
-  * These classes must be instantiable using a default constructor.
-  * Alternatively applications may explicitly register instances
-  * at runtime.
-  * <p>
-  * Applications use only the static methods of this abstract class.
-  * The instance methods are implemented by a service provider in a subclass
-  * and the unification of the results from all installed lookup classes
-  * are reported by the static methods of this class when called by
-  * the application.
-  * <p>
-  * A PrintServiceLookup implementor is recommended to check for the
-  * SecurityManager.checkPrintJobAccess() to deny access to untrusted code.
-  * Following this recommended policy means that untrusted code may not
-  * be able to locate any print services. Downloaded applets are the most
-  * common example of untrusted code.
-  * <p>
-  * This check is made on a per lookup service basis to allow flexibility in
-  * the policy to reflect the needs of different lookup services.
-  * <p>
-  * Services which are registered by registerService(PrintService)
-  * will not be included in lookup results if a security manager is
-  * installed and its checkPrintJobAccess() method denies access.
-  */
-
+/**
+ * Implementations of this class provide lookup services for print services
+ * (typically equivalent to printers) of a particular type.
+ * <p>
+ * Multiple implementations may be installed concurrently. All implementations
+ * must be able to describe the located printers as instances of a
+ * {@code PrintService}. Typically implementations of this service class are
+ * located automatically in JAR files (see the SPI JAR file specification).
+ * These classes must be instantiable using a default constructor. Alternatively
+ * applications may explicitly register instances at runtime.
+ * <p>
+ * Applications use only the static methods of this abstract class. The instance
+ * methods are implemented by a service provider in a subclass and the
+ * unification of the results from all installed lookup classes are reported by
+ * the static methods of this class when called by the application.
+ * <p>
+ * A {@code PrintServiceLookup} implementor is recommended to check for the
+ * {@code SecurityManager.checkPrintJobAccess()} to deny access to untrusted
+ * code. Following this recommended policy means that untrusted code may not be
+ * able to locate any print services. Downloaded applets are the most common
+ * example of untrusted code.
+ * <p>
+ * This check is made on a per lookup service basis to allow flexibility in the
+ * policy to reflect the needs of different lookup services.
+ * <p>
+ * Services which are registered by {@link #registerService(PrintService)} will
+ * not be included in lookup results if a security manager is installed and its
+ * {@code checkPrintJobAccess()} method denies access.
+ */
 public abstract class PrintServiceLookup {
 
+    /**
+     * Contains a lists of services.
+     */
     static class Services {
+
+        /**
+         * The list of lookup services.
+         */
         private ArrayList<PrintServiceLookup> listOfLookupServices = null;
+
+        /**
+         * The list of registered services.
+         */
         private ArrayList<PrintService> registeredServices = null;
     }
 
+    /**
+     * Returns the services from the current appcontext.
+     *
+     * @return the services
+     */
     private static Services getServicesForContext() {
         Services services =
             (Services)AppContext.getAppContext().get(Services.class);
@@ -83,21 +96,40 @@
         return services;
     }
 
+    /**
+     * Returns the list of lookup services.
+     *
+     * @return the list of lookup services
+     */
     private static ArrayList<PrintServiceLookup> getListOfLookupServices() {
         return getServicesForContext().listOfLookupServices;
     }
 
+    /**
+     * Initialize the list of lookup services.
+     *
+     * @return the list of lookup services
+     */
     private static ArrayList<PrintServiceLookup> initListOfLookupServices() {
         ArrayList<PrintServiceLookup> listOfLookupServices = new ArrayList<>();
         getServicesForContext().listOfLookupServices = listOfLookupServices;
         return listOfLookupServices;
     }
 
-
+    /**
+     * Returns the list of registered services.
+     *
+     * @return the list of registered services
+     */
     private static ArrayList<PrintService> getRegisteredServices() {
         return getServicesForContext().registeredServices;
     }
 
+    /**
+     * Initialize the list of registered services.
+     *
+     * @return the list of registered services
+     */
     private static ArrayList<PrintService> initRegisteredServices() {
         ArrayList<PrintService> registeredServices = new ArrayList<>();
         getServicesForContext().registeredServices = registeredServices;
@@ -108,14 +140,13 @@
      * Locates print services capable of printing the specified
      * {@link DocFlavor}.
      *
-     * @param flavor the flavor to print. If null, this constraint is not
-     *        used.
-     * @param attributes attributes that the print service must support.
-     * If null this constraint is not used.
-     *
-     * @return array of matching {@code PrintService} objects
-     * representing print services that support the specified flavor
-     * attributes.  If no services match, the array is zero-length.
+     * @param  flavor the flavor to print. If {@code null}, this constraint is
+     *         not used.
+     * @param  attributes attributes that the print service must support. If
+     *         {@code null} this constraint is not used.
+     * @return array of matching {@code PrintService} objects representing print
+     *         services that support the specified flavor attributes. If no
+     *         services match, the array is zero-length.
      */
     public static final PrintService[]
         lookupPrintServices(DocFlavor flavor,
@@ -124,26 +155,23 @@
         return list.toArray(new PrintService[list.size()]);
     }
 
-
     /**
-     * Locates MultiDoc print Services capable of printing MultiDocs
-     * containing all the specified doc flavors.
-     * <P> This method is useful to help locate a service that can print
-     * a {@code MultiDoc} in which the elements may be different
-     * flavors. An application could perform this itself by multiple lookups
-     * on each {@code DocFlavor} in turn and collating the results,
-     * but the lookup service may be able to do this more efficiently.
+     * Locates {@code MultiDoc} print {@code Services} capable of printing
+     * {@code MultiDocs} containing all the specified doc flavors.
+     * <p>
+     * This method is useful to help locate a service that can print a
+     * {@code MultiDoc} in which the elements may be different flavors. An
+     * application could perform this itself by multiple lookups on each
+     * {@code DocFlavor} in turn and collating the results, but the lookup
+     * service may be able to do this more efficiently.
      *
-     * @param flavors the flavors to print. If null or empty this
-     *        constraint is not used.
-     * Otherwise return only multidoc print services that can print all
-     * specified doc flavors.
-     * @param attributes attributes that the print service must
-     * support.  If null this constraint is not used.
-     *
-     * @return array of matching {@link MultiDocPrintService} objects.
-     * If no services match, the array is zero-length.
-     *
+     * @param  flavors the flavors to print. If {@code null} or empty this
+     *         constraint is not used. Otherwise return only multidoc print
+     *         services that can print all specified doc flavors.
+     * @param  attributes attributes that the print service must support. If
+     *         {@code null} this constraint is not used.
+     * @return array of matching {@link MultiDocPrintService} objects. If no
+     *         services match, the array is zero-length.
      */
     public static final MultiDocPrintService[]
         lookupMultiDocPrintServices(DocFlavor[] flavors,
@@ -152,28 +180,23 @@
         return list.toArray(new MultiDocPrintService[list.size()]);
     }
 
-
     /**
-     * Locates the default print service for this environment.
-     * This may return null.
-     * If multiple lookup services each specify a default, the
-     * chosen service is not precisely defined, but a
-     * platform native service, rather than an installed service,
-     * is usually returned as the default.  If there is no clearly
-     * identifiable
-     * platform native default print service, the default is the first
-     * to be located in an implementation-dependent manner.
+     * Locates the default print service for this environment. This may return
+     * {@code null}. If multiple lookup services each specify a default, the
+     * chosen service is not precisely defined, but a platform native service,
+     * rather than an installed service, is usually returned as the default. If
+     * there is no clearly identifiable platform native default print service,
+     * the default is the first to be located in an implementation-dependent
+     * manner.
      * <p>
-     * This may include making use of any preferences API that is available
-     * as part of the Java or native platform.
-     * This algorithm may be overridden by a user setting the property
-     * javax.print.defaultPrinter.
-     * A service specified must be discovered to be valid and currently
-     * available to be returned as the default.
+     * This may include making use of any preferences API that is available as
+     * part of the Java or native platform. This algorithm may be overridden by
+     * a user setting the property {@code javax.print.defaultPrinter}. A service
+     * specified must be discovered to be valid and currently available to be
+     * returned as the default.
      *
-     * @return the default PrintService.
+     * @return the default {@code PrintService}
      */
-
     public static final PrintService lookupDefaultPrintService() {
 
         Iterator<PrintServiceLookup> psIterator = getAllLookupServices().iterator();
@@ -190,19 +213,16 @@
         return null;
     }
 
-
     /**
-     * Allows an application to explicitly register a class that
-     * implements lookup services. The registration will not persist
-     * across VM invocations.
-     * This is useful if an application needs to make a new service
-     * available that is not part of the installation.
-     * If the lookup service is already registered, or cannot be registered,
-     * the method returns false.
+     * Allows an application to explicitly register a class that implements
+     * lookup services. The registration will not persist across VM invocations.
+     * This is useful if an application needs to make a new service available
+     * that is not part of the installation. If the lookup service is already
+     * registered, or cannot be registered, the method returns {@code false}.
      *
-     * @param sp an implementation of a lookup service.
-     * @return {@code true} if the new lookup service is newly
-     *         registered; {@code false} otherwise.
+     * @param  sp an implementation of a lookup service
+     * @return {@code true} if the new lookup service is newly registered;
+     *         {@code false} otherwise
      */
     public static boolean registerServiceProvider(PrintServiceLookup sp) {
         synchronized (PrintServiceLookup.class) {
@@ -220,29 +240,24 @@
             getListOfLookupServices().add(sp);
             return true;
         }
-
     }
 
-
     /**
-     * Allows an application to directly register an instance of a
-     * class which implements a print service.
-     * The lookup operations for this service will be
-     * performed by the PrintServiceLookup class using the attribute
-     * values and classes reported by the service.
-     * This may be less efficient than a lookup
-     * service tuned for that service.
-     * Therefore registering a {@code PrintServiceLookup} instance
-     * instead is recommended.
-     * The method returns true if this service is not previously
-     * registered and is now successfully registered.
-     * This method should not be called with StreamPrintService instances.
-     * They will always fail to register and the method will return false.
-     * @param service an implementation of a print service.
-     * @return {@code true} if the service is newly
-     *         registered; {@code false} otherwise.
+     * Allows an application to directly register an instance of a class which
+     * implements a print service. The lookup operations for this service will
+     * be performed by the {@code PrintServiceLookup} class using the attribute
+     * values and classes reported by the service. This may be less efficient
+     * than a lookup service tuned for that service. Therefore registering a
+     * {@code PrintServiceLookup} instance instead is recommended. The method
+     * returns {@code true} if this service is not previously registered and is
+     * now successfully registered. This method should not be called with
+     * {@code StreamPrintService} instances. They will always fail to register
+     * and the method will return {@code false}.
+     *
+     * @param  service an implementation of a print service
+     * @return {@code true} if the service is newly registered; {@code false}
+     *         otherwise
      */
-
     public static boolean registerService(PrintService service) {
         synchronized (PrintServiceLookup.class) {
             if (service == null || service instanceof StreamPrintService) {
@@ -262,68 +277,72 @@
         }
     }
 
-
-   /**
-    * Locates services that can be positively confirmed to support
-    * the combination of attributes and DocFlavors specified.
-    * This method is not called directly by applications.
-    * <p>
-    * Implemented by a service provider, used by the static methods
-    * of this class.
-    * <p>
-    * The results should be the same as obtaining all the PrintServices
-    * and querying each one individually on its support for the
-    * specified attributes and flavors, but the process can be more
-    * efficient by taking advantage of the capabilities of lookup services
-    * for the print services.
-    *
-    * @param flavor of document required.  If null it is ignored.
-    * @param attributes required to be supported. If null this
-    * constraint is not used.
-    * @return array of matching PrintServices. If no services match, the
-    * array is zero-length.
-    */
+    /**
+     * Locates services that can be positively confirmed to support the
+     * combination of attributes and {@code DocFlavors} specified. This method
+     * is not called directly by applications.
+     * <p>
+     * Implemented by a service provider, used by the static methods of this
+     * class.
+     * <p>
+     * The results should be the same as obtaining all the {@code PrintServices}
+     * and querying each one individually on its support for the specified
+     * attributes and flavors, but the process can be more efficient by taking
+     * advantage of the capabilities of lookup services for the print services.
+     *
+     * @param  flavor of document required. If {@code null} it is ignored.
+     * @param  attributes required to be supported. If {@code null} this
+     *         constraint is not used.
+     * @return array of matching {@code PrintServices}. If no services match,
+     *         the array is zero-length.
+     */
     public abstract PrintService[] getPrintServices(DocFlavor flavor,
                                                     AttributeSet attributes);
 
     /**
-     * Not called directly by applications.
-     * Implemented by a service provider, used by the static methods
-     * of this class.
-     * @return array of all PrintServices known to this lookup service
-     * class. If none are found, the array is zero-length.
+     * Not called directly by applications. Implemented by a service provider,
+     * used by the static methods of this class.
+     *
+     * @return array of all {@code PrintServices} known to this lookup service
+     *         class. If none are found, the array is zero-length.
      */
     public abstract PrintService[] getPrintServices() ;
 
-
-   /**
-    * Not called directly by applications.
-    * <p>
-    * Implemented by a service provider, used by the static methods
-    * of this class.
-    * <p>
-    * Locates MultiDoc print services which can be positively confirmed
-    * to support the combination of attributes and DocFlavors specified.
-    *
-    * @param flavors of documents required. If null or empty it is ignored.
-    * @param attributes required to be supported. If null this
-     * constraint is not used.
-    * @return array of matching PrintServices. If no services match, the
-    * array is zero-length.
-    */
+    /**
+     * Not called directly by applications.
+     * <p>
+     * Implemented by a service provider, used by the static methods of this
+     * class.
+     * <p>
+     * Locates {@code MultiDoc} print services which can be positively confirmed
+     * to support the combination of attributes and {@code DocFlavors}
+     * specified.
+     *
+     * @param  flavors of documents required. If {@code null} or empty it is
+     *         ignored.
+     * @param  attributes required to be supported. If {@code null} this
+     *         constraint is not used.
+     * @return array of matching {@code PrintServices}. If no services match,
+     *         the array is zero-length.
+     */
     public abstract MultiDocPrintService[]
         getMultiDocPrintServices(DocFlavor[] flavors,
                                  AttributeSet attributes);
 
     /**
-     * Not called directly by applications.
-     * Implemented by a service provider, and called by the print lookup
-     * service
-     * @return the default PrintService for this lookup service.
-     * If there is no default, returns null.
+     * Not called directly by applications. Implemented by a service provider,
+     * and called by the print lookup service.
+     *
+     * @return the default {@code PrintService} for this lookup service. If
+     *         there is no default, returns {@code null}.
      */
     public abstract PrintService getDefaultPrintService();
 
+    /**
+     * Returns all lookup services for this environment.
+     *
+     * @return all lookup services for this environment
+     */
     private static ArrayList<PrintServiceLookup> getAllLookupServices() {
         synchronized (PrintServiceLookup.class) {
             ArrayList<PrintServiceLookup> listOfLookupServices = getListOfLookupServices();
@@ -362,6 +381,18 @@
         }
     }
 
+    /**
+     * Locates print services capable of printing the specified
+     * {@link DocFlavor}.
+     *
+     * @param  flavor the flavor to print. If {@code null}, this constraint is
+     *         not used.
+     * @param  attributes attributes that the print service must support. If
+     *         {@code null} this constraint is not used.
+     * @return list of matching {@code PrintService} objects representing print
+     *         services that support the specified flavor attributes. If no
+     *         services match, the empty list is returned.
+     */
     private static ArrayList<PrintService> getServices(DocFlavor flavor,
                                                        AttributeSet attributes) {
 
@@ -388,7 +419,9 @@
             } catch (Exception e) {
             }
         }
-        /* add any directly registered services */
+        /*
+         * add any directly registered services
+         */
         ArrayList<PrintService> registeredServices = null;
         try {
           SecurityManager security = System.getSecurityManager();
@@ -418,6 +451,18 @@
         return listOfServices;
     }
 
+    /**
+     * Locates {@code MultiDoc} print {@code Services} capable of printing
+     * {@code MultiDocs} containing all the specified doc flavors.
+     *
+     * @param  flavors the flavors to print. If {@code null} or empty this
+     *         constraint is not used. Otherwise return only multidoc print
+     *         services that can print all specified doc flavors.
+     * @param  attributes attributes that the print service must support. If
+     *         {@code null} this constraint is not used.
+     * @return list of matching {@link MultiDocPrintService} objects. If no
+     *         services match, the empty list is returned.
+     */
     private static ArrayList<MultiDocPrintService> getMultiDocServices(DocFlavor[] flavors,
                                                                        AttributeSet attributes) {
 
@@ -438,7 +483,9 @@
             } catch (Exception e) {
             }
         }
-        /* add any directly registered services */
+        /*
+         * add any directly registered services
+         */
         ArrayList<PrintService> registeredServices = null;
         try {
           SecurityManager security = System.getSecurityManager();
@@ -480,5 +527,4 @@
         }
         return listOfServices;
     }
-
 }
--- a/src/java.desktop/share/classes/javax/print/ServiceUI.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/ServiceUI.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -25,99 +25,93 @@
 
 package javax.print;
 
+import java.awt.Dialog;
+import java.awt.Frame;
 import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
 import java.awt.GraphicsEnvironment;
 import java.awt.HeadlessException;
-import java.awt.Dialog;
-import java.awt.Frame;
-import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.Window;
-import java.awt.KeyboardFocusManager;
+
 import javax.print.attribute.Attribute;
 import javax.print.attribute.AttributeSet;
 import javax.print.attribute.PrintRequestAttributeSet;
 import javax.print.attribute.standard.Destination;
 import javax.print.attribute.standard.Fidelity;
+
 import sun.print.DialogOwner;
-
 import sun.print.ServiceDialog;
 import sun.print.SunAlternateMedia;
 
-/** This class is a collection of UI convenience methods which provide a
+/**
+ * This class is a collection of UI convenience methods which provide a
  * graphical user dialog for browsing print services looked up through the Java
  * Print Service API.
  * <p>
  * The dialogs follow a standard pattern of acting as a continue/cancel option
- *for a user as well as allowing the user to select the print service to use
- *and specify choices such as paper size and number of copies.
+ * for a user as well as allowing the user to select the print service to use
+ * and specify choices such as paper size and number of copies.
  * <p>
  * The dialogs are designed to work with pluggable print services though the
  * public APIs of those print services.
  * <p>
  * If a print service provides any vendor extensions these may be made
- * accessible to the user through a vendor supplied tab panel Component.
+ * accessible to the user through a vendor supplied tab panel {@code Component}.
  * Such a vendor extension is encouraged to use Swing! and to support its
- * accessibility APIs.
- * The vendor extensions should return the settings as part of the
- * AttributeSet.
- * Applications which want to preserve the user settings should use those
- * settings to specify the print job.
- * Note that this class is not referenced by any other part of the Java
- * Print Service and may not be included in profiles which cannot depend
- * on the presence of the AWT packages.
+ * accessibility APIs. The vendor extensions should return the settings as part
+ * of the {@code AttributeSet}. Applications which want to preserve the user
+ * settings should use those settings to specify the print job. Note that this
+ * class is not referenced by any other part of the Java Print Service and may
+ * not be included in profiles which cannot depend on the presence of the AWT
+ * packages.
  */
-
 public class ServiceUI {
 
-
     /**
-     * Presents a dialog to the user for selecting a print service (printer).
-     * It is displayed at the location specified by the application and
-     * is modal.
+     * Presents a dialog to the user for selecting a print service (printer). It
+     * is displayed at the location specified by the application and is modal.
      * If the specification is invalid or would make the dialog not visible it
-     * will be displayed at a location determined by the implementation.
-     * The dialog blocks its calling thread and is application modal.
+     * will be displayed at a location determined by the implementation. The
+     * dialog blocks its calling thread and is application modal.
      * <p>
      * The dialog may include a tab panel with custom UI lazily obtained from
-     * the PrintService's ServiceUIFactory when the PrintService is browsed.
-     * The dialog will attempt to locate a MAIN_UIROLE first as a JComponent,
-     * then as a Panel. If there is no ServiceUIFactory or no matching role
-     * the custom tab will be empty or not visible.
+     * the {@code PrintService}'s {@code ServiceUIFactory} when the
+     * {@code PrintService} is browsed. The dialog will attempt to locate a
+     * {@code MAIN_UIROLE} first as a {@code JComponent}, then as a
+     * {@code Panel}. If there is no {@code ServiceUIFactory} or no matching
+     * role the custom tab will be empty or not visible.
      * <p>
      * The dialog returns the print service selected by the user if the user
-     * OK's the dialog and null if the user cancels the dialog.
+     * OK's the dialog and {@code null} if the user cancels the dialog.
      * <p>
-     * An application must pass in an array of print services to browse.
-     * The array must be non-null and non-empty.
-     * Typically an application will pass in only PrintServices capable
-     * of printing a particular document flavor.
+     * An application must pass in an array of print services to browse. The
+     * array must be {@code non-null} and non-empty. Typically an application
+     * will pass in only {@code PrintServices} capable of printing a particular
+     * document flavor.
      * <p>
-     * An application may pass in a PrintService to be initially displayed.
-     * A non-null parameter must be included in the array of browsable
-     * services.
-     * If this parameter is null a service is chosen by the implementation.
+     * An application may pass in a {@code PrintService} to be initially
+     * displayed. A {@code non-null} parameter must be included in the array of
+     * browsable services. If this parameter is {@code null} a service is chosen
+     * by the implementation.
      * <p>
-     * An application may optionally pass in the flavor to be printed.
-     * If this is non-null choices presented to the user can be better
-     * validated against those supported by the services.
-     * An application must pass in a PrintRequestAttributeSet for returning
-     * user choices.
-     * On calling the PrintRequestAttributeSet may be empty, or may contain
+     * An application may optionally pass in the flavor to be printed. If this
+     * is {@code non-null} choices presented to the user can be better validated
+     * against those supported by the services. An application must pass in a
+     * {@code PrintRequestAttributeSet} for returning user choices. On calling
+     * the {@code PrintRequestAttributeSet} may be empty, or may contain
      * application-specified values.
      * <p>
-     * These are used to set the initial settings for the initially
-     * displayed print service. Values which are not supported by the print
-     * service are ignored. As the user browses print services, attributes
-     * and values are copied to the new display. If a user browses a
-     * print service which does not support a particular attribute-value, the
-     * default for that service is used as the new value to be copied.
+     * These are used to set the initial settings for the initially displayed
+     * print service. Values which are not supported by the print service are
+     * ignored. As the user browses print services, attributes and values are
+     * copied to the new display. If a user browses a print service which does
+     * not support a particular attribute-value, the default for that service is
+     * used as the new value to be copied.
      * <p>
      * If the user cancels the dialog, the returned attributes will not reflect
      * any changes made by the user.
-     *
-     * A typical basic usage of this method may be :
+     * <p>
+     * A typical basic usage of this method may be:
      * <pre>{@code
      * PrintService[] services = PrintServiceLookup.lookupPrintServices(
      *                            DocFlavor.INPUT_STREAM.JPEG, null);
@@ -133,24 +127,25 @@
      * }
      * }</pre>
      *
-     * @param gc used to select screen. null means primary or default screen.
-     * @param x location of dialog including border in screen coordinates
-     * relative to the origin of {@code gc}.
-     * @param y location of dialog including border in screen coordinates
-     * relative to the origin of {@code gc}.
-     * @param services to be browsable, must be non-null.
-     * @param defaultService initial PrintService to display.
-     * @param flavor the flavor to be printed, or null.
-     * @param attributes on input is the initial application supplied
-     * preferences. This cannot be null but may be empty.
-     * On output the attributes reflect changes made by the user.
-     * @return print service selected by the user, or null if the user
-     * cancelled the dialog.
-     * @throws HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true.
-     * @throws IllegalArgumentException if services is null or empty,
-     * or attributes is null, or the initial PrintService is not in the
-     * list of browsable services.
+     * @param  gc used to select screen, {@code null} means primary or default
+     *         screen
+     * @param  x location of dialog including border in screen coordinates
+     *         relative to the origin of {@code gc}
+     * @param  y location of dialog including border in screen coordinates
+     *         relative to the origin of {@code gc}
+     * @param  services to be browsable, must be {@code non-null}
+     * @param  defaultService initial {@code PrintService} to display
+     * @param  flavor the flavor to be printed, or {@code null}
+     * @param  attributes on input is the initial application supplied
+     *         preferences. This cannot be {@code null} but may be empty. On
+     *         output the attributes reflect changes made by the user.
+     * @return print service selected by the user, or {@code null} if the user
+     *         cancelled the dialog
+     * @throws HeadlessException if {@code GraphicsEnvironment.isHeadless()}
+     *         returns {@code true}
+     * @throws IllegalArgumentException if services is {@code null} or empty, or
+     *         attributes is {@code null}, or the initial {@code PrintService}
+     *         is not in the list of browsable services
      */
     @SuppressWarnings("deprecation")
     public static PrintService printDialog(GraphicsConfiguration gc,
@@ -220,8 +215,8 @@
             // check if dialog exceed window bounds at left or bottom
             // Then position the dialog by moving it by the amount it exceeds
             // the window bounds
-            // If it results in dialog moving beyond the window bounds at top/left
-            // then position it at window top/left
+            // If it results in dialog moving beyond the window bounds at
+            // top/left then position it at window top/left
             if (dlgBounds.x + dlgBounds.width > gcBounds.x + gcBounds.width) {
                 if ((gcBounds.x + gcBounds.width - dlgBounds.width) > gcBounds.x) {
                     x = (gcBounds.x + gcBounds.width) - dlgBounds.width;
@@ -315,8 +310,8 @@
     */
 
     /**
-     * Removes any attributes from the given AttributeSet that are
-     * unsupported by the given PrintService/DocFlavor combination.
+     * Removes any attributes from the given {@code AttributeSet} that are
+     * unsupported by the given {@code PrintService/DocFlavor} combination.
      */
     private static void removeUnsupportedAttributes(PrintService ps,
                                                     DocFlavor flavor,
--- a/src/java.desktop/share/classes/javax/print/ServiceUIFactory.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/ServiceUIFactory.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -26,21 +26,20 @@
 package javax.print;
 
 /**
- * Services may optionally provide UIs which allow different styles
- * of interaction in different roles.
- * One role may be end-user browsing and setting of print options.
- * Another role may be administering the print service.
+ * Services may optionally provide UIs which allow different styles of
+ * interaction in different roles. One role may be end-user browsing and setting
+ * of print options. Another role may be administering the print service.
  * <p>
  * Although the Print Service API does not presently provide standardised
- * support for administering a print service, monitoring of the print
- * service is possible and a UI may provide for private update mechanisms.
+ * support for administering a print service, monitoring of the print service is
+ * possible and a UI may provide for private update mechanisms.
  * <p>
  * The basic design intent is to allow applications to lazily locate and
- * initialize services only when needed without any API dependencies
- * except in an environment in which they are used.
+ * initialize services only when needed without any API dependencies except in
+ * an environment in which they are used.
  * <p>
- * Swing UIs are preferred as they provide a more consistent {@literal L&F}
- * and can support accessibility APIs.
+ * Swing UIs are preferred as they provide a more consistent {@literal L&F} and
+ * can support accessibility APIs.
  * <p>
  * Example usage:
  * <pre>
@@ -55,34 +54,29 @@
  *  }
  * </pre>
  */
-
 public abstract class ServiceUIFactory {
 
     /**
-     * Denotes a UI implemented as a Swing component.
-     * The value of the String is the fully qualified classname :
-     * "javax.swing.JComponent".
+     * Denotes a UI implemented as a Swing component. The value of the string is
+     * the fully qualified classname : "javax.swing.JComponent".
      */
     public static final String JCOMPONENT_UI = "javax.swing.JComponent";
 
     /**
-     * Denotes a UI implemented as an AWT panel.
-     * The value of the String is the fully qualified classname :
-     * "java.awt.Panel"
+     * Denotes a UI implemented as an AWT panel. The value of the string is the
+     * fully qualified classname : "java.awt.Panel"
      */
     public static final String PANEL_UI = "java.awt.Panel";
 
     /**
-     * Denotes a UI implemented as an AWT dialog.
-     * The value of the String is the fully qualified classname :
-     * "java.awt.Dialog"
+     * Denotes a UI implemented as an AWT dialog. The value of the string is the
+     * fully qualified classname : "java.awt.Dialog"
      */
     public static final String DIALOG_UI = "java.awt.Dialog";
 
     /**
-     * Denotes a UI implemented as a Swing dialog.
-     * The value of the String is the fully qualified classname :
-     * "javax.swing.JDialog"
+     * Denotes a UI implemented as a Swing dialog. The value of the string is
+     * the fully qualified classname : "javax.swing.JDialog"
      */
     public static final String JDIALOG_UI = "javax.swing.JDialog";
 
@@ -102,41 +96,38 @@
     public static final int MAIN_UIROLE = 3;
 
     /**
-     * Not a valid role but role id's greater than this may be used
-     * for private roles supported by a service. Knowledge of the
-     * function performed by this role is required to make proper use
-     * of it.
+     * Not a valid role but role id's greater than this may be used for private
+     * roles supported by a service. Knowledge of the function performed by this
+     * role is required to make proper use of it.
      */
     public static final int RESERVED_UIROLE = 99;
+
     /**
-     * Get a UI object which may be cast to the requested UI type
-     * by the application and used in its user interface.
+     * Get a UI object which may be cast to the requested UI type by the
+     * application and used in its user interface.
      *
-     * @param role requested. Must be one of the standard roles or
-     * a private role supported by this factory.
-     * @param ui type in which the role is requested.
-     * @return the UI role or null if the requested UI role is not available
-     * from this factory
-     * @throws IllegalArgumentException if the role or ui is neither
-     * one of the standard ones, nor a private one
-     * supported by the factory.
+     * @param  role requested. Must be one of the standard roles or a private
+     *         role supported by this factory.
+     * @param  ui type in which the role is requested
+     * @return the UI role or {@code null} if the requested UI role is not
+     *         available from this factory
+     * @throws IllegalArgumentException if the role or ui is neither one of the
+     *         standard ones, nor a private one supported by the factory
      */
     public abstract Object getUI(int role, String ui) ;
 
     /**
-     * Given a UI role obtained from this factory obtain the UI
-     * types available from this factory which implement this role.
-     * The returned Strings should refer to the static variables defined
-     * in this class so that applications can use equality of reference
-     * ("==").
-     * @param role to be looked up.
+     * Given a UI role obtained from this factory obtain the UI types available
+     * from this factory which implement this role. The returned {@code Strings}
+     * should refer to the static variables defined in this class so that
+     * applications can use equality of reference ("==").
+     *
+     * @param  role to be looked up
      * @return the UI types supported by this class for the specified role,
-     * null if no UIs are available for the role.
-     * @throws IllegalArgumentException is the role is a non-standard
-     * role not supported by this factory.
+     *         {@code null} if no UIs are available for the role
+     * @throws IllegalArgumentException is the role is a non-standard role not
+     *         supported by this factory
      */
     public abstract String[] getUIClassNamesForRole(int role) ;
 
-
-
 }
--- a/src/java.desktop/share/classes/javax/print/SimpleDoc.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/SimpleDoc.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2017, 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
@@ -27,60 +27,76 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.CharArrayReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
 import java.io.StringReader;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.Reader;
+
 import javax.print.attribute.AttributeSetUtilities;
 import javax.print.attribute.DocAttributeSet;
 
 /**
- * This class is an implementation of interface {@code Doc} that can
- * be used in many common printing requests.
- * It can handle all of the presently defined "pre-defined" doc flavors
- * defined as static variables in the DocFlavor class.
+ * This class is an implementation of interface {@code Doc} that can be used in
+ * many common printing requests. It can handle all of the presently defined
+ * "pre-defined" doc flavors defined as static variables in the
+ * {@code DocFlavor} class.
  * <p>
  * In particular this class implements certain required semantics of the
- * Doc specification as follows:
+ * {@code Doc} specification as follows:
  * <ul>
- * <li>constructs a stream for the service if requested and appropriate.
- * <li>ensures the same object is returned for each call on a method.
- * <li>ensures multiple threads can access the Doc
- * <li>performs some validation of that the data matches the doc flavor.
+ *   <li>constructs a stream for the service if requested and appropriate.
+ *   <li>ensures the same object is returned for each call on a method.
+ *   <li>ensures multiple threads can access the {@code Doc}
+ *   <li>performs some validation of that the data matches the doc flavor.
  * </ul>
- * Clients who want to re-use the doc object in other jobs,
- * or need a MultiDoc will not want to use this class.
+ * Clients who want to re-use the doc object in other jobs, or need a
+ * {@code MultiDoc} will not want to use this class.
  * <p>
- * If the print data is a stream, or a print job requests data as a
- * stream, then {@code SimpleDoc} does not monitor if the service
- * properly closes the stream after data transfer completion or job
- * termination.
- * Clients may prefer to use provide their own implementation of doc that
- * adds a listener to monitor job completion and to validate that
- * resources such as streams are freed (ie closed).
+ * If the print data is a stream, or a print job requests data as a stream, then
+ * {@code SimpleDoc} does not monitor if the service properly closes the stream
+ * after data transfer completion or job termination. Clients may prefer to use
+ * provide their own implementation of doc that adds a listener to monitor job
+ * completion and to validate that resources such as streams are freed (ie
+ * closed).
  */
-
 public final class SimpleDoc implements Doc {
 
+    /**
+     * The doc flavor in which this doc will supply its piece of print data.
+     */
     private DocFlavor flavor;
+
+    /**
+     * The set of printing attributes for this doc.
+     */
     private DocAttributeSet attributes;
+
+    /**
+     * The print data.
+     */
     private Object printData;
+
+    /**
+     * The reader for extracting character print data from this doc.
+     */
     private Reader reader;
+
+    /**
+     * The input stream for extracting byte print data from this doc.
+     */
     private InputStream inStream;
 
     /**
-     * Constructs a {@code SimpleDoc} with the specified
-     * print data, doc flavor and doc attribute set.
-     * @param printData the print data object
-     * @param flavor the {@code DocFlavor} object
-     * @param attributes a {@code DocAttributeSet}, which can
-     *                   be {@code null}
-     * @throws IllegalArgumentException if {@code flavor} or
-     *         {@code printData} is {@code null}, or the
-     *         {@code printData} does not correspond
-     *         to the specified doc flavor--for example, the data is
-     *         not of the type specified as the representation in the
-     *         {@code DocFlavor}.
+     * Constructs a {@code SimpleDoc} with the specified print data, doc flavor
+     * and doc attribute set.
+     *
+     * @param  printData the print data object
+     * @param  flavor the {@code DocFlavor} object
+     * @param  attributes a {@code DocAttributeSet}, which can be {@code null}
+     * @throws IllegalArgumentException if {@code flavor} or {@code printData}
+     *         is {@code null}, or the {@code printData} does not correspond to
+     *         the specified doc flavor--for example, the data is not of the
+     *         type specified as the representation in the {@code DocFlavor}
      */
     public SimpleDoc(Object printData,
                      DocFlavor flavor, DocAttributeSet attributes) {
@@ -110,11 +126,11 @@
        this.printData = printData;
     }
 
-   /**
-     * Determines the doc flavor in which this doc object will supply its
-     * piece of print data.
+    /**
+     * Determines the doc flavor in which this doc object will supply its piece
+     * of print data.
      *
-     * @return  Doc flavor.
+     * @return doc flavor
      */
     public DocFlavor getDocFlavor() {
         return flavor;
@@ -123,67 +139,60 @@
     /**
      * Obtains the set of printing attributes for this doc object. If the
      * returned attribute set includes an instance of a particular attribute
-     * <I>X,</I> the printer must use that attribute value for this doc,
-     * overriding any value of attribute <I>X</I> in the job's attribute set.
-     * If the returned attribute set does not include an instance
-     * of a particular attribute <I>X</I> or if null is returned, the printer
-     * must consult the job's attribute set to obtain the value for
-     * attribute <I>X,</I> and if not found there, the printer must use an
+     * <i>X,</i> the printer must use that attribute value for this doc,
+     * overriding any value of attribute <i>X</i> in the job's attribute set. If
+     * the returned attribute set does not include an instance of a particular
+     * attribute <i>X</i> or if {@code null} is returned, the printer must
+     * consult the job's attribute set to obtain the value for attribute
+     * <i>X,</i> and if not found there, the printer must use an
      * implementation-dependent default value. The returned attribute set is
      * unmodifiable.
      *
-     * @return  Unmodifiable set of printing attributes for this doc, or null
-     *          to obtain all attribute values from the job's attribute
-     *          set.
+     * @return unmodifiable set of printing attributes for this doc, or
+     *         {@code null} to obtain all attribute values from the job's
+     *         attribute set
      */
     public DocAttributeSet getAttributes() {
         return attributes;
     }
 
-    /*
+    /**
      * Obtains the print data representation object that contains this doc
-     * object's piece of print data in the format corresponding to the
-     * supported doc flavor.
-     * The {@code getPrintData()} method returns an instance of
-     * the representation class whose name is given by
-     * {@link DocFlavor#getRepresentationClassName() getRepresentationClassName},
-     * and the return value can be cast
-     * from class Object to that representation class.
+     * object's piece of print data in the format corresponding to the supported
+     * doc flavor. The {@code getPrintData()} method returns an instance of the
+     * representation class whose name is given by {@link #getDocFlavor()
+     * getDocFlavor()}.{@link DocFlavor#getRepresentationClassName()
+     * getRepresentationClassName()}, and the return value can be cast from
+     * class {@code Object} to that representation class.
      *
-     * @return  Print data representation object.
-     *
-     * @exception  IOException if the representation class is a stream and
-     *     there was an I/O error while constructing the stream.
+     * @return print data representation object
+     * @throws IOException if the representation class is a stream and there was
+     *         an I/O error while constructing the stream
      */
     public Object getPrintData() throws IOException {
         return printData;
     }
 
     /**
-     * Obtains a reader for extracting character print data from this doc.
-     * The {@code Doc} implementation is required to support this
-     * method if the {@code DocFlavor} has one of the following print
-     * data representation classes, and return {@code null}
-     * otherwise:
-     * <UL>
-     * <LI> {@code char[]}
-     * <LI> {@code java.lang.String}
-     * <LI> {@code java.io.Reader}
-     * </UL>
+     * Obtains a reader for extracting character print data from this doc. The
+     * {@code Doc} implementation is required to support this method if the
+     * {@code DocFlavor} has one of the following print data representation
+     * classes, and return {@code null} otherwise:
+     * <ul>
+     *   <li>{@code char[]}
+     *   <li>{@code java.lang.String}
+     *   <li>{@code java.io.Reader}
+     * </ul>
      * The doc's print data representation object is used to construct and
-     * return a {@code Reader} for reading the print data as a stream
-     * of characters from the print data representation object.
-     * However, if the print data representation object is itself a
-     * {@code Reader} then the print data representation object is
-     * simply returned.
+     * return a {@code Reader} for reading the print data as a stream of
+     * characters from the print data representation object. However, if the
+     * print data representation object is itself a {@code Reader} then the
+     * print data representation object is simply returned.
      *
-     * @return  a {@code Reader} for reading the print data
-     *          characters from this doc.
-     *          If a reader cannot be provided because this doc does not meet
-     *          the criteria stated above, {@code null} is returned.
-     *
-     * @exception  IOException if there was an I/O error while creating
-     *             the reader.
+     * @return a {@code Reader} for reading the print data characters from this
+     *         doc. If a reader cannot be provided because this doc does not
+     *         meet the criteria stated above, {@code null} is returned.
+     * @throws IOException if there was an I/O error while creating the reader
      */
     public Reader getReaderForText() throws IOException {
 
@@ -207,31 +216,25 @@
     }
 
     /**
-     * Obtains an input stream for extracting byte print data from
-     * this doc.
-     * The {@code Doc} implementation is required to support this
-     * method if the {@code DocFlavor} has one of the following print
-     * data representation classes; otherwise this method
-     * returns {@code null}:
-     * <UL>
-     * <LI> {@code byte[]}
-     * <LI> {@code java.io.InputStream}
-     * </UL>
-     * The doc's print data representation object is obtained.  Then, an
-     * input stream for reading the print data
-     * from the print data representation object as a stream of bytes is
-     * created and returned.
-     * However, if the print data representation object is itself an
-     * input stream then the print data representation object is simply
-     * returned.
+     * Obtains an input stream for extracting byte print data from this doc. The
+     * {@code Doc} implementation is required to support this method if the
+     * {@code DocFlavor} has one of the following print data representation
+     * classes; otherwise this method returns {@code null}:
+     * <ul>
+     *   <li>{@code byte[]}
+     *   <li>{@code java.io.InputStream}
+     * </ul>
+     * The doc's print data representation object is obtained. Then, an input
+     * stream for reading the print data from the print data representation
+     * object as a stream of bytes is created and returned. However, if the
+     * print data representation object is itself an input stream then the print
+     * data representation object is simply returned.
      *
-     * @return  an {@code InputStream} for reading the print data
-     *          bytes from this doc.  If an input stream cannot be
-     *          provided because this doc does not meet
-     *          the criteria stated above, {@code null} is returned.
-     *
-     * @exception  IOException
-     *     if there was an I/O error while creating the input stream.
+     * @return an {@code InputStream} for reading the print data bytes from this
+     *         doc. If an input stream cannot be provided because this doc does
+     *         not meet the criteria stated above, {@code null} is returned.
+     * @throws IOException if there was an I/O error while creating the input
+     *         stream
      */
     public InputStream getStreamForBytes() throws IOException {
 
@@ -250,5 +253,4 @@
         }
         return inStream;
     }
-
 }
--- a/src/java.desktop/share/classes/javax/print/StreamPrintService.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/StreamPrintService.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -28,43 +28,47 @@
 import java.io.OutputStream;
 
 /**
- * This class extends {@link PrintService} and represents a
- * print service that prints data in different formats to a
- * client-provided output stream.
- * This is principally intended for services where
- * the output format is a document type suitable for viewing
- * or archiving.
- * The output format must be declared as a mime type.
- * This is equivalent to an output document flavor where the
- * representation class is always "java.io.OutputStream"
- * An instance of the {@code StreamPrintService} class is
- * obtained from a {@link StreamPrintServiceFactory} instance.
+ * This class extends {@link PrintService} and represents a print service that
+ * prints data in different formats to a client-provided output stream. This is
+ * principally intended for services where the output format is a document type
+ * suitable for viewing or archiving. The output format must be declared as a
+ * mime type. This is equivalent to an output document flavor where the
+ * representation class is always "java.io.OutputStream" An instance of the
+ * {@code StreamPrintService} class is obtained from a
+ * {@link StreamPrintServiceFactory} instance.
  * <p>
  * Note that a {@code StreamPrintService} is different from a
  * {@code PrintService}, which supports a
- * {@link javax.print.attribute.standard.Destination Destination}
- * attribute.  A {@code StreamPrintService} always requires an output
- * stream, whereas a {@code PrintService} optionally accepts a
- * {@code Destination}. A {@code StreamPrintService}
- * has no default destination for its formatted output.
- * Additionally a {@code StreamPrintService} is expected to generate
-output in
- * a format useful in other contexts.
- * StreamPrintService's are not expected to support the Destination attribute.
+ * {@link javax.print.attribute.standard.Destination Destination} attribute. A
+ * {@code StreamPrintService} always requires an output stream, whereas a
+ * {@code PrintService} optionally accepts a {@code Destination}. A
+ * {@code StreamPrintService} has no default destination for its formatted
+ * output. Additionally a {@code StreamPrintService} is expected to generate
+ * output in a format useful in other contexts. {@code StreamPrintService}'s are
+ * not expected to support the {@code Destination} attribute.
  */
-
 public abstract class StreamPrintService implements PrintService {
 
+    /**
+     * The output stream to which this service will send formatted print data.
+     */
     private OutputStream outStream;
+
+    /**
+     * Whether or not this {@code StreamPrintService} has been disposed.
+     */
     private boolean disposed = false;
 
+    /**
+     * Constructs a {@code StreamPrintService} object.
+     */
     private StreamPrintService() {
     };
 
     /**
-     * Constructs a StreamPrintService object.
+     * Constructs a {@code StreamPrintService} object.
      *
-     * @param out  stream to which to send formatted print data.
+     * @param  out stream to which to send formatted print data
      */
     protected StreamPrintService(OutputStream out) {
         this.outStream = out;
@@ -73,42 +77,44 @@
     /**
      * Gets the output stream.
      *
-     * @return the stream to which this service will send formatted print data.
+     * @return the stream to which this service will send formatted print data
      */
     public OutputStream getOutputStream() {
         return outStream;
     }
 
     /**
-     * Returns the document format emitted by this print service.
-     * Must be in mimetype format, compatible with the mime type
-     * components of DocFlavors @see DocFlavor.
-     * @return mime type identifying the output format.
+     * Returns the document format emitted by this print service. Must be in
+     * mimetype format, compatible with the mime type components of
+     * {@code DocFlavors}
+     *
+     * @return mime type identifying the output format
+     * @see DocFlavor
      */
     public abstract String getOutputFormat();
 
     /**
-     * Disposes this {@code StreamPrintService}.
-     * If a stream service cannot be re-used, it must be disposed
-     * to indicate this. Typically the client will call this method.
-     * Services which write data which cannot meaningfully be appended to
-     * may also dispose the stream. This does not close the stream. It
-     * just marks it as not for further use by this service.
+     * Disposes this {@code StreamPrintService}. If a stream service cannot be
+     * re-used, it must be disposed to indicate this. Typically the client will
+     * call this method. Services which write data which cannot meaningfully be
+     * appended to may also dispose the stream. This does not close the stream.
+     * It just marks it as not for further use by this service.
      */
     public void dispose() {
         disposed = true;
     }
 
     /**
-     * Returns a {@code boolean} indicating whether or not
-     * this {@code StreamPrintService} has been disposed.
-     * If this object has been disposed, will return true.
-     * Used by services and client applications to recognize streams
-     * to which no further data should be written.
-     * @return if this {@code StreamPrintService} has been disposed
+     * Returns a {@code boolean} indicating whether or not this
+     * {@code StreamPrintService} has been disposed. If this object has been
+     * disposed, will return {@code true}. Used by services and client
+     * applications to recognize streams to which no further data should be
+     * written.
+     *
+     * @return {@code true} if this {@code StreamPrintService} has been
+     *         disposed; {@code false} otherwise
      */
     public boolean isDisposed() {
         return disposed;
     }
-
 }
--- a/src/java.desktop/share/classes/javax/print/StreamPrintServiceFactory.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/StreamPrintServiceFactory.java	Thu Aug 31 15:47:34 2017 -0700
@@ -26,40 +26,48 @@
 package javax.print;
 
 import java.io.OutputStream;
-
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
 
-import javax.print.DocFlavor;
+import javax.print.attribute.PrintRequestAttributeSet;
 
 import sun.awt.AppContext;
-import java.util.ServiceLoader;
-import java.util.ServiceConfigurationError;
 
 /**
  * A {@code StreamPrintServiceFactory} is the factory for
- * {@link StreamPrintService} instances,
- * which can print to an output stream in a particular
- * document format described as a mime type.
- * A typical output document format may be Postscript(TM).
+ * {@link StreamPrintService} instances, which can print to an output stream in
+ * a particular document format described as a mime type. A typical output
+ * document format may be Postscript(TM).
  * <p>
- * This class is implemented by a service and located by the
- * implementation using the {@link java.util.ServiceLoader} facility.
+ * This class is implemented by a service and located by the implementation
+ * using the {@link ServiceLoader} facility.
  * <p>
  * Applications locate instances of this class by calling the
  * {@link #lookupStreamPrintServiceFactories(DocFlavor, String)} method.
  * <p>
- * Applications can use a {@code StreamPrintService} obtained from a
- * factory in place of a {@code PrintService} which represents a
- * physical printer device.
+ * Applications can use a {@code StreamPrintService} obtained from a factory in
+ * place of a {@code PrintService} which represents a physical printer device.
  */
-
 public abstract class StreamPrintServiceFactory {
 
+    /**
+     * Contains a list of factories.
+     */
     static class Services {
+
+        /**
+         * The list of factories which will be stored per appcontext.
+         */
         private ArrayList<StreamPrintServiceFactory> listOfFactories = null;
     }
 
+    /**
+     * Returns the services from the current appcontext.
+     *
+     * @return the services
+     */
     private static Services getServices() {
         Services services =
             (Services)AppContext.getAppContext().get(Services.class);
@@ -70,10 +78,20 @@
         return services;
     }
 
+    /**
+     * Returns the list of factories.
+     *
+     * @return the list of factories
+     */
     private static ArrayList<StreamPrintServiceFactory> getListOfFactories() {
         return getServices().listOfFactories;
     }
 
+    /**
+     * Initialize the list of factories.
+     *
+     * @return the list of factories
+     */
     private static ArrayList<StreamPrintServiceFactory> initListOfFactories() {
         ArrayList<StreamPrintServiceFactory> listOfFactories = new ArrayList<>();
         getServices().listOfFactories = listOfFactories;
@@ -81,26 +99,26 @@
     }
 
     /**
-     * Locates factories for print services that can be used with
-     * a print job to output a stream of data in the
-     * format specified by {@code outputMimeType}.
+     * Locates factories for print services that can be used with a print job to
+     * output a stream of data in the format specified by
+     * {@code outputMimeType}.
      * <p>
-     * The {@code outputMimeType} parameter describes the document type that
-     * you want to create, whereas the {@code flavor} parameter describes the
-     * format in which the input data will be provided by the application
-     * to the {@code StreamPrintService}.
+     * The {@code outputMimeType} parameter describes the document type that you
+     * want to create, whereas the {@code flavor} parameter describes the format
+     * in which the input data will be provided by the application to the
+     * {@code StreamPrintService}.
      * <p>
-     * Although null is an acceptable value to use in the lookup of stream
-     * printing services, it's typical to search for a particular
-     * desired format, such as Postscript(TM).
+     * Although {@code null} is an acceptable value to use in the lookup of
+     * stream printing services, it's typical to search for a particular desired
+     * format, such as Postscript(TM).
      *
-     * @param flavor of the input document type - null means match all
-     * types.
-     * @param outputMimeType representing the required output format, used to
-     * identify suitable stream printer factories. A value of null means
-     * match all formats.
-     * @return   matching factories for stream print service instance,
-     *           empty if no suitable factories could be located.
+     * @param  flavor of the input document type - {@code null} means match all
+     *         types
+     * @param  outputMimeType representing the required output format, used to
+     *         identify suitable stream printer factories. A value of
+     *         {@code null} means match all formats.
+     * @return matching factories for stream print service instance, empty if no
+     *         suitable factories could be located
      */
      public static StreamPrintServiceFactory[]
          lookupStreamPrintServiceFactories(DocFlavor flavor,
@@ -110,55 +128,56 @@
          return list.toArray(new StreamPrintServiceFactory[list.size()]);
      }
 
-    /** Queries the factory for the document format that is emitted
-     * by printers obtained from this factory.
+    /**
+     * Queries the factory for the document format that is emitted by printers
+     * obtained from this factory.
      *
-     * @return the output format described as a mime type.
+     * @return the output format described as a mime type
      */
     public abstract String getOutputFormat();
 
     /**
-     * Queries the factory for the document flavors that can be accepted
-     * by printers obtained from this factory.
-     * @return array of supported doc flavors.
+     * Queries the factory for the document flavors that can be accepted by
+     * printers obtained from this factory.
+     *
+     * @return array of supported doc flavors
      */
     public abstract DocFlavor[] getSupportedDocFlavors();
 
     /**
-     * Returns a {@code StreamPrintService} that can print to
-     * the specified output stream.
-     * The output stream is created and managed by the application.
-     * It is the application's responsibility to close the stream and
-     * to ensure that this Printer is not reused.
-     * The application should not close this stream until any print job
-     * created from the printer is complete. Doing so earlier may generate
-     * a {@code PrinterException} and an event indicating that the
-     * job failed.
+     * Returns a {@code StreamPrintService} that can print to the specified
+     * output stream. The output stream is created and managed by the
+     * application. It is the application's responsibility to close the stream
+     * and to ensure that this {@code Printer} is not reused. The application
+     * should not close this stream until any print job created from the printer
+     * is complete. Doing so earlier may generate a {@code PrinterException} and
+     * an event indicating that the job failed.
      * <p>
-     * Whereas a {@code PrintService} connected to a physical printer
-     * can be reused,
-     * a {@code StreamPrintService} connected to a stream cannot.
-     * The underlying {@code StreamPrintService} may be disposed by
-     * the print system with
-     * the {@link StreamPrintService#dispose() dispose} method
-     * before returning from the
-     * {@link DocPrintJob#print(Doc, javax.print.attribute.PrintRequestAttributeSet) print}
-     * method of {@code DocPrintJob} so that the print system knows
-     * this printer is no longer usable.
-     * This is equivalent to a physical printer going offline - permanently.
-     * Applications may supply a null print stream to create a queryable
-     * service. It is not valid to create a PrintJob for such a stream.
-     * Implementations which allocate resources on construction should examine
-     * the stream and may wish to only allocate resources if the stream is
-     * non-null.
+     * Whereas a {@code PrintService} connected to a physical printer can be
+     * reused, a {@code StreamPrintService} connected to a stream cannot. The
+     * underlying {@code StreamPrintService} may be disposed by the print system
+     * with the {@link StreamPrintService#dispose() dispose} method before
+     * returning from the
+     * {@link DocPrintJob#print(Doc, PrintRequestAttributeSet) print} method of
+     * {@code DocPrintJob} so that the print system knows this printer is no
+     * longer usable. This is equivalent to a physical printer going offline -
+     * permanently. Applications may supply a {@code null} print stream to
+     * create a queryable service. It is not valid to create a {@code PrintJob}
+     * for such a stream. Implementations which allocate resources on
+     * construction should examine the stream and may wish to only allocate
+     * resources if the stream is {@code non-null}.
      *
-     * @param out destination stream for generated output.
-     * @return a PrintService which will generate the format specified by the
-     * DocFlavor supported by this Factory.
+     * @param  out destination stream for generated output
+     * @return a {@code PrintService} which will generate the format specified
+     *         by the {@code DocFlavor} supported by this factory
      */
     public abstract StreamPrintService getPrintService(OutputStream out);
 
-
+    /**
+     * Returns all factories for print services.
+     *
+     * @return all factories
+     */
     private static ArrayList<StreamPrintServiceFactory> getAllFactories() {
         synchronized (StreamPrintServiceFactory.class) {
 
@@ -198,6 +217,15 @@
         }
     }
 
+    /**
+     * Checks if the array of {@code flavors} contains the {@code flavor}
+     * object.
+     *
+     * @param  flavor the flavor
+     * @param  flavors the array of flavors
+     * @return {@code true} if {@code flavors} contains the {@code flavor}
+     *         object; {@code false} otherwise
+     */
     private static boolean isMember(DocFlavor flavor, DocFlavor[] flavors) {
         for (int f=0; f<flavors.length; f++ ) {
             if (flavor.equals(flavors[f])) {
@@ -207,6 +235,21 @@
         return false;
     }
 
+    /**
+     * Utility method for {@link #lookupStreamPrintServiceFactories}.
+     * <p>
+     * Locates factories for print services that can be used with a print job to
+     * output a stream of data in the format specified by
+     * {@code outputMimeType}.
+     *
+     * @param  flavor of the input document type - {@code null} means match all
+     *         types
+     * @param  outType representing the required output format, used to identify
+     *         suitable stream printer factories. A value of {@code null} means
+     *         match all formats.
+     * @return matching factories for stream print service instance, empty if no
+     *         suitable factories could be located
+     */
     private static ArrayList<StreamPrintServiceFactory> getFactories(DocFlavor flavor, String outType) {
 
         if (flavor == null && outType == null) {
@@ -227,5 +270,4 @@
 
         return list;
     }
-
 }
--- a/src/java.desktop/share/classes/javax/print/URIException.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/URIException.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -28,46 +28,45 @@
 import java.net.URI;
 
 /**
- * Interface URIException is a mixin interface which a subclass of {@link
- * PrintException PrintException} can implement to report an error condition
- * involving a URI address. The Print Service API does not define any print
- * exception classes that implement interface URIException, that being left to
- * the Print Service implementor's discretion.
- *
+ * Interface {@code URIException} is a mixin interface which a subclass of
+ * {@link PrintException PrintException} can implement to report an error
+ * condition involving a {@code URI} address. The Print Service API does not
+ * define any print exception classes that implement interface
+ * {@code URIException}, that being left to the Print Service implementor's
+ * discretion.
  */
-
 public interface URIException {
 
     /**
-     * Indicates that the printer cannot access the URI address.
-     * For example, the printer might report this error if it goes to get
-     * the print data and cannot even establish a connection to the
-     * URI address.
+     * Indicates that the printer cannot access the {@code URI} address. For
+     * example, the printer might report this error if it goes to get the print
+     * data and cannot even establish a connection to the {@code URI} address.
      */
     public static final int URIInaccessible = 1;
 
     /**
-     * Indicates that the printer does not support the URI
-     * scheme ("http", "ftp", etc.) in the URI address.
+     * Indicates that the printer does not support the {@code URI} scheme
+     * ("http", "ftp", etc.) in the {@code URI} address.
      */
     public static final int URISchemeNotSupported = 2;
 
     /**
-     * Indicates any kind of problem not specifically identified
-     * by the other reasons.
+     * Indicates any kind of problem not specifically identified by the other
+     * reasons.
      */
     public static final int URIOtherProblem = -1;
 
     /**
-     * Return the URI.
-     * @return the URI that is the cause of this exception.
+     * Returns the {@code URI}.
+     *
+     * @return the {@code URI} that is the cause of this exception
      */
     public URI getUnsupportedURI();
 
     /**
-     * Return the reason for the event.
-     * @return one of the predefined reasons enumerated in this interface.
+     * Returns the reason of this exception.
+     *
+     * @return one of the predefined reasons enumerated in this interface
      */
     public int getReason();
-
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/Attribute.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/Attribute.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -28,35 +28,34 @@
 import java.io.Serializable;
 
 /**
- * Interface Attribute is the base interface implemented by any and every
- * printing attribute class to indicate that the class represents a
+ * Interface {@code Attribute} is the base interface implemented by any and
+ * every printing attribute class to indicate that the class represents a
  * printing attribute. All printing attributes are serializable.
  *
- * @author  David Mendenhall
- * @author  Alan Kaminsky
+ * @author David Mendenhall
+ * @author Alan Kaminsky
  */
 public interface Attribute extends Serializable {
 
-  /**
-   * Get the printing attribute class which is to be used as the "category"
-   * for this printing attribute value when it is added to an attribute set.
-   *
-   * @return  Printing attribute class (category), an instance of class
-   *          {@link java.lang.Class java.lang.Class}.
-   */
-  public Class<? extends Attribute> getCategory();
+    /**
+     * Get the printing attribute class which is to be used as the "category"
+     * for this printing attribute value when it is added to an attribute set.
+     *
+     * @return printing attribute class (category), an instance of class
+     *         {@link Class java.lang.Class}
+     */
+    public Class<? extends Attribute> getCategory();
 
-  /**
-   * Get the name of the category of which this attribute value is an
-   * instance.
-   * <P>
-   * <I>Note:</I> This method is intended to provide a default, nonlocalized
-   * string for the attribute's category. If two attribute objects return the
-   * same category from the {@code getCategory()} method, they should
-   * return the same name from the {@code getName()} method.
-   *
-   * @return  Attribute category name.
-   */
-  public String getName();
-
+    /**
+     * Get the name of the category of which this attribute value is an
+     * instance.
+     * <p>
+     * <i>Note:</i> This method is intended to provide a default, nonlocalized
+     * string for the attribute's category. If two attribute objects return the
+     * same category from the {@code getCategory()} method, they should return
+     * the same name from the {@code getName()} method.
+     *
+     * @return attribute category name
+     */
+    public String getName();
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/AttributeSet.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/AttributeSet.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -26,284 +26,240 @@
 package javax.print.attribute;
 
 /**
- * Interface AttributeSet specifies the interface for a set of printing
+ * Interface {@code AttributeSet} specifies the interface for a set of printing
  * attributes. A printing attribute is an object whose class implements
  * interface {@link Attribute Attribute}.
- * <P>
- * An attribute set contains a group of <I>attribute values,</I>
- * where duplicate values are not allowed in the set.
- * Furthermore, each value in an attribute set is
- * a member of some <I>category,</I> and at most one value in any particular
- * category is allowed in the set. For an attribute set, the values are {@link
- * Attribute Attribute} objects, and the categories are {@link java.lang.Class
- * Class} objects. An attribute's category is the class (or interface) at the
- * root of the class hierarchy for that kind of attribute. Note that an
- * attribute object's category may be a superclass of the attribute object's
- * class rather than the attribute object's class itself. An attribute
- * object's
- * category is determined by calling the {@link Attribute#getCategory()
- * getCategory()} method defined in interface {@link Attribute
- * Attribute}.
- * <P>
- * The interfaces of an AttributeSet resemble those of the Java Collections
- * API's java.util.Map interface, but is more restrictive in the types
- * it will accept, and combines keys and values into an Attribute.
- * <P>
- * Attribute sets are used in several places in the Print Service API. In
- * each context, only certain kinds of attributes are allowed to appear in the
+ * <p>
+ * An attribute set contains a group of <i>attribute values,</i> where duplicate
+ * values are not allowed in the set. Furthermore, each value in an attribute
+ * set is a member of some <i>category,</i> and at most one value in any
+ * particular category is allowed in the set. For an attribute set, the values
+ * are {@link Attribute Attribute} objects, and the categories are
+ * {@link Class Class} objects. An attribute's category is the class (or
+ * interface) at the root of the class hierarchy for that kind of attribute.
+ * Note that an attribute object's category may be a superclass of the attribute
+ * object's class rather than the attribute object's class itself. An attribute
+ * object's category is determined by calling the
+ * {@link Attribute#getCategory() getCategory()} method defined in interface
+ * {@link Attribute Attribute}.
+ * <p>
+ * The interfaces of an {@code AttributeSet} resemble those of the Java
+ * Collections API's {@code java.util.Map} interface, but is more restrictive in
+ * the types it will accept, and combines keys and values into an
+ * {@code Attribute}.
+ * <p>
+ * Attribute sets are used in several places in the Print Service API. In each
+ * context, only certain kinds of attributes are allowed to appear in the
  * attribute set, as determined by the tagging interfaces which the attribute
- * class implements -- {@link DocAttribute DocAttribute}, {@link
- * PrintRequestAttribute PrintRequestAttribute}, {@link PrintJobAttribute
- * PrintJobAttribute}, and {@link PrintServiceAttribute
- * PrintServiceAttribute}.
+ * class implements -- {@link DocAttribute DocAttribute},
+ * {@link PrintRequestAttribute PrintRequestAttribute},
+ * {@link PrintJobAttribute PrintJobAttribute}, and
+ * {@link PrintServiceAttribute PrintServiceAttribute}.
  * There are four specializations of an attribute set that are restricted to
- * contain just one of the four kinds of attribute -- {@link DocAttributeSet
- * DocAttributeSet}, {@link PrintRequestAttributeSet
- * PrintRequestAttributeSet},
- * {@link PrintJobAttributeSet PrintJobAttributeSet}, and {@link
- * PrintServiceAttributeSet PrintServiceAttributeSet}, respectively. Note that
- * many attribute classes implement more than one tagging interface and so may
- * appear in more than one context.
- * <UL>
- * <LI>
- * A {@link DocAttributeSet DocAttributeSet}, containing {@link DocAttribute
- * DocAttribute}s, specifies the characteristics of an individual doc and the
- * print job settings to be applied to an individual doc.
- *
- * <LI>
- * A {@link PrintRequestAttributeSet PrintRequestAttributeSet}, containing
- * {@link PrintRequestAttribute PrintRequestAttribute}s, specifies the
- * settings
- * to be applied to a whole print job and to all the docs in the print job.
- *
- * <LI>
- * A {@link PrintJobAttributeSet PrintJobAttributeSet}, containing {@link
- * PrintJobAttribute PrintJobAttribute}s, reports the status of a print job.
- *
- * <LI>
- * A {@link PrintServiceAttributeSet PrintServiceAttributeSet}, containing
- * {@link PrintServiceAttribute PrintServiceAttribute}s, reports the status of
- *  a Print Service instance.
- * </UL>
- * <P>
+ * contain just one of the four kinds of attribute --
+ * {@link DocAttributeSet DocAttributeSet},
+ * {@link PrintRequestAttributeSet PrintRequestAttributeSet},
+ * {@link PrintJobAttributeSet PrintJobAttributeSet}, and
+ * {@link PrintServiceAttributeSet PrintServiceAttributeSet}, respectively. Note
+ * that many attribute classes implement more than one tagging interface and so
+ * may appear in more than one context.
+ * <ul>
+ *   <li>A {@link DocAttributeSet DocAttributeSet}, containing
+ *   {@link DocAttribute DocAttribute}s, specifies the characteristics of an
+ *   individual doc and the print job settings to be applied to an individual
+ *   doc.
+ *   <li>A {@link PrintRequestAttributeSet PrintRequestAttributeSet}, containing
+ *   {@link PrintRequestAttribute PrintRequestAttribute}s, specifies the
+ *   settings to be applied to a whole print job and to all the docs in the
+ *   print job.
+ *   <li>A {@link PrintJobAttributeSet PrintJobAttributeSet}, containing
+ *   {@link PrintJobAttribute PrintJobAttribute}s, reports the status of a print
+ *   job.
+ *   <li>A {@link PrintServiceAttributeSet PrintServiceAttributeSet}, containing
+ *   {@link PrintServiceAttribute PrintServiceAttribute}s, reports the status of
+ *   a Print Service instance.
+ * </ul>
  * In some contexts, the client is only allowed to examine an attribute set's
  * contents but not change them (the set is read-only). In other places, the
  * client is allowed both to examine and to change an attribute set's contents
  * (the set is read-write). For a read-only attribute set, calling a mutating
- * operation throws an UnmodifiableSetException.
- * <P>
+ * operation throws an {@code UnmodifiableSetException}.
+ * <p>
  * The Print Service API provides one implementation of interface
- * AttributeSet, class {@link HashAttributeSet HashAttributeSet}.
- * A client can use class {@link
- * HashAttributeSet HashAttributeSet} or provide its own implementation of
- * interface AttributeSet. The Print Service API also provides
- * implementations of interface AttributeSet's subinterfaces -- classes {@link
- * HashDocAttributeSet HashDocAttributeSet},
- * {@link HashPrintRequestAttributeSet
- * HashPrintRequestAttributeSet}, {@link HashPrintJobAttributeSet
- * HashPrintJobAttributeSet}, and {@link HashPrintServiceAttributeSet
- * HashPrintServiceAttributeSet}.
+ * {@code AttributeSet}, class {@link HashAttributeSet HashAttributeSet}. A
+ * client can use class {@link HashAttributeSet HashAttributeSet} or provide its
+ * own implementation of interface {@code AttributeSet}. The Print Service API
+ * also provides implementations of interface {@code AttributeSet}'s
+ * subinterfaces -- classes
+ * {@link HashDocAttributeSet HashDocAttributeSet},
+ * {@link HashPrintRequestAttributeSet HashPrintRequestAttributeSet},
+ * {@link HashPrintJobAttributeSet HashPrintJobAttributeSet}, and
+ * {@link HashPrintServiceAttributeSet HashPrintServiceAttributeSet}.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public interface AttributeSet {
 
-
     /**
      * Returns the attribute value which this attribute set contains in the
-     * given attribute category. Returns {@code null} if this attribute set
-     * does not contain any attribute value in the given attribute category.
+     * given attribute category. Returns {@code null} if this attribute set does
+     * not contain any attribute value in the given attribute category.
      *
-     * @param  category  Attribute category whose associated attribute value
-     *                   is to be returned. It must be a
-     *                   {@link java.lang.Class Class}
-     *                   that implements interface {@link Attribute
-     *                   Attribute}.
-     *
-     * @return  The attribute value in the given attribute category contained
-     *          in this attribute set, or {@code null} if this attribute set
-     *          does not contain any attribute value in the given attribute
-     *          category.
-     *
-     * @throws  NullPointerException
-     *     (unchecked exception) Thrown if the {@code category} is null.
-     * @throws  ClassCastException
-     *     (unchecked exception) Thrown if the {@code category} is not a
-     *     {@link java.lang.Class Class} that implements interface {@link
-     *     Attribute Attribute}.
+     * @param  category attribute category whose associated attribute value is
+     *         to be returned. It must be a {@link Class Class} that implements
+     *         interface {@link Attribute Attribute}.
+     * @return the attribute value in the given attribute category contained in
+     *         this attribute set, or {@code null} if this attribute set does
+     *         not contain any attribute value in the given attribute category
+     * @throws NullPointerException if the {@code category} is {@code null}
+     * @throws ClassCastException if the {@code category} is not a
+     *         {@link Class Class} that implements interface
+     *         {@link Attribute Attribute}
      */
     public Attribute get(Class<?> category);
 
     /**
-     * Adds the specified attribute to this attribute set if it is not
-     * already present, first removing any existing value in the same
-     * attribute category as the specified attribute value.
+     * Adds the specified attribute to this attribute set if it is not already
+     * present, first removing any existing value in the same attribute category
+     * as the specified attribute value.
      *
-     * @param  attribute  Attribute value to be added to this attribute set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of the
-     *          call, i.e., the given attribute value was not already a member
-     *          of this attribute set.
-     *
-     * @throws  NullPointerException
-     *     (unchecked exception) Thrown if the {@code attribute} is null.
-     * @throws  UnmodifiableSetException
-     *     (unchecked exception) Thrown if this attribute set does not support
-     *     the {@code add()} operation.
+     * @param  attribute attribute value to be added to this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
+     *         call, i.e., the given attribute value was not already a member of
+     *         this attribute set
+     * @throws NullPointerException if the {@code attribute} is {@code null}
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code add()} operation
      */
     public boolean add(Attribute attribute);
 
-
     /**
      * Removes any attribute for this category from this attribute set if
-     * present. If {@code category} is null, then
-     * {@code remove()} does nothing and returns {@code false}.
+     * present. If {@code category} is {@code null}, then {@code remove()} does
+     * nothing and returns {@code false}.
      *
-     * @param  category Attribute category to be removed from this
-     *                  attribute set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of the
+     * @param  category attribute category to be removed from this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
      *         call, i.e., the given attribute value had been a member of this
-     *          attribute set.
-     *
-     * @throws  UnmodifiableSetException
-     *     (unchecked exception) Thrown if this attribute set does not support
-     *     the {@code remove()} operation.
+     *         attribute set
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code remove()} operation
      */
     public boolean remove(Class<?> category);
 
     /**
-     * Removes the specified attribute from this attribute set if
-     * present. If {@code attribute} is null, then
-     * {@code remove()} does nothing and returns {@code false}.
+     * Removes the specified attribute from this attribute set if present. If
+     * {@code attribute} is {@code null}, then {@code remove()} does nothing and
+     * returns {@code false}.
      *
-     * @param  attribute Attribute value to be removed from this attribute set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of the
+     * @param  attribute attribute value to be removed from this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
      *         call, i.e., the given attribute value had been a member of this
-     *          attribute set.
-     *
-     * @throws  UnmodifiableSetException
-     *     (unchecked exception) Thrown if this attribute set does not support
-     *     the {@code remove()} operation.
+     *         attribute set
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code remove()} operation
      */
     public boolean remove(Attribute attribute);
 
     /**
-     * Returns {@code true} if this attribute set contains an
-     * attribute for the specified category.
+     * Returns {@code true} if this attribute set contains an attribute for the
+     * specified category.
      *
-     * @param  category whose presence in this attribute set is
-     *            to be tested.
-     *
-     * @return  {@code true} if this attribute set contains an attribute
-     *         value for the specified category.
+     * @param  category whose presence in this attribute set is to be tested
+     * @return {@code true} if this attribute set contains an attribute value
+     *         for the specified category
      */
     public boolean containsKey(Class<?> category);
 
     /**
-     * Returns {@code true} if this attribute set contains the given
-     * attribute value.
+     * Returns {@code true} if this attribute set contains the given attribute
+     * value.
      *
-     * @param  attribute  Attribute value whose presence in this
-     * attribute set is to be tested.
-     *
-     * @return  {@code true} if this attribute set contains the given
-     *      attribute  value.
+     * @param  attribute attribute value whose presence in this attribute set is
+     *         to be tested
+     * @return {@code true} if this attribute set contains the given attribute
+     *         value
      */
     public boolean containsValue(Attribute attribute);
 
     /**
-     * Adds all of the elements in the specified set to this attribute.
-     * The outcome is the same as if the =
-     * {@link #add(Attribute) add(Attribute)}
+     * Adds all of the elements in the specified set to this attribute. The
+     * outcome is the same as if the = {@link #add(Attribute) add(Attribute)}
      * operation had been applied to this attribute set successively with each
-     * element from the specified set.
-     * The behavior of the {@code addAll(AttributeSet)}
-     * operation is unspecified if the specified set is modified while
-     * the operation is in progress.
-     * <P>
-     * If the {@code addAll(AttributeSet)} operation throws an exception,
-     * the effect on this attribute set's state is implementation dependent;
-     * elements from the specified set before the point of the exception may
-     * or may not have been added to this attribute set.
+     * element from the specified set. The behavior of the
+     * {@code addAll(AttributeSet)} operation is unspecified if the specified
+     * set is modified while the operation is in progress.
+     * <p>
+     * If the {@code addAll(AttributeSet)} operation throws an exception, the
+     * effect on this attribute set's state is implementation dependent;
+     * elements from the specified set before the point of the exception may or
+     * may not have been added to this attribute set.
      *
-     * @param  attributes  whose elements are to be added to this attribute
-     *            set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of the
-     *          call.
-     *
-     * @throws  UnmodifiableSetException
-     *     (Unchecked exception) Thrown if this attribute set does not support
-     *     the {@code addAll(AttributeSet)} method.
-     * @throws  NullPointerException
-     *     (Unchecked exception) Thrown if some element in the specified
-     *     set is null.
-     *
+     * @param  attributes whose elements are to be added to this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
+     *         call
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code addAll(AttributeSet)} method
+     * @throws NullPointerException if some element in the specified set is
+     *         {@code null}
      * @see #add(Attribute)
      */
     public boolean addAll(AttributeSet attributes);
 
     /**
-     * Returns the number of attributes in this attribute set. If this
-     * attribute set contains more than {@code Integer.MAX_VALUE} elements,
-     * returns  {@code Integer.MAX_VALUE}.
+     * Returns the number of attributes in this attribute set. If this attribute
+     * set contains more than {@code Integer.MAX_VALUE} elements, returns
+     * {@code Integer.MAX_VALUE}.
      *
-     * @return  The number of attributes in this attribute set.
+     * @return the number of attributes in this attribute set
      */
     public int size();
 
     /**
      * Returns an array of the attributes contained in this set.
-     * @return the Attributes contained in this set as an array, zero length
-     * if the AttributeSet is empty.
+     *
+     * @return the {@code Attributes} contained in this set as an array, zero
+     *         length if the {@code AttributeSet} is empty
      */
     public Attribute[] toArray();
 
-
     /**
      * Removes all attributes from this attribute set.
      *
-     * @throws  UnmodifiableSetException
-     *   (unchecked exception) Thrown if this attribute set does not support
-     *     the {@code clear()} operation.
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code clear()} operation
      */
     public void clear();
 
     /**
-     * Returns true if this attribute set contains no attributes.
+     * Returns {@code true} if this attribute set contains no attributes.
      *
-     * @return true if this attribute set contains no attributes.
+     * @return {@code true} if this attribute set contains no attributes
      */
     public boolean isEmpty();
 
     /**
      * Compares the specified object with this attribute set for equality.
-     * Returns {@code true} if the given object is also an attribute set and
-     * the two attribute sets contain the same attribute category-attribute
-     * value mappings. This ensures that the
-     * {@code equals()} method works properly across different
-     * implementations of the AttributeSet interface.
+     * Returns {@code true} if the given object is also an attribute set and the
+     * two attribute sets contain the same attribute category-attribute value
+     * mappings. This ensures that the {@code equals()} method works properly
+     * across different implementations of the {@code AttributeSet} interface.
      *
-     * @param  object to be compared for equality with this attribute set.
-     *
-     * @return  {@code true} if the specified object is equal to this
-     *       attribute   set.
+     * @param  object to be compared for equality with this attribute set
+     * @return {@code true} if the specified object is equal to this attribute
+     *         set
      */
     public boolean equals(Object object);
 
     /**
      * Returns the hash code value for this attribute set. The hash code of an
-     * attribute set is defined to be the sum of the hash codes of each entry
-     * in the AttributeSet.
-     * This ensures that {@code t1.equals(t2)} implies that
-     * {@code t1.hashCode()==t2.hashCode()} for any two attribute sets
+     * attribute set is defined to be the sum of the hash codes of each entry in
+     * the {@code AttributeSet}. This ensures that {@code t1.equals(t2)} implies
+     * that {@code t1.hashCode()==t2.hashCode()} for any two attribute sets
      * {@code t1} and {@code t2}, as required by the general contract of
-     * {@link java.lang.Object#hashCode() Object.hashCode()}.
+     * {@link Object#hashCode() Object.hashCode()}.
      *
-     * @return  The hash code value for this attribute set.
+     * @return the hash code value for this attribute set
      */
     public int hashCode();
-
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/AttributeSetUtilities.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/AttributeSetUtilities.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,65 +23,75 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 import java.io.Serializable;
 
 /**
- * Class AttributeSetUtilities provides static methods for manipulating
- * AttributeSets.
+ * Class {@code AttributeSetUtilities} provides static methods for manipulating
+ * {@code AttributeSets}.
  * <ul>
- * <li>Methods for creating unmodifiable and synchronized views of attribute
- * sets.
- * <li>operations useful for building
- * implementations of interface {@link AttributeSet AttributeSet}
+ *   <li>Methods for creating unmodifiable and synchronized views of attribute
+ *   sets.
+ *   <li>operations useful for building implementations of interface
+ *   {@link AttributeSet AttributeSet}
  * </ul>
- * <P>
- * An <B>unmodifiable view</B> <I>U</I> of an AttributeSet <I>S</I> provides a
- * client with "read-only" access to <I>S</I>. Query operations on <I>U</I>
- * "read through" to <I>S</I>; thus, changes in <I>S</I> are reflected in
- * <I>U</I>. However, any attempt to modify <I>U</I>,
- *  results in an UnmodifiableSetException.
- * The unmodifiable view object <I>U</I> will be serializable if the
- * attribute set object <I>S</I> is serializable.
- * <P>
- * A <B>synchronized view</B> <I>V</I> of an attribute set <I>S</I> provides a
- * client with synchronized (multiple thread safe) access to <I>S</I>. Each
- * operation of <I>V</I> is synchronized using <I>V</I> itself as the lock
- * object and then merely invokes the corresponding operation of <I>S</I>. In
- * order to guarantee mutually exclusive access, it is critical that all
- * access to <I>S</I> is accomplished through <I>V</I>. The synchronized view
- * object <I>V</I> will be serializable if the attribute set object <I>S</I>
- * is serializable.
- * <P>
- * As mentioned in the package description of javax.print, a null reference
- * parameter to methods is
- * incorrect unless explicitly documented on the method as having a meaningful
- * interpretation.  Usage to the contrary is incorrect coding and may result in
- * a run time exception either immediately
- * or at some later time. IllegalArgumentException and NullPointerException
- * are examples of typical and acceptable run time exceptions for such cases.
+ * An <b>unmodifiable view</b> <i>U</i> of an {@code AttributeSet} <i>S</i>
+ * provides a client with "read-only" access to <i>S</i>. Query operations on
+ * <i>U</i> "read through" to <i>S</i>; thus, changes in <i>S</i> are reflected
+ * in <i>U</i>. However, any attempt to modify <i>U</i>, results in an
+ * {@code UnmodifiableSetException}. The unmodifiable view object <i>U</i> will
+ * be serializable if the attribute set object <i>S</i> is serializable.
+ * <p>
+ * A <b>synchronized view</b> <i>V</i> of an attribute set <i>S</i> provides a
+ * client with synchronized (multiple thread safe) access to <i>S</i>. Each
+ * operation of <i>V</i> is synchronized using <i>V</i> itself as the lock
+ * object and then merely invokes the corresponding operation of <i>S</i>. In
+ * order to guarantee mutually exclusive access, it is critical that all access
+ * to <i>S</i> is accomplished through <i>V</i>. The synchronized view object
+ * <i>V</i> will be serializable if the attribute set object <i>S</i> is
+ * serializable.
+ * <p>
+ * As mentioned in the package description of {@code javax.print}, a
+ * {@code null} reference parameter to methods is incorrect unless explicitly
+ * documented on the method as having a meaningful interpretation. Usage to the
+ * contrary is incorrect coding and may result in a run time exception either
+ * immediately or at some later time. {@code IllegalArgumentException} and
+ * {@code NullPointerException} are examples of typical and acceptable run time
+ * exceptions for such cases.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public final class AttributeSetUtilities {
 
-    /* Suppress default constructor, ensuring non-instantiability.
+    /**
+     * Suppress default constructor, ensuring non-instantiability.
      */
     private AttributeSetUtilities() {
     }
 
     /**
-      * @serial include
-      */
+     * Unmodifiable view of {@code AttributeSet}.
+     *
+     * @serial include
+     */
     private static class UnmodifiableAttributeSet
         implements AttributeSet, Serializable {
+
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = -6131802583863447813L;
 
+        /**
+         * The attribute set.
+         */
         private AttributeSet attrset;
 
-        /* Unmodifiable view of the underlying attribute set.
+        /**
+         * Constructs unmodifiable view of the underlying attribute set.
+         *
+         * @param  attributeSet the attribute set
          */
         public UnmodifiableAttributeSet(AttributeSet attributeSet) {
 
@@ -139,17 +149,27 @@
         public int hashCode() {
             return attrset.hashCode();
         }
-
     }
 
     /**
-      * @serial include
-      */
+     * Unmodifiable view of {@code DocAttributeSet}.
+     *
+     * @serial include
+     */
     private static class UnmodifiableDocAttributeSet
         extends UnmodifiableAttributeSet
         implements DocAttributeSet, Serializable {
+
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = -6349408326066898956L;
 
+        /**
+         * Constructs a new unmodifiable doc attribute set.
+         *
+         * @param  attributeSet the doc attribute set
+         */
         public UnmodifiableDocAttributeSet(DocAttributeSet attributeSet) {
 
             super (attributeSet);
@@ -157,13 +177,25 @@
     }
 
     /**
-      * @serial include
-      */
+     * Unmodifiable view of {@code PrintRequestAttributeSet}.
+     *
+     * @serial include
+     */
     private static class UnmodifiablePrintRequestAttributeSet
         extends UnmodifiableAttributeSet
         implements PrintRequestAttributeSet, Serializable
     {
+
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = 7799373532614825073L;
+
+        /**
+         * Constructs a new unmodifiable print request attribute set.
+         *
+         * @param  attributeSet the print request attribute set
+         */
         public UnmodifiablePrintRequestAttributeSet
             (PrintRequestAttributeSet attributeSet) {
 
@@ -172,13 +204,24 @@
     }
 
     /**
-      * @serial include
-      */
+     * Unmodifiable view of {@code PrintJobAttributeSet}.
+     *
+     * @serial include
+     */
     private static class UnmodifiablePrintJobAttributeSet
         extends UnmodifiableAttributeSet
         implements PrintJobAttributeSet, Serializable
     {
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = -8002245296274522112L;
+
+        /**
+         * Constructs a new unmodifiable print job attribute set.
+         *
+         * @param  attributeSet the print job attribute set
+         */
         public UnmodifiablePrintJobAttributeSet
             (PrintJobAttributeSet attributeSet) {
 
@@ -187,13 +230,24 @@
     }
 
     /**
-      * @serial include
-      */
+     * Unmodifiable view of {@code PrintServiceAttributeSet}.
+     *
+     * @serial include
+     */
     private static class UnmodifiablePrintServiceAttributeSet
         extends UnmodifiableAttributeSet
         implements PrintServiceAttributeSet, Serializable
     {
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = -7112165137107826819L;
+
+        /**
+         * Constructs a new unmodifiable print service attribute set.
+         *
+         * @param  attributeSet the print service attribute set
+         */
         public UnmodifiablePrintServiceAttributeSet
             (PrintServiceAttributeSet attributeSet) {
 
@@ -204,12 +258,9 @@
     /**
      * Creates an unmodifiable view of the given attribute set.
      *
-     * @param  attributeSet  Underlying attribute set.
-     *
-     * @return  Unmodifiable view of {@code attributeSet}.
-     *
-     * @exception  NullPointerException
-     *     Thrown if {@code attributeSet} is null. Null is never a
+     * @param  attributeSet underlying attribute set
+     * @return unmodifiable view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static AttributeSet unmodifiableView(AttributeSet attributeSet) {
         if (attributeSet == null) {
@@ -222,12 +273,9 @@
     /**
      * Creates an unmodifiable view of the given doc attribute set.
      *
-     * @param  attributeSet  Underlying doc attribute set.
-     *
-     * @return  Unmodifiable view of {@code attributeSet}.
-     *
-     * @exception  NullPointerException
-     *     Thrown if {@code attributeSet} is null.
+     * @param  attributeSet underlying doc attribute set
+     * @return unmodifiable view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static DocAttributeSet unmodifiableView
         (DocAttributeSet attributeSet) {
@@ -240,12 +288,9 @@
     /**
      * Creates an unmodifiable view of the given print request attribute set.
      *
-     * @param  attributeSet  Underlying print request attribute set.
-     *
-     * @return  Unmodifiable view of {@code attributeSet}.
-     *
-     * @exception  NullPointerException
-     *     Thrown if {@code attributeSet} is null.
+     * @param  attributeSet underlying print request attribute set
+     * @return unmodifiable view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static PrintRequestAttributeSet
         unmodifiableView(PrintRequestAttributeSet attributeSet) {
@@ -258,12 +303,9 @@
     /**
      * Creates an unmodifiable view of the given print job attribute set.
      *
-     * @param  attributeSet  Underlying print job attribute set.
-     *
-     * @return  Unmodifiable view of {@code attributeSet}.
-     *
-     * @exception  NullPointerException
-     *     Thrown if {@code attributeSet} is null.
+     * @param  attributeSet underlying print job attribute set
+     * @return unmodifiable view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static PrintJobAttributeSet
         unmodifiableView(PrintJobAttributeSet attributeSet) {
@@ -276,12 +318,9 @@
     /**
      * Creates an unmodifiable view of the given print service attribute set.
      *
-     * @param  attributeSet  Underlying print service attribute set.
-     *
-     * @return  Unmodifiable view of {@code attributeSet}.
-     *
-     * @exception  NullPointerException
-     *     Thrown if {@code attributeSet} is null.
+     * @param  attributeSet underlying print service attribute set
+     * @return unmodifiable view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static PrintServiceAttributeSet
         unmodifiableView(PrintServiceAttributeSet attributeSet) {
@@ -292,14 +331,28 @@
     }
 
     /**
-      * @serial include
-      */
+     * Synchronized view of {@code AttributeSet}.
+     *
+     * @serial include
+     */
     private static class SynchronizedAttributeSet
                         implements AttributeSet, Serializable {
+
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = 8365731020128564925L;
 
+        /**
+         * The attribute set.
+         */
         private AttributeSet attrset;
 
+        /**
+         * Constructs a new synchronized attribute set.
+         *
+         * @param  attributeSet the attribute set
+         */
         public SynchronizedAttributeSet(AttributeSet attributeSet) {
             attrset = attributeSet;
         }
@@ -358,26 +411,48 @@
     }
 
     /**
-      * @serial include
-      */
+     * Synchronized view of {@code DocAttributeSet}.
+     *
+     * @serial include
+     */
     private static class SynchronizedDocAttributeSet
         extends SynchronizedAttributeSet
         implements DocAttributeSet, Serializable {
+
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = 6455869095246629354L;
 
+        /**
+         * Constructs a new synchronized doc attribute set.
+         *
+         * @param  attributeSet the doc attribute set
+         */
         public SynchronizedDocAttributeSet(DocAttributeSet attributeSet) {
             super(attributeSet);
         }
     }
 
     /**
-      * @serial include
-      */
+     * Synchronized view of {@code PrintRequestAttributeSet}.
+     *
+     * @serial include
+     */
     private static class SynchronizedPrintRequestAttributeSet
         extends SynchronizedAttributeSet
         implements PrintRequestAttributeSet, Serializable {
+
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = 5671237023971169027L;
 
+        /**
+         * Constructs a new synchronized print request attribute set.
+         *
+         * @param  attributeSet the print request attribute set
+         */
         public SynchronizedPrintRequestAttributeSet
             (PrintRequestAttributeSet attributeSet) {
             super(attributeSet);
@@ -385,13 +460,24 @@
     }
 
     /**
-      * @serial include
-      */
+     * Synchronized view of {@code PrintJobAttributeSet}.
+     *
+     * @serial include
+     */
     private static class SynchronizedPrintJobAttributeSet
         extends SynchronizedAttributeSet
         implements PrintJobAttributeSet, Serializable {
+
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = 2117188707856965749L;
 
+        /**
+         * Constructs a new synchronized print job attribute set.
+         *
+         * @param  attributeSet the print job attribute set
+         */
         public SynchronizedPrintJobAttributeSet
             (PrintJobAttributeSet attributeSet) {
             super(attributeSet);
@@ -399,13 +485,24 @@
     }
 
     /**
-      * @serial include
-      */
+     * Synchronized view of {@code PrintServiceAttributeSet}.
+     *
+     * @serial include
+     */
     private static class SynchronizedPrintServiceAttributeSet
         extends SynchronizedAttributeSet
         implements PrintServiceAttributeSet, Serializable {
+
+        /**
+         * Use serialVersionUID from JDK 1.4 for interoperability.
+         */
         private static final long serialVersionUID = -2830705374001675073L;
 
+        /**
+         * Constructs a new synchronized print service attribute set.
+         *
+         * @param  attributeSet the print service attribute set
+         */
         public SynchronizedPrintServiceAttributeSet
             (PrintServiceAttributeSet attributeSet) {
             super(attributeSet);
@@ -415,12 +512,9 @@
     /**
      * Creates a synchronized view of the given attribute set.
      *
-     * @param  attributeSet  Underlying attribute set.
-     *
-     * @return  Synchronized view of {@code attributeSet}.
-     *
-     * @exception  NullPointerException
-     *     Thrown if {@code attributeSet} is null.
+     * @param  attributeSet underlying attribute set
+     * @return synchronized view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static AttributeSet synchronizedView
         (AttributeSet attributeSet) {
@@ -433,12 +527,9 @@
     /**
      * Creates a synchronized view of the given doc attribute set.
      *
-     * @param  attributeSet  Underlying doc attribute set.
-     *
-     * @return  Synchronized view of {@code attributeSet}.
-     *
-     * @exception  NullPointerException
-     *     Thrown if {@code attributeSet} is null.
+     * @param  attributeSet underlying doc attribute set
+     * @return synchronized view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static DocAttributeSet
         synchronizedView(DocAttributeSet attributeSet) {
@@ -451,12 +542,9 @@
     /**
      * Creates a synchronized view of the given print request attribute set.
      *
-     * @param  attributeSet  Underlying print request attribute set.
-     *
-     * @return  Synchronized view of {@code attributeSet}.
-     *
-     * @exception  NullPointerException
-     *     Thrown if {@code attributeSet} is null.
+     * @param  attributeSet underlying print request attribute set
+     * @return synchronized view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static PrintRequestAttributeSet
         synchronizedView(PrintRequestAttributeSet attributeSet) {
@@ -469,12 +557,9 @@
     /**
      * Creates a synchronized view of the given print job attribute set.
      *
-     * @param  attributeSet  Underlying print job attribute set.
-     *
-     * @return  Synchronized view of {@code attributeSet}.
-     *
-     * @exception  NullPointerException
-     *     Thrown if {@code attributeSet} is null.
+     * @param  attributeSet underlying print job attribute set
+     * @return synchronized view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static PrintJobAttributeSet
         synchronizedView(PrintJobAttributeSet attributeSet) {
@@ -487,9 +572,9 @@
     /**
      * Creates a synchronized view of the given print service attribute set.
      *
-     * @param  attributeSet  Underlying print service attribute set.
-     *
-     * @return  Synchronized view of {@code attributeSet}.
+     * @param  attributeSet underlying print service attribute set
+     * @return synchronized view of {@code attributeSet}
+     * @throws NullPointerException if {@code attributeSet} is {@code null}
      */
     public static PrintServiceAttributeSet
         synchronizedView(PrintServiceAttributeSet attributeSet) {
@@ -499,26 +584,19 @@
         return new SynchronizedPrintServiceAttributeSet(attributeSet);
     }
 
-
     /**
-     * Verify that the given object is a {@link java.lang.Class Class} that
-     * implements the given interface, which is assumed to be interface {@link
-     * Attribute Attribute} or a subinterface thereof.
+     * Verify that the given object is a {@link Class Class} that implements the
+     * given interface, which is assumed to be interface
+     * {@link Attribute Attribute} or a subinterface thereof.
      *
-     * @param  object     Object to test.
-     * @param  interfaceName  Interface the object must implement.
-     *
-     * @return  If {@code object} is a {@link java.lang.Class Class}
-     *          that implements {@code interfaceName},
-     *          {@code object} is returned downcast to type {@link
-     *          java.lang.Class Class}; otherwise an exception is thrown.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code object} is null.
-     * @exception  ClassCastException
-     *     (unchecked exception) Thrown if {@code object} is not a
-     *     {@link java.lang.Class Class} that implements
-     *     {@code interfaceName}.
+     * @param  object {@code Object} to test
+     * @param  interfaceName interface the object must implement
+     * @return if {@code object} is a {@link Class Class} that implements
+     *         {@code interfaceName}, {@code object} is returned downcast to
+     *         type {@link Class Class}; otherwise an exception is thrown
+     * @throws NullPointerException if {@code object} is {@code null}
+     * @throws ClassCastException if {@code object} is not a
+     *         {@link Class Class} that implements {@code interfaceName}
      */
     public static Class<?>
         verifyAttributeCategory(Object object, Class<?> interfaceName) {
@@ -537,19 +615,14 @@
      * is assumed to be interface {@link Attribute Attribute} or a subinterface
      * thereof.
      *
-     * @param  object     Object to test.
-     * @param  interfaceName  Interface of which the object must be an instance.
-     *
-     * @return  If {@code object} is an instance of
-     *          {@code interfaceName}, {@code object} is returned
-     *          downcast to type {@link Attribute Attribute}; otherwise an
-     *          exception is thrown.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code object} is null.
-     * @exception  ClassCastException
-     *     (unchecked exception) Thrown if {@code object} is not an
-     *     instance of {@code interfaceName}.
+     * @param  object {@code Object} to test
+     * @param  interfaceName interface of which the object must be an instance
+     * @return if {@code object} is an instance of {@code interfaceName},
+     *         {@code object} is returned downcast to type
+     *         {@link Attribute Attribute}; otherwise an exception is thrown
+     * @throws NullPointerException if {@code object} is {@code null}
+     * @throws ClassCastException if {@code object} is not an instance of
+     *         {@code interfaceName}
      */
     public static Attribute
         verifyAttributeValue(Object object, Class<?> interfaceName) {
@@ -565,19 +638,16 @@
     }
 
     /**
-     * Verify that the given attribute category object is equal to the
-     * category of the given attribute value object. If so, this method
-     * returns doing nothing. If not, this method throws an exception.
+     * Verify that the given attribute category object is equal to the category
+     * of the given attribute value object. If so, this method returns doing
+     * nothing. If not, this method throws an exception.
      *
-     * @param  category   Attribute category to test.
-     * @param  attribute  Attribute value to test.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if the {@code category} is
-     *     null or if the {@code attribute} is null.
-     * @exception  IllegalArgumentException
-     *     (unchecked exception) Thrown if the {@code category} is not
-     *     equal to the category of the {@code attribute}.
+     * @param  category attribute category to test
+     * @param  attribute attribute value to test
+     * @throws NullPointerException if the {@code category} or {@code attribute}
+     *         are {@code null}
+     * @throws IllegalArgumentException if the {@code category} is not equal to
+     *         the category of the {@code attribute}
      */
     public static void
         verifyCategoryForValue(Class<?> category, Attribute attribute) {
--- a/src/java.desktop/share/classes/javax/print/attribute/DateTimeSyntax.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/DateTimeSyntax.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,47 +23,48 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 import java.io.Serializable;
-
 import java.util.Date;
 
 /**
- * Class DateTimeSyntax is an abstract base class providing the common
+ * Class {@code DateTimeSyntax} is an abstract base class providing the common
  * implementation of all attributes whose value is a date and time.
- * <P>
+ * <p>
  * Under the hood, a date-time attribute is stored as a value of class
- * {@code java.util.Date}. You can get a date-time attribute's Date value by
- * calling {@link #getValue() getValue()}. A date-time attribute's
- * Date value is established when it is constructed (see {@link
- * #DateTimeSyntax(Date) DateTimeSyntax(Date)}). Once
- * constructed, a date-time attribute's value is immutable.
- * <P>
+ * {@code java.util.Date}. You can get a date-time attribute's {@code Date}
+ * value by calling {@link #getValue() getValue()}. A date-time attribute's
+ * {@code Date} value is established when it is constructed (see
+ * {@link #DateTimeSyntax(Date) DateTimeSyntax(Date)}). Once constructed, a
+ * date-time attribute's value is immutable.
+ * <p>
  * To construct a date-time attribute from separate values of the year, month,
- * day, hour, minute, and so on, use a {@code java.util.Calendar}
- * object to construct a {@code java.util.Date} object, then use the
- * {@code java.util.Date} object to construct the date-time attribute.
- * To convert
- * a date-time attribute to separate values of the year, month, day, hour,
- * minute, and so on, create a {@code java.util.Calendar} object and
- * set it to the {@code java.util.Date} from the date-time attribute. Class
- * DateTimeSyntax stores its value in the form of a {@code java.util.Date}
- * rather than a {@code java.util.Calendar} because it typically takes
- * less memory to store and less time to compare a {@code java.util.Date}
- * than a {@code java.util.Calendar}.
+ * day, hour, minute, and so on, use a {@code java.util.Calendar} object to
+ * construct a {@code java.util.Date} object, then use the
+ * {@code java.util.Date} object to construct the date-time attribute. To
+ * convert a date-time attribute to separate values of the year, month, day,
+ * hour, minute, and so on, create a {@code java.util.Calendar} object and set
+ * it to the {@code java.util.Date} from the date-time attribute. Class
+ * {@code DateTimeSyntax} stores its value in the form of a
+ * {@code java.util.Date} rather than a {@code java.util.Calendar} because it
+ * typically takes less memory to store and less time to compare a
+ * {@code java.util.Date} than a {@code java.util.Calendar}.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public abstract class DateTimeSyntax implements Serializable, Cloneable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = -1400819079791208582L;
 
     // Hidden data members.
 
     /**
      * This date-time attribute's {@code java.util.Date} value.
+     *
      * @serial
      */
     private Date value;
@@ -71,13 +72,11 @@
     // Hidden constructors.
 
     /**
-     * Construct a new date-time attribute with the given
-     * {@code java.util.Date} value.
+     * Construct a new date-time attribute with the given {@code java.util.Date}
+     * value.
      *
-     * @param  value   {@code java.util.Date} value.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code theValue} is null.
+     * @param  value {@code java.util.Date} value
+     * @throws NullPointerException if {@code value} is {@code null}
      */
     protected DateTimeSyntax(Date value) {
         if (value == null) {
@@ -89,9 +88,9 @@
     // Exported operations.
 
     /**
-     * Returns this date-time attribute's {@code java.util.Date}
-     * value.
-     * @return the Date.
+     * Returns this date-time attribute's {@code java.util.Date} value.
+     *
+     * @return the {@code Date}
      */
     public Date getValue() {
         return new Date (value.getTime());
@@ -102,20 +101,16 @@
     /**
      * Returns whether this date-time attribute is equivalent to the passed in
      * object. To be equivalent, all of the following conditions must be true:
-     * <OL TYPE=1>
-     * <LI>
-     * {@code object} is not null.
-     * <LI>
-     * {@code object} is an instance of class DateTimeSyntax.
-     * <LI>
-     * This date-time attribute's {@code java.util.Date} value and
-     * {@code object}'s {@code java.util.Date} value are
-     * equal. </OL>
+     * <ol type=1>
+     *   <li>{@code object} is not {@code null}.
+     *   <li>{@code object} is an instance of class {@code DateTimeSyntax}.
+     *   <li>This date-time attribute's {@code java.util.Date} value and
+     *   {@code object}'s {@code java.util.Date} value are equal.
+     * </ol>
      *
-     * @param  object  Object to compare to.
-     *
-     * @return  True if {@code object} is equivalent to this date-time
-     *          attribute, false otherwise.
+     * @param  object {@code Object} to compare to
+     * @return {@code true} if {@code object} is equivalent to this date-time
+     *         attribute, {@code false} otherwise
      */
     public boolean equals(Object object) {
         return (object != null &&
@@ -132,13 +127,11 @@
     }
 
     /**
-     * Returns a string value corresponding to this date-time attribute.
-     * The string value is just this attribute's
-     * {@code java.util.Date}  value
+     * Returns a string value corresponding to this date-time attribute. The
+     * string value is just this attribute's {@code java.util.Date} value
      * converted to a string.
      */
     public String toString() {
         return "" + value;
     }
-
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/DocAttribute.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/DocAttribute.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,25 +23,22 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 /**
- * Interface DocAttribute is a tagging interface which a printing attribute
- * class implements to indicate the attribute denotes a setting for a doc.
- * ("Doc" is a short, easy-to-pronounce term that means "a piece of print
- * data.") The client may include a DocAttribute in a {@code Doc}'s
- * attribute set to specify a characteristic of
- * that doc. If an attribute implements {@link PrintRequestAttribute
- * PrintRequestAttribute} as well as DocAttribute, the client may include the
- * attribute in a attribute set which specifies a print job
- * to specify a characteristic for all the docs in that job.
+ * Interface {@code DocAttribute} is a tagging interface which a printing
+ * attribute class implements to indicate the attribute denotes a setting for a
+ * doc. ("Doc" is a short, easy-to-pronounce term that means "a piece of print
+ * data.") The client may include a {@code DocAttribute} in a {@code Doc}'s
+ * attribute set to specify a characteristic of that doc. If an attribute
+ * implements {@link PrintRequestAttribute PrintRequestAttribute} as well as
+ * {@code DocAttribute}, the client may include the attribute in a attribute set
+ * which specifies a print job to specify a characteristic for all the docs in
+ * that job.
  *
+ * @author Alan Kaminsky
  * @see DocAttributeSet
  * @see PrintRequestAttributeSet
- *
- * @author  Alan Kaminsky
  */
 public interface DocAttribute extends Attribute {
-
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/DocAttributeSet.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/DocAttributeSet.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,88 +23,70 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 /**
- * Interface DocAttributeSet specifies the interface for a set of doc
- * attributes, i.e. printing attributes that implement interface {@link
- * DocAttribute DocAttribute}. In the Print Service API, the client uses a
- * DocAttributeSet to specify the characteristics of an individual doc and
- * the print job settings to be applied to an individual doc.
- * <P>
- * A DocAttributeSet is just an {@link AttributeSet AttributeSet} whose
+ * Interface {@code DocAttributeSet} specifies the interface for a set of doc
+ * attributes, i.e. printing attributes that implement interface
+ * {@link DocAttribute DocAttribute}. In the Print Service API, the client uses
+ * a {@code DocAttributeSet} to specify the characteristics of an individual doc
+ * and the print job settings to be applied to an individual doc.
+ * <p>
+ * A {@code DocAttributeSet} is just an {@link AttributeSet AttributeSet} whose
  * constructors and mutating operations guarantee an additional invariant,
- * namely that all attribute values in the DocAttributeSet must be instances
- * of interface {@link DocAttribute DocAttribute}.
- * The {@link #add(Attribute) add(Attribute)}, and
- * {@link #addAll(AttributeSet) addAll(AttributeSet)} operations
- * are respecified below to guarantee this additional invariant.
+ * namely that all attribute values in the {@code DocAttributeSet} must be
+ * instances of interface {@link DocAttribute DocAttribute}. The
+ * {@link #add(Attribute) add(Attribute)}, and
+ * {@link #addAll(AttributeSet) addAll(AttributeSet)} operations are respecified
+ * below to guarantee this additional invariant.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public interface DocAttributeSet extends AttributeSet {
 
-
     /**
      * Adds the specified attribute value to this attribute set if it is not
-     * already present, first removing any existing value in the same
-     * attribute category as the specified attribute value (optional
-     * operation).
+     * already present, first removing any existing value in the same attribute
+     * category as the specified attribute value (optional operation).
      *
-     * @param  attribute  Attribute value to be added to this attribute set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of
-     *          the call, i.e., the given attribute value was not already a
-     *          member of this attribute set.
-     *
-     * @throws  UnmodifiableSetException
-     *     (unchecked exception) Thrown if this attribute set does not
-     *     support the {@code add()} operation.
-     * @throws  ClassCastException
-     *     (unchecked exception) Thrown if the {@code attribute} is
-     *     not an instance of interface
-     *     {@link DocAttribute DocAttribute}.
-     * @throws  NullPointerException
-     *    (unchecked exception) Thrown if the {@code attribute} is null.
+     * @param  attribute attribute value to be added to this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
+     *         call, i.e., the given attribute value was not already a member of
+     *         this attribute set
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code add()} operation
+     * @throws ClassCastException if the {@code attribute} is not an instance of
+     *         interface {@link DocAttribute DocAttribute}
+     * @throws NullPointerException if the {@code attribute} is {@code null}
      */
     public boolean add(Attribute attribute);
 
     /**
-     * Adds all of the elements in the specified set to this attribute.
-     * The outcome is  the same as if the
-     * {@link #add(Attribute) add(Attribute)}
-     * operation had been applied to this attribute set successively with
-     * each element from the specified set. If none of the categories in the
-     * specified set  are the same as any categories in this attribute set,
-     * the {@code addAll()} operation effectively modifies this attribute
-     * set so that its value is the <i>union</i> of the two sets.
-     * <P>
-     * The behavior of the {@code addAll()} operation is unspecified if
-     * the specified set is modified while the operation is in progress.
-     * <P>
-     * If the {@code addAll()} operation throws an exception, the effect
-     * on this attribute set's state is implementation dependent; elements
-     * from the specified set before the point of the exception may or
-     * may not have been added to this attribute set.
+     * Adds all of the elements in the specified set to this attribute. The
+     * outcome is the same as if the {@link #add(Attribute) add(Attribute)}
+     * operation had been applied to this attribute set successively with each
+     * element from the specified set. If none of the categories in the
+     * specified set are the same as any categories in this attribute set, the
+     * {@code addAll()} operation effectively modifies this attribute set so
+     * that its value is the <i>union</i> of the two sets.
+     * <p>
+     * The behavior of the {@code addAll()} operation is unspecified if the
+     * specified set is modified while the operation is in progress.
+     * <p>
+     * If the {@code addAll()} operation throws an exception, the effect on this
+     * attribute set's state is implementation dependent; elements from the
+     * specified set before the point of the exception may or may not have been
+     * added to this attribute set.
      *
-     * @param  attributes  whose elements are to be added to this attribute
-     *            set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of
-     *          the call.
-     *
-     * @throws  UnmodifiableSetException
-     *     (Unchecked exception) Thrown if this attribute set does not
-     *     support the {@code addAll()} method.
-     * @throws  ClassCastException
-     *     (Unchecked exception) Thrown if some element in the specified
-     *     set is not an instance of interface {@link DocAttribute
-     *     DocAttribute}.
-     * @throws  NullPointerException
-     *     (Unchecked exception) Thrown if the specified  set is null.
-     *
+     * @param  attributes whose elements are to be added to this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
+     *         call
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code addAll()} method
+     * @throws ClassCastException if some element in the specified set is not an
+     *         instance of interface {@link DocAttribute DocAttribute}
+     * @throws NullPointerException if the specified set is {@code null}
      * @see #add(Attribute)
      */
-   public boolean addAll(AttributeSet attributes);
+    public boolean addAll(AttributeSet attributes);
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/EnumSyntax.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/EnumSyntax.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,7 +23,6 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 import java.io.InvalidObjectException;
@@ -31,11 +30,13 @@
 import java.io.Serializable;
 
 /**
- * Class EnumSyntax is an abstract base class providing the common
+ * Class {@code EnumSyntax} is an abstract base class providing the common
  * implementation of all "type safe enumeration" objects. An enumeration class
- * (which extends class EnumSyntax) provides a group of enumeration values
- * (objects) that are singleton instances of the enumeration class; for example:
- * <PRE>
+ * (which extends class {@code EnumSyntax}) provides a group of enumeration
+ * values (objects) that are singleton instances of the enumeration class; for
+ * example:
+ *
+ * <pre>
  *     public class Bach extends EnumSyntax {
  *         public static final Bach JOHANN_SEBASTIAN     = new Bach(0);
  *         public static final Bach WILHELM_FRIEDEMANN   = new Bach(1);
@@ -67,51 +68,54 @@
  *             return enumValueTable;
  *         }
  *     }
- * </PRE>
- * You can then write code that uses the {@code ==} and {@code !=}
- * operators to test enumeration values; for example:
- * <PRE>
+ * </pre>
+ * You can then write code that uses the {@code ==} and {@code !=} operators to
+ * test enumeration values; for example:
+ * <pre>
  *     Bach theComposer;
  *     . . .
  *     if (theComposer == Bach.JOHANN_SEBASTIAN) {
  *         System.out.println ("The greatest composer of all time!");
  *     }
- * </PRE>
- * The {@code equals()} method for an enumeration class just does a test
- * for identical objects ({@code ==}).
- * <P>
- * You can convert an enumeration value to a string by calling {@link
- * #toString() toString()}. The string is obtained from a table
- * supplied by the enumeration class.
- * <P>
+ * </pre>
+ * The {@code equals()} method for an enumeration class just does a test for
+ * identical objects ({@code ==}).
+ * <p>
+ * You can convert an enumeration value to a string by calling
+ * {@link #toString() toString()}. The string is obtained from a table supplied
+ * by the enumeration class.
+ * <p>
  * Under the hood, an enumeration value is just an integer, a different integer
  * for each enumeration value within an enumeration class. You can get an
- * enumeration value's integer value by calling {@link #getValue()
- * getValue()}. An enumeration value's integer value is established
- * when it is constructed (see {@link #EnumSyntax(int)
- * EnumSyntax(int)}). Since the constructor is protected, the only
- * possible enumeration values are the singleton objects declared in the
- * enumeration class; additional enumeration values cannot be created at run
- * time.
- * <P>
+ * enumeration value's integer value by calling {@link #getValue() getValue()}.
+ * An enumeration value's integer value is established when it is constructed
+ * (see {@link #EnumSyntax(int) EnumSyntax(int)}). Since the constructor is
+ * protected, the only possible enumeration values are the singleton objects
+ * declared in the enumeration class; additional enumeration values cannot be
+ * created at run time.
+ * <p>
  * You can define a subclass of an enumeration class that extends it with
  * additional enumeration values. The subclass's enumeration values' integer
  * values need not be distinct from the superclass's enumeration values' integer
- * values; the {@code ==}, {@code !=}, {@code equals()}, and
- * {@code toString()} methods will still work properly even if the subclass
- * uses some of the same integer values as the superclass. However, the
- * application in which the enumeration class and subclass are used may need to
- * have distinct integer values in the superclass and subclass.
+ * values; the {@code ==}, {@code !=}, {@code equals()}, and {@code toString()}
+ * methods will still work properly even if the subclass uses some of the same
+ * integer values as the superclass. However, the application in which the
+ * enumeration class and subclass are used may need to have distinct integer
+ * values in the superclass and subclass.
  *
- * @author  David Mendenhall
- * @author  Alan Kaminsky
+ * @author David Mendenhall
+ * @author Alan Kaminsky
  */
 public abstract class EnumSyntax implements Serializable, Cloneable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = -2739521845085831642L;
 
     /**
      * This enumeration value's integer value.
+     *
      * @serial
      */
     private int value;
@@ -119,7 +123,7 @@
     /**
      * Construct a new enumeration value with the given integer value.
      *
-     * @param  value  Integer value.
+     * @param  value Integer value
      */
     protected EnumSyntax(int value) {
         this.value = value;
@@ -127,6 +131,7 @@
 
     /**
      * Returns this enumeration value's integer value.
+     *
      * @return the value
      */
     public int getValue() {
@@ -167,22 +172,20 @@
      * During object input, convert this deserialized enumeration instance to
      * the proper enumeration value defined in the enumeration attribute class.
      *
-     * @return  The enumeration singleton value stored at index
-     *          <I>i</I>-<I>L</I> in the enumeration value table returned by
-     *          {@link #getEnumValueTable() getEnumValueTable()},
-     *          where <I>i</I> is this enumeration value's integer value and
-     *          <I>L</I> is the value returned by {@link #getOffset()
-     *          getOffset()}.
-     *
+     * @return The enumeration singleton value stored at index <i>i</i>-<i>L</i>
+     *         in the enumeration value table returned by
+     *         {@link #getEnumValueTable() getEnumValueTable()}, where <i>i</i>
+     *         is this enumeration value's integer value and <i>L</i> is the
+     *         value returned by {@link #getOffset() getOffset()}
      * @throws ObjectStreamException if the stream can't be deserialised
-     * @throws  InvalidObjectException
-     *     Thrown if the enumeration value table is null, this enumeration
-     *     value's integer value does not correspond to an element in the
-     *     enumeration value table, or the corresponding element in the
-     *     enumeration value table is null. (Note: {@link
-     *     java.io.InvalidObjectException InvalidObjectException} is a subclass
-     *     of {@link java.io.ObjectStreamException ObjectStreamException}, which
-     *     {@code readResolve()} is declared to throw.)
+     * @throws InvalidObjectException if the enumeration value table is
+     *         {@code null}, this enumeration value's integer value does not
+     *         correspond to an element in the enumeration value table, or the
+     *         corresponding element in the enumeration value table is
+     *         {@code null}. (Note:
+     *         {@link InvalidObjectException InvalidObjectException} is a
+     *         subclass of {@link ObjectStreamException ObjectStreamException},
+     *         which {@code readResolve()} is declared to throw.)
      */
     protected Object readResolve() throws ObjectStreamException {
 
@@ -218,20 +221,21 @@
     /**
      * Returns the string table for this enumeration value's enumeration class.
      * The enumeration class's integer values are assumed to lie in the range
-     * <I>L</I>..<I>L</I>+<I>N</I>-1, where <I>L</I> is the value returned by
-     * {@link #getOffset() getOffset()} and <I>N</I> is the length
-     * of the string table. The element in the string table at index
-     * <I>i</I>-<I>L</I> is the value returned by {@link #toString()
-     * toString()} for the enumeration value whose integer value
-     * is <I>i</I>. If an integer within the above range is not used by any
-     * enumeration value, leave the corresponding table element null.
-     * <P>
-     * The default implementation returns null. If the enumeration class (a
-     * subclass of class EnumSyntax) does not override this method to return a
-     * non-null string table, and the subclass does not override the {@link
-     * #toString() toString()} method, the base class {@link
-     * #toString() toString()} method will return just a string
+     * <i>L</i>..<i>L</i>+<i>N</i>-1, where <i>L</i> is the value returned by
+     * {@link #getOffset() getOffset()} and <i>N</i> is the length of the string
+     * table. The element in the string table at index <i>i</i>-<i>L</i> is the
+     * value returned by {@link #toString() toString()} for the enumeration
+     * value whose integer value is <i>i</i>. If an integer within the above
+     * range is not used by any enumeration value, leave the corresponding table
+     * element {@code null}.
+     * <p>
+     * The default implementation returns {@code null}. If the enumeration class
+     * (a subclass of class {@code EnumSyntax}) does not override this method to
+     * return a {@code non-null} string table, and the subclass does not
+     * override the {@link #toString() toString()} method, the base class
+     * {@link #toString() toString()} method will return just a string
      * representation of this enumeration value's integer value.
+     *
      * @return the string table
      */
     protected String[] getStringTable() {
@@ -241,23 +245,24 @@
     /**
      * Returns the enumeration value table for this enumeration value's
      * enumeration class. The enumeration class's integer values are assumed to
-     * lie in the range <I>L</I>..<I>L</I>+<I>N</I>-1, where <I>L</I> is the
-     * value returned by {@link #getOffset() getOffset()} and
-     * <I>N</I> is the length of the enumeration value table. The element in the
-     * enumeration value table at index <I>i</I>-<I>L</I> is the enumeration
-     * value object whose integer value is <I>i</I>; the {@link #readResolve()
-     * readResolve()} method needs this to preserve singleton
-     * semantics during deserialization of an enumeration instance. If an
-     * integer within the above range is not used by any enumeration value,
-     * leave the corresponding table element null.
-     * <P>
-     * The default implementation returns null. If the enumeration class (a
-     * subclass of class EnumSyntax) does not override this method to return
-     * a non-null enumeration value table, and the subclass does not override
-     * the {@link #readResolve() readResolve()} method, the base
-     * class {@link #readResolve() readResolve()} method will throw
-     * an exception whenever an enumeration instance is deserialized from an
-     * object input stream.
+     * lie in the range <i>L</i>..<i>L</i>+<i>N</i>-1, where <i>L</i> is the
+     * value returned by {@link #getOffset() getOffset()} and <i>N</i> is the
+     * length of the enumeration value table. The element in the enumeration
+     * value table at index <i>i</i>-<i>L</i> is the enumeration value object
+     * whose integer value is <i>i</i>; the {@link #readResolve() readResolve()}
+     * method needs this to preserve singleton semantics during deserialization
+     * of an enumeration instance. If an integer within the above range is not
+     * used by any enumeration value, leave the corresponding table element
+     * {@code null}.
+     * <p>
+     * The default implementation returns {@code null}. If the enumeration class
+     * (a subclass of class EnumSyntax) does not override this method to return
+     * a {@code non-null} enumeration value table, and the subclass does not
+     * override the {@link #readResolve() readResolve()} method, the base class
+     * {@link #readResolve() readResolve()} method will throw an exception
+     * whenever an enumeration instance is deserialized from an object input
+     * stream.
+     *
      * @return the value table
      */
     protected EnumSyntax[] getEnumValueTable() {
@@ -267,14 +272,14 @@
     /**
      * Returns the lowest integer value used by this enumeration value's
      * enumeration class.
-     * <P>
+     * <p>
      * The default implementation returns 0. If the enumeration class (a
-     * subclass of class EnumSyntax) uses integer values starting at other than
-     * 0, override this method in the subclass.
-     * @return the offset of the lowest enumeration value.
+     * subclass of class {@code EnumSyntax}) uses integer values starting at
+     * other than 0, override this method in the subclass.
+     *
+     * @return the offset of the lowest enumeration value
      */
     protected int getOffset() {
         return 0;
     }
-
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/HashAttributeSet.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/HashAttributeSet.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -32,37 +32,42 @@
 import java.util.HashMap;
 
 /**
- * Class HashAttributeSet provides an {@code AttributeSet}
+ * Class {@code HashAttributeSet} provides an {@code AttributeSet}
  * implementation with characteristics of a hash map.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public class HashAttributeSet implements AttributeSet, Serializable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = 5311560590283707917L;
 
     /**
      * The interface of which all members of this attribute set must be an
-     * instance. It is assumed to be interface {@link Attribute Attribute}
-     * or a subinterface thereof.
+     * instance. It is assumed to be interface {@link Attribute Attribute} or a
+     * subinterface thereof.
+     *
      * @serial
      */
     private Class<?> myInterface;
 
-    /*
-     * A HashMap used by the implementation.
-     * The serialised form doesn't include this instance variable.
+    /**
+     * A {@code HashMap} used by the implementation. The serialised form doesn't
+     * include this instance variable.
      */
     private transient HashMap<Class<?>, Attribute> attrMap = new HashMap<>();
 
     /**
-     * Write the instance to a stream (ie serialize the object)
+     * Write the instance to a stream (ie serialize the object).
      *
-     * @serialData
-     * The serialized form of an attribute set explicitly writes the
-     * number of attributes in the set, and each of the attributes.
-     * This does not guarantee equality of serialized forms since
-     * the order in which the attributes are written is not defined.
+     * @param  s the output stream
+     * @throws IOException if an I/O exception has occurred
+     * @serialData The serialized form of an attribute set explicitly writes the
+     *             number of attributes in the set, and each of the attributes.
+     *             This does not guarantee equality of serialized forms since
+     *             the order in which the attributes are written is not defined.
      */
     private void writeObject(ObjectOutputStream s) throws IOException {
 
@@ -76,6 +81,10 @@
 
     /**
      * Reconstitute an instance from a stream that is, deserialize it).
+     *
+     * @param  s the input stream
+     * @throws ClassNotFoundException if the class is not found
+     * @throws IOException if an I/O exception has occurred
      */
     private void readObject(ObjectInputStream s)
         throws ClassNotFoundException, IOException {
@@ -98,59 +107,51 @@
     }
 
     /**
-     * Construct a new attribute set,
-     * initially populated with the given attribute.
+     * Construct a new attribute set, initially populated with the given
+     * attribute.
      *
-     * @param  attribute  Attribute value to add to the set.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code attribute} is null.
+     * @param  attribute attribute value to add to the set
+     * @throws NullPointerException if {@code attribute} is {@code null}
      */
     public HashAttributeSet(Attribute attribute) {
         this (attribute, Attribute.class);
     }
 
     /**
-     * Construct a new attribute set,
-     * initially populated with the values from the
-     * given array. The new attribute set is populated by
-     * adding the elements of {@code attributes} array to the set in
-     * sequence, starting at index 0. Thus, later array elements may replace
-     * earlier array elements if the array contains duplicate attribute
-     * values or attribute categories.
+     * Construct a new attribute set, initially populated with the values from
+     * the given array. The new attribute set is populated by adding the
+     * elements of {@code attributes} array to the set in sequence, starting at
+     * index 0. Thus, later array elements may replace earlier array elements if
+     * the array contains duplicate attribute values or attribute categories.
      *
-     * @param  attributes  Array of attribute values to add to the set.
-     *                    If null, an empty attribute set is constructed.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if any element of
-     *     {@code attributes} is null.
+     * @param  attributes array of attribute values to add to the set. If
+     *         {@code null}, an empty attribute set is constructed.
+     * @throws NullPointerException if any element of {@code attributes} is
+     *         {@code null}
      */
     public HashAttributeSet(Attribute[] attributes) {
         this (attributes, Attribute.class);
     }
 
     /**
-     * Construct a new attribute set,
-     * initially populated with the values from the  given set.
+     * Construct a new attribute set, initially populated with the values from
+     * the given set.
      *
-     * @param  attributes Set of attributes from which to initialise this set.
-     *                 If null, an empty attribute set is constructed.
-     *
+     * @param  attributes set of attributes from which to initialise this set.
+     *         If {@code null}, an empty attribute set is constructed.
      */
     public HashAttributeSet(AttributeSet attributes) {
         this (attributes, Attribute.class);
     }
 
     /**
-     * Construct a new, empty attribute set, where the members of
-     * the attribute set are restricted to the given interface.
+     * Construct a new, empty attribute set, where the members of the attribute
+     * set are restricted to the given interface.
      *
-     * @param  interfaceName  The interface of which all members of this
-     *                     attribute set must be an instance. It is assumed to
-     *                     be interface {@link Attribute Attribute} or a
-     *                     subinterface thereof.
-     * @exception NullPointerException if interfaceName is null.
+     * @param  interfaceName the interface of which all members of this
+     *         attribute set must be an instance. It is assumed to be interface
+     *         {@link Attribute Attribute} or a subinterface thereof.
+     * @throws NullPointerException if {@code interfaceName} is {@code null}
      */
     protected HashAttributeSet(Class<?> interfaceName) {
         if (interfaceName == null) {
@@ -164,18 +165,14 @@
      * attribute, where the members of the attribute set are restricted to the
      * given interface.
      *
-     * @param  attribute      Attribute value to add to the set.
-     * @param  interfaceName  The interface of which all members of this
-     *                    attribute set must be an instance. It is assumed to
-     *                    be interface {@link Attribute Attribute} or a
-     *                    subinterface thereof.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code attribute} is null.
-     * @exception NullPointerException if interfaceName is null.
-     * @exception  ClassCastException
-     *     (unchecked exception) Thrown if {@code attribute} is not an
-     *     instance of {@code interfaceName}.
+     * @param  attribute attribute value to add to the set
+     * @param  interfaceName the interface of which all members of this
+     *         attribute set must be an instance. It is assumed to be interface
+     *         {@link Attribute Attribute} or a subinterface thereof.
+     * @throws NullPointerException if {@code attribute} or
+     *         {@code interfaceName} are {@code null}
+     * @throws ClassCastException if {@code attribute} is not an instance of
+     *         {@code interfaceName}
      */
     protected HashAttributeSet(Attribute attribute, Class<?> interfaceName) {
         if (interfaceName == null) {
@@ -186,29 +183,22 @@
     }
 
     /**
-     * Construct a new attribute set, where the members of the attribute
-     * set are restricted to the given interface.
-     * The new attribute set is populated
-     * by adding the elements of {@code attributes} array to the set in
-     * sequence, starting at index 0. Thus, later array elements may replace
-     * earlier array elements if the array contains duplicate attribute
-     * values or attribute categories.
+     * Construct a new attribute set, where the members of the attribute set are
+     * restricted to the given interface. The new attribute set is populated by
+     * adding the elements of {@code attributes} array to the set in sequence,
+     * starting at index 0. Thus, later array elements may replace earlier array
+     * elements if the array contains duplicate attribute values or attribute
+     * categories.
      *
-     * @param  attributes Array of attribute values to add to the set. If
-     *                    null, an empty attribute set is constructed.
-     * @param  interfaceName  The interface of which all members of this
-     *                    attribute set must be an instance. It is assumed to
-     *                    be interface {@link Attribute Attribute} or a
-     *                    subinterface thereof.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if any element of
-     * {@code attributes} is null.
-     * @exception NullPointerException if interfaceName is null.
-     * @exception  ClassCastException
-     *     (unchecked exception) Thrown if any element of
-     * {@code attributes} is not an instance of
-     * {@code interfaceName}.
+     * @param  attributes array of attribute values to add to the set. If
+     *         {@code null}, an empty attribute set is constructed.
+     * @param  interfaceName the interface of which all members of this
+     *         attribute set must be an instance. It is assumed to be interface
+     *         {@link Attribute Attribute} or a subinterface thereof.
+     * @throws NullPointerException if {@code interfaceName} is {@code null}, or
+     *         if any element of {@code attributes} is {@code null}
+     * @throws ClassCastException if any element of {@code attributes} is not an
+     *         instance of {@code interfaceName}
      */
     protected HashAttributeSet(Attribute[] attributes, Class<?> interfaceName) {
         if (interfaceName == null) {
@@ -222,21 +212,17 @@
     }
 
     /**
-     * Construct a new attribute set, initially populated with the
-     * values from the  given set where the members of the attribute
-     * set are restricted to the given interface.
+     * Construct a new attribute set, initially populated with the values from
+     * the given set where the members of the attribute set are restricted to
+     * the given interface.
      *
      * @param  attributes set of attribute values to initialise the set. If
-     *                    null, an empty attribute set is constructed.
-     * @param  interfaceName  The interface of which all members of this
-     *                    attribute set must be an instance. It is assumed to
-     *                    be interface {@link Attribute Attribute} or a
-     *                    subinterface thereof.
-     *
-     * @exception  ClassCastException
-     *     (unchecked exception) Thrown if any element of
-     * {@code attributes} is not an instance of
-     * {@code interfaceName}.
+     *         {@code null}, an empty attribute set is constructed.
+     * @param  interfaceName The interface of which all members of this
+     *         attribute set must be an instance. It is assumed to be interface
+     *         {@link Attribute Attribute} or a subinterface thereof.
+     * @throws ClassCastException if any element of {@code attributes} is not an
+     *         instance of {@code interfaceName}
      */
     protected HashAttributeSet(AttributeSet attributes, Class<?> interfaceName) {
       myInterface = interfaceName;
@@ -251,26 +237,19 @@
 
     /**
      * Returns the attribute value which this attribute set contains in the
-     * given attribute category. Returns {@code null} if this attribute set
-     * does not contain any attribute value in the given attribute category.
+     * given attribute category. Returns {@code null} if this attribute set does
+     * not contain any attribute value in the given attribute category.
      *
-     * @param  category  Attribute category whose associated attribute value
-     *                   is to be returned. It must be a
-     *                   {@link java.lang.Class Class}
-     *                   that implements interface {@link Attribute
-     *                   Attribute}.
-     *
-     * @return  The attribute value in the given attribute category contained
-     *          in this attribute set, or {@code null} if this attribute set
-     *          does not contain any attribute value in the given attribute
-     *          category.
-     *
-     * @throws  NullPointerException
-     *     (unchecked exception) Thrown if the {@code category} is null.
-     * @throws  ClassCastException
-     *     (unchecked exception) Thrown if the {@code category} is not a
-     *     {@link java.lang.Class Class} that implements interface {@link
-     *     Attribute Attribute}.
+     * @param  category attribute category whose associated attribute value is
+     *         to be returned. It must be a {@link Class Class} that implements
+     *         interface {@link Attribute Attribute}.
+     * @return the attribute value in the given attribute category contained in
+     *         this attribute set, or {@code null} if this attribute set does
+     *         not contain any attribute value in the given attribute category
+     * @throws NullPointerException if the {@code category} is {@code null}
+     * @throws ClassCastException if the {@code category} is not a
+     *         {@link Class Class} that implements interface
+     *         {@link Attribute Attribute}
      */
     public Attribute get(Class<?> category) {
         return attrMap.get(AttributeSetUtilities.
@@ -279,21 +258,17 @@
     }
 
     /**
-     * Adds the specified attribute to this attribute set if it is not
-     * already present, first removing any existing in the same
-     * attribute category as the specified attribute value.
+     * Adds the specified attribute to this attribute set if it is not already
+     * present, first removing any existing in the same attribute category as
+     * the specified attribute value.
      *
-     * @param  attribute  Attribute value to be added to this attribute set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of the
-     *          call, i.e., the given attribute value was not already a
-     *          member of this attribute set.
-     *
-     * @throws  NullPointerException
-     *    (unchecked exception) Thrown if the {@code attribute} is null.
-     * @throws  UnmodifiableSetException
-     *    (unchecked exception) Thrown if this attribute set does not support
-     *     the {@code add()} operation.
+     * @param  attribute attribute value to be added to this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
+     *         call, i.e., the given attribute value was not already a member of
+     *         this attribute set
+     * @throws NullPointerException if the {@code attribute} is {@code null}
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code add()} operation
      */
     public boolean add(Attribute attribute) {
         Object oldAttribute =
@@ -305,19 +280,15 @@
 
     /**
      * Removes any attribute for this category from this attribute set if
-     * present. If {@code category} is null, then
-     * {@code remove()} does nothing and returns {@code false}.
+     * present. If {@code category} is {@code null}, then {@code remove()} does
+     * nothing and returns {@code false}.
      *
-     * @param  category Attribute category to be removed from this
-     *                  attribute set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of the
+     * @param  category attribute category to be removed from this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
      *         call, i.e., the given attribute category had been a member of
-     *         this attribute set.
-     *
-     * @throws  UnmodifiableSetException
-     *     (unchecked exception) Thrown if this attribute set does not
-     *     support the {@code remove()} operation.
+     *         this attribute set
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code remove()} operation
      */
     public boolean remove(Class<?> category) {
         return
@@ -328,19 +299,16 @@
     }
 
     /**
-     * Removes the specified attribute from this attribute set if
-     * present. If {@code attribute} is null, then
-     * {@code remove()} does nothing and returns {@code false}.
+     * Removes the specified attribute from this attribute set if present. If
+     * {@code attribute} is {@code null}, then {@code remove()} does nothing and
+     * returns {@code false}.
      *
-     * @param attribute Attribute value to be removed from this attribute set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of the
-     *         call, i.e., the given attribute value had been a member of
-     *         this attribute set.
-     *
-     * @throws  UnmodifiableSetException
-     *     (unchecked exception) Thrown if this attribute set does not
-     *     support the {@code remove()} operation.
+     * @param  attribute attribute value to be removed from this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
+     *         call, i.e., the given attribute value had been a member of this
+     *         attribute set
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code remove()} operation
      */
     public boolean remove(Attribute attribute) {
         return
@@ -349,14 +317,12 @@
     }
 
     /**
-     * Returns {@code true} if this attribute set contains an
-     * attribute for the specified category.
+     * Returns {@code true} if this attribute set contains an attribute for the
+     * specified category.
      *
-     * @param  category whose presence in this attribute set is
-     *            to be tested.
-     *
-     * @return  {@code true} if this attribute set contains an attribute
-     *         value for the specified category.
+     * @param  category whose presence in this attribute set is to be tested
+     * @return {@code true} if this attribute set contains an attribute value
+     *         for the specified category
      */
     public boolean containsKey(Class<?> category) {
         return
@@ -367,14 +333,12 @@
     }
 
     /**
-     * Returns {@code true} if this attribute set contains the given
-     * attribute.
+     * Returns {@code true} if this attribute set contains the given attribute.
      *
-     * @param  attribute  value whose presence in this attribute set is
-     *            to be tested.
-     *
-     * @return  {@code true} if this attribute set contains the given
-     *      attribute    value.
+     * @param  attribute value whose presence in this attribute set is to be
+     *         tested
+     * @return {@code true} if this attribute set contains the given attribute
+     *         value
      */
     public boolean containsValue(Attribute attribute) {
         return
@@ -384,33 +348,25 @@
     }
 
     /**
-     * Adds all of the elements in the specified set to this attribute.
-     * The outcome is the same as if the
-     * {@link #add(Attribute) add(Attribute)}
-     * operation had been applied to this attribute set successively with
-     * each element from the specified set.
-     * The behavior of the {@code addAll(AttributeSet)}
-     * operation is unspecified if the specified set is modified while
-     * the operation is in progress.
-     * <P>
-     * If the {@code addAll(AttributeSet)} operation throws an exception,
-     * the effect on this attribute set's state is implementation dependent;
-     * elements from the specified set before the point of the exception may
-     * or may not have been added to this attribute set.
+     * Adds all of the elements in the specified set to this attribute. The
+     * outcome is the same as if the {@link #add(Attribute) add(Attribute)}
+     * operation had been applied to this attribute set successively with each
+     * element from the specified set. The behavior of the
+     * {@code addAll(AttributeSet)} operation is unspecified if the specified
+     * set is modified while the operation is in progress.
+     * <p>
+     * If the {@code addAll(AttributeSet)} operation throws an exception, the
+     * effect on this attribute set's state is implementation dependent;
+     * elements from the specified set before the point of the exception may or
+     * may not have been added to this attribute set.
      *
-     * @param  attributes  whose elements are to be added to this attribute
-     *            set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of the
-     *          call.
-     *
-     * @throws  UnmodifiableSetException
-     *    (Unchecked exception) Thrown if this attribute set does not
-     *     support the {@code addAll(AttributeSet)} method.
-     * @throws  NullPointerException
-     *     (Unchecked exception) Thrown if some element in the specified
-     *     set is null, or the set is null.
-     *
+     * @param  attributes whose elements are to be added to this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
+     *         call
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code addAll(AttributeSet)} method
+     * @throws NullPointerException if some element in the specified set is
+     *         {@code null}, or the set is {@code null}
      * @see #add(Attribute)
      */
     public boolean addAll(AttributeSet attributes) {
@@ -428,20 +384,21 @@
     }
 
     /**
-     * Returns the number of attributes in this attribute set. If this
-     * attribute set contains more than {@code Integer.MAX_VALUE} elements,
-     * returns  {@code Integer.MAX_VALUE}.
+     * Returns the number of attributes in this attribute set. If this attribute
+     * set contains more than {@code Integer.MAX_VALUE} elements, returns
+     * {@code Integer.MAX_VALUE}.
      *
-     * @return  The number of attributes in this attribute set.
+     * @return the number of attributes in this attribute set
      */
     public int size() {
         return attrMap.size();
     }
 
     /**
+     * Returns an array of the attributes contained in this set.
      *
-     * @return the Attributes contained in this set as an array, zero length
-     * if the AttributeSet is empty.
+     * @return the attributes contained in this set as an array, zero length if
+     *         the {@code AttributeSet} is empty
      */
     public Attribute[] toArray() {
         Attribute []attrs = new Attribute[size()];
@@ -449,22 +406,20 @@
         return attrs;
     }
 
-
     /**
      * Removes all attributes from this attribute set.
      *
-     * @throws  UnmodifiableSetException
-     *   (unchecked exception) Thrown if this attribute set does not support
-     *     the {@code clear()} operation.
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code clear()} operation
      */
     public void clear() {
         attrMap.clear();
     }
 
-   /**
-     * Returns true if this attribute set contains no attributes.
+    /**
+     * Returns {@code true} if this attribute set contains no attributes.
      *
-     * @return true if this attribute set contains no attributes.
+     * @return {@code true} if this attribute set contains no attributes
      */
     public boolean isEmpty() {
         return attrMap.isEmpty();
@@ -472,18 +427,15 @@
 
     /**
      * Compares the specified object with this attribute set for equality.
-     * Returns {@code true} if the given object is also an attribute set and
-     * the two attribute sets contain the same attribute category-attribute
-     * value mappings. This ensures that the
-     * {@code equals()} method works properly across different
-     * implementations of the AttributeSet interface.
+     * Returns {@code true} if the given object is also an attribute set and the
+     * two attribute sets contain the same attribute category-attribute value
+     * mappings. This ensures that the {@code equals()} method works properly
+     * across different implementations of the {@code AttributeSet} interface.
      *
-     * @param  object to be compared for equality with this attribute set.
-     *
-     * @return  {@code true} if the specified object is equal to this
-     *       attribute   set.
+     * @param  object to be compared for equality with this attribute set
+     * @return {@code true} if the specified object is equal to this attribute
+     *         set
      */
-
     public boolean equals(Object object) {
         if (object == null || !(object instanceof AttributeSet)) {
             return false;
@@ -504,15 +456,14 @@
     }
 
     /**
-     * Returns the hash code value for this attribute set.
-     * The hash code of an attribute set is defined to be the sum
-     * of the hash codes of each entry in the AttributeSet.
-     * This ensures that {@code t1.equals(t2)} implies that
-     * {@code t1.hashCode()==t2.hashCode()} for any two attribute sets
+     * Returns the hash code value for this attribute set. The hash code of an
+     * attribute set is defined to be the sum of the hash codes of each entry in
+     * the {@code AttributeSet}. This ensures that {@code t1.equals(t2)} implies
+     * that {@code t1.hashCode()==t2.hashCode()} for any two attribute sets
      * {@code t1} and {@code t2}, as required by the general contract of
-     * {@link java.lang.Object#hashCode() Object.hashCode()}.
+     * {@link Object#hashCode() Object.hashCode()}.
      *
-     * @return  The hash code value for this attribute set.
+     * @return the hash code value for this attribute set
      */
     public int hashCode() {
         int hcode = 0;
@@ -522,5 +473,4 @@
         }
         return hcode;
     }
-
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/HashDocAttributeSet.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/HashDocAttributeSet.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,22 +23,24 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 import java.io.Serializable;
 
 /**
- * Class HashDocAttributeSet provides an attribute set which
- * inherits its implementation from class {@link HashAttributeSet
- * HashAttributeSet} and enforces the semantic restrictions of interface {@link
- * DocAttributeSet DocAttributeSet}.
+ * Class {@code HashDocAttributeSet} provides an attribute set which inherits
+ * its implementation from class {@link HashAttributeSet HashAttributeSet} and
+ * enforces the semantic restrictions of interface
+ * {@link DocAttributeSet DocAttributeSet}.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public class HashDocAttributeSet extends HashAttributeSet
     implements DocAttributeSet, Serializable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = -1128534486061432528L;
 
     /**
@@ -49,53 +51,43 @@
     }
 
     /**
-     * Construct a new hash doc attribute set,
-     * initially populated with the given value.
+     * Construct a new hash doc attribute set, initially populated with the
+     * given value.
      *
-     * @param  attribute  Attribute value to add to the set.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code attribute} is null.
+     * @param  attribute attribute value to add to the set
+     * @throws NullPointerException if {@code attribute} is {@code null}
      */
     public HashDocAttributeSet(DocAttribute attribute) {
         super (attribute, DocAttribute.class);
     }
 
     /**
-     * Construct a new hash doc attribute set,
-     * initially populated with the values from the given array.
-     * The new attribute set is populated by
-     * adding the elements of {@code attributes} array to the set in
-     * sequence, starting at index 0. Thus, later array elements may replace
-     * earlier array elements if the array contains duplicate attribute
-     * values or attribute categories.
+     * Construct a new hash doc attribute set, initially populated with the
+     * values from the given array. The new attribute set is populated by adding
+     * the elements of {@code attributes} array to the set in sequence, starting
+     * at index 0. Thus, later array elements may replace earlier array elements
+     * if the array contains duplicate attribute values or attribute categories.
      *
-     * @param  attributes  Array of attribute values to add to the set.
-     *                     If null, an empty attribute set is constructed.
-     *
-     * @exception  NullPointerException
-     *  (unchecked exception)
-     * Thrown if any element of {@code attributes} is null.
+     * @param  attributes array of attribute values to add to the set. If
+     *         {@code null}, an empty attribute set is constructed.
+     * @throws NullPointerException if any element of {@code attributes} is
+     *         {@code null}
      */
     public HashDocAttributeSet(DocAttribute[] attributes) {
         super (attributes, DocAttribute.class);
     }
 
     /**
-     * Construct a new attribute set, initially populated with the
-     * values from the  given set where the members of the attribute set
-     * are restricted to the {@code DocAttribute} interface.
+     * Construct a new attribute set, initially populated with the values from
+     * the given set where the members of the attribute set are restricted to
+     * the {@code DocAttribute} interface.
      *
      * @param  attributes set of attribute values to initialise the set. If
-     *                    null, an empty attribute set is constructed.
-     *
-     * @exception  ClassCastException
-     *     (unchecked exception) Thrown if any element of
-     * {@code attributes} is not an instance of
-     * {@code DocAttribute}.
+     *         {@code null}, an empty attribute set is constructed.
+     * @throws ClassCastException if any element of {@code attributes} is not an
+     *         instance of {@code DocAttribute}
      */
     public HashDocAttributeSet(DocAttributeSet attributes) {
         super(attributes, DocAttribute.class);
     }
-
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/HashPrintJobAttributeSet.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/HashPrintJobAttributeSet.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,22 +23,24 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 import java.io.Serializable;
 
 /**
- * Class HashPrintJobAttributeSet provides an attribute set
- * which inherits its implementation from class {@link HashAttributeSet
- * HashAttributeSet} and enforces the semantic restrictions of interface
- * {@link PrintJobAttributeSet PrintJobAttributeSet}.
+ * Class {@code HashPrintJobAttributeSet} provides an attribute set which
+ * inherits its implementation from class
+ * {@link HashAttributeSet HashAttributeSet} and enforces the semantic
+ * restrictions of interface {@link PrintJobAttributeSet PrintJobAttributeSet}.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public class HashPrintJobAttributeSet extends HashAttributeSet
     implements PrintJobAttributeSet, Serializable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = -4204473656070350348L;
 
     /**
@@ -49,49 +51,42 @@
     }
 
     /**
-     * Construct a new hash print job attribute set,
-     * initially populated with the given value.
+     * Construct a new hash print job attribute set, initially populated with
+     * the given value.
      *
-     * @param  attribute  Attribute value to add to the set.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code attribute} is null.
+     * @param  attribute attribute value to add to the set
+     * @throws NullPointerException if {@code attribute} is {@code null}
      */
     public HashPrintJobAttributeSet(PrintJobAttribute attribute) {
         super(attribute, PrintJobAttribute.class);
     }
 
     /**
-     * Construct a new hash print job attribute set,
-     * initially populated with the values from the given array.
-     * The new attribute set is populated
-     * by adding the elements of {@code attributes} array to the set in
-     * sequence, starting at index 0. Thus, later array elements may replace
-     * earlier array elements if the array contains duplicate attribute
-     * values or attribute categories.
+     * Construct a new hash print job attribute set, initially populated with
+     * the values from the given array. The new attribute set is populated by
+     * adding the elements of {@code attributes} array to the set in sequence,
+     * starting at index 0. Thus, later array elements may replace earlier array
+     * elements if the array contains duplicate attribute values or attribute
+     * categories.
      *
-     * @param  attributes Array of attribute values to add to the set.
-     *                    If null, an empty attribute set is constructed.
-     *
-     * @exception  NullPointerException (unchecked exception)
-     * Thrown if any element of {@code attributes}  is null.
+     * @param  attributes array of attribute values to add to the set. If
+     *         {@code null}, an empty attribute set is constructed.
+     * @throws NullPointerException if any element of {@code attributes} is
+     *         {@code null}
      */
     public HashPrintJobAttributeSet(PrintJobAttribute[] attributes) {
         super (attributes, PrintJobAttribute.class);
     }
 
     /**
-     * Construct a new attribute set, initially populated with the
-     * values from the  given set where the members of the attribute set
-     * are restricted to the {@code PrintJobAttribute} interface.
+     * Construct a new attribute set, initially populated with the values from
+     * the given set where the members of the attribute set are restricted to
+     * the {@code PrintJobAttribute} interface.
      *
      * @param  attributes set of attribute values to initialise the set. If
-     *                    null, an empty attribute set is constructed.
-     *
-     * @exception  ClassCastException
-     *     (unchecked exception) Thrown if any element of
-     * {@code attributes} is not an instance of
-     * {@code PrintJobAttribute}.
+     *         {@code null}, an empty attribute set is constructed.
+     * @throws ClassCastException if any element of {@code attributes} is not an
+     *         instance of {@code PrintJobAttribute}
      */
     public HashPrintJobAttributeSet(PrintJobAttributeSet attributes) {
         super(attributes, PrintJobAttribute.class);
--- a/src/java.desktop/share/classes/javax/print/attribute/HashPrintRequestAttributeSet.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/HashPrintRequestAttributeSet.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,22 +23,24 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 import java.io.Serializable;
 
 /**
- * Class HashPrintRequestAttributeSet inherits its implementation from
- * class {@link HashAttributeSet HashAttributeSet} and enforces the
- * semantic restrictions of interface
+ * Class {@code HashPrintRequestAttributeSet} inherits its implementation from
+ * class {@link HashAttributeSet HashAttributeSet} and enforces the semantic
+ * restrictions of interface
  * {@link PrintRequestAttributeSet PrintRequestAttributeSet}.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public class HashPrintRequestAttributeSet extends HashAttributeSet
     implements PrintRequestAttributeSet, Serializable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = 2364756266107751933L;
 
     /**
@@ -49,55 +51,44 @@
     }
 
     /**
-     * Construct a new print request attribute set,
-     * initially populated with the given value.
+     * Construct a new print request attribute set, initially populated with the
+     * given value.
      *
-     * @param  attribute  Attribute value to add to the set.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code attribute} is null.
+     * @param  attribute attribute value to add to the set
+     * @throws NullPointerException if {@code attribute} is {@code null}
      */
     public HashPrintRequestAttributeSet(PrintRequestAttribute attribute) {
         super (attribute, PrintRequestAttribute.class);
     }
 
     /**
-     * Construct a new print request attribute set, initially populated with
-     * the values from the given array. The new attribute set is populated
-     * by adding the elements of {@code attributes} array to the set in
-     * sequence, starting at index 0. Thus, later array elements may replace
-     * earlier array elements if the array contains duplicate attribute
-     * values or attribute categories.
+     * Construct a new print request attribute set, initially populated with the
+     * values from the given array. The new attribute set is populated by adding
+     * the elements of {@code attributes} array to the set in sequence, starting
+     * at index 0. Thus, later array elements may replace earlier array elements
+     * if the array contains duplicate attribute values or attribute categories.
      *
-     * @param  attributes  Array of attribute values to add to the set.
-     *                     If null, an empty attribute set is constructed.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception)
-     * Thrown if any element of {@code attributes} is null.
+     * @param  attributes array of attribute values to add to the set. If
+     *         {@code null}, an empty attribute set is constructed.
+     * @throws NullPointerException if any element of {@code attributes} is
+     *         {@code null}
      */
     public HashPrintRequestAttributeSet(PrintRequestAttribute[] attributes) {
         super (attributes, PrintRequestAttribute.class);
     }
 
-
     /**
-     * Construct a new attribute set, initially populated with the
-     * values from the  given set where the members of the attribute set
-     * are restricted to the {@code (PrintRequestAttributeSe} interface.
+     * Construct a new attribute set, initially populated with the values from
+     * the given set where the members of the attribute set are restricted to
+     * the {@code (PrintRequestAttributeSe} interface.
      *
      * @param  attributes set of attribute values to initialise the set. If
-     *                    null, an empty attribute set is constructed.
-     *
-     * @exception  ClassCastException
-     *     (unchecked exception) Thrown if any element of
-     * {@code attributes} is not an instance of
-     * {@code (PrintRequestAttributeSe}.
+     *         {@code null}, an empty attribute set is constructed.
+     * @throws ClassCastException if any element of {@code attributes} is not an
+     *         instance of {@code PrintRequestAttributeSe}
      */
     public HashPrintRequestAttributeSet(PrintRequestAttributeSet attributes)
     {
         super(attributes, PrintRequestAttribute.class);
     }
-
-
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/HashPrintServiceAttributeSet.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/HashPrintServiceAttributeSet.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -28,16 +28,20 @@
 import java.io.Serializable;
 
 /**
- * Class HashPrintServiceAttributeSet provides an attribute set
- * which inherits its implementation from class {@link HashAttributeSet
- * HashAttributeSet} and enforces the semantic restrictions of interface
+ * Class {@code HashPrintServiceAttributeSet} provides an attribute set which
+ * inherits its implementation from class
+ * {@link HashAttributeSet HashAttributeSet} and enforces the semantic
+ * restrictions of interface
  * {@link PrintServiceAttributeSet PrintServiceAttributeSet}.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public class HashPrintServiceAttributeSet extends HashAttributeSet
     implements PrintServiceAttributeSet, Serializable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = 6642904616179203070L;
 
     /**
@@ -47,52 +51,42 @@
         super (PrintServiceAttribute.class);
     }
 
-
     /**
-     * Construct a new hash print service attribute set,
-     *  initially populated with the given value.
+     * Construct a new hash print service attribute set, initially populated
+     * with the given value.
      *
-     * @param  attribute  Attribute value to add to the set.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception) Thrown if {@code attribute} is null.
+     * @param  attribute attribute value to add to the set
+     * @throws NullPointerException if {@code attribute} is {@code null}
      */
     public HashPrintServiceAttributeSet(PrintServiceAttribute attribute) {
         super (attribute, PrintServiceAttribute.class);
     }
 
     /**
-     * Construct a new print service attribute set, initially populated with
-     * the values from the given array. The new attribute set is populated
-     * by adding the elements of {@code attributes} array to the set in
-     * sequence, starting at index 0. Thus, later array elements may replace
-     * earlier array elements if the array contains duplicate attribute
-     * values or attribute categories.
+     * Construct a new print service attribute set, initially populated with the
+     * values from the given array. The new attribute set is populated by adding
+     * the elements of {@code attributes} array to the set in sequence, starting
+     * at index 0. Thus, later array elements may replace earlier array elements
+     * if the array contains duplicate attribute values or attribute categories.
      *
-     * @param  attributes  Array of attribute values to add to the set.
-     *                    If null, an empty attribute set is constructed.
-     *
-     * @exception  NullPointerException
-     *     (unchecked exception)
-     *      Thrown if any element of {@code attributes} is null.
+     * @param  attributes array of attribute values to add to the set. If
+     *         {@code null}, an empty attribute set is constructed.
+     * @throws NullPointerException if any element of {@code attributes} is
+     *         {@code null}
      */
     public HashPrintServiceAttributeSet(PrintServiceAttribute[] attributes) {
         super (attributes, PrintServiceAttribute.class);
     }
 
-
     /**
-     * Construct a new attribute set, initially populated with the
-     * values from the  given set where the members of the attribute set
-     * are restricted to the {@code PrintServiceAttribute} interface.
+     * Construct a new attribute set, initially populated with the values from
+     * the given set where the members of the attribute set are restricted to
+     * the {@code PrintServiceAttribute} interface.
      *
      * @param  attributes set of attribute values to initialise the set. If
-     *                    null, an empty attribute set is constructed.
-     *
-     * @exception  ClassCastException
-     *     (unchecked exception) Thrown if any element of
-     * {@code attributes} is not an instance of
-     * {@code PrintServiceAttribute}.
+     *         {@code null}, an empty attribute set is constructed.
+     * @throws ClassCastException if any element of {@code attributes} is not an
+     *         instance of {@code PrintServiceAttribute}
      */
     public HashPrintServiceAttributeSet(PrintServiceAttributeSet attributes)
     {
--- a/src/java.desktop/share/classes/javax/print/attribute/IntegerSyntax.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/IntegerSyntax.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -28,25 +28,28 @@
 import java.io.Serializable;
 
 /**
- * Class IntegerSyntax is an abstract base class providing the common
+ * Class {@code IntegerSyntax} is an abstract base class providing the common
  * implementation of all attributes with integer values.
- * <P>
+ * <p>
  * Under the hood, an integer attribute is just an integer. You can get an
- * integer attribute's integer value by calling {@link #getValue()
- * getValue()}. An integer attribute's integer value is
- * established when it is constructed (see {@link #IntegerSyntax(int)
- * IntegerSyntax(int)}). Once constructed, an integer attribute's
- * value is immutable.
+ * integer attribute's integer value by calling {@link #getValue() getValue()}.
+ * An integer attribute's integer value is established when it is constructed
+ * (see {@link #IntegerSyntax(int) IntegerSyntax(int)}). Once constructed, an
+ * integer attribute's value is immutable.
  *
- * @author  David Mendenhall
- * @author  Alan Kaminsky
+ * @author David Mendenhall
+ * @author Alan Kaminsky
  */
 public abstract class IntegerSyntax implements Serializable, Cloneable {
 
+    /**
+     * Use serialVersionUID from JDK 1.4 for interoperability.
+     */
     private static final long serialVersionUID = 3644574816328081943L;
 
     /**
      * This integer attribute's integer value.
+     *
      * @serial
      */
     private int value;
@@ -54,7 +57,7 @@
     /**
      * Construct a new integer attribute with the given integer value.
      *
-     * @param  value  Integer value.
+     * @param  value Integer value
      */
     protected IntegerSyntax(int value) {
         this.value = value;
@@ -64,14 +67,11 @@
      * Construct a new integer attribute with the given integer value, which
      * must lie within the given range.
      *
-     * @param  value       Integer value.
-     * @param  lowerBound  Lower bound.
-     * @param  upperBound  Upper bound.
-     *
-     * @exception  IllegalArgumentException
-     *     (Unchecked exception) Thrown if {@code value} is less than
-     *     {@code lowerBound} or greater than
-     *     {@code upperBound}.
+     * @param  value Integer value
+     * @param  lowerBound Lower bound
+     * @param  upperBound Upper bound
+     * @throws IllegalArgumentException if {@code value} is less than
+     *         {@code lowerBound} or greater than {@code upperBound}
      */
     protected IntegerSyntax(int value, int lowerBound, int upperBound) {
         if (lowerBound > value || value > upperBound) {
@@ -84,6 +84,7 @@
 
     /**
      * Returns this integer attribute's integer value.
+     *
      * @return the integer value
      */
     public int getValue() {
@@ -93,20 +94,16 @@
     /**
      * Returns whether this integer attribute is equivalent to the passed in
      * object. To be equivalent, all of the following conditions must be true:
-     * <OL TYPE=1>
-     * <LI>
-     * {@code object} is not null.
-     * <LI>
-     * {@code object} is an instance of class IntegerSyntax.
-     * <LI>
-     * This integer attribute's value and {@code object}'s value are
-     * equal.
-     * </OL>
+     * <ol type=1>
+     *   <li>{@code object} is not {@code null}.
+     *   <li>{@code object} is an instance of class {@code IntegerSyntax}.
+     *   <li>This integer attribute's value and {@code object}'s value are
+     *   equal.
+     * </ol>
      *
-     * @param  object  Object to compare to.
-     *
-     * @return  True if {@code object} is equivalent to this integer
-     *          attribute, false otherwise.
+     * @param  object {@code Object} to compare to
+     * @return {@code true} if {@code object} is equivalent to this integer
+     *         attribute, {@code false} otherwise
      */
     public boolean equals(Object object) {
 
--- a/src/java.desktop/share/classes/javax/print/attribute/PrintJobAttribute.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/PrintJobAttribute.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -26,19 +26,18 @@
 package javax.print.attribute;
 
 /**
- * PrintJobAttribute is a tagging interface which a printing attribute
+ * {@code PrintJobAttribute} is a tagging interface which a printing attribute
  * class implements to indicate the attribute describes the status of a Print
- * Job or some other characteristic of a Print Job. A Print Service
- * instance adds a number of PrintJobAttributes to a Print Job's attribute set
- * to report the Print Job's status. If an attribute implements {@link
- * PrintRequestAttribute PrintRequestAttribute} as well as PrintJobAttribute,
- * the client may include the attribute in a attribute set to
- * specify the attribute's value for the Print Job.
+ * Job or some other characteristic of a Print Job. A Print Service instance
+ * adds a number of {@code PrintJobAttributes} to a Print Job's attribute set to
+ * report the Print Job's status. If an attribute implements
+ * {@link PrintRequestAttribute PrintRequestAttribute} as well as
+ * {@code PrintJobAttribute}, the client may include the attribute in a
+ * attribute set to specify the attribute's value for the Print Job.
  *
+ * @author Alan Kaminsky
  * @see PrintRequestAttributeSet
  * @see PrintJobAttributeSet
- *
- * @author  Alan Kaminsky
  */
 public interface PrintJobAttribute extends Attribute {
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/PrintJobAttributeSet.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/PrintJobAttributeSet.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,85 +23,69 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 /**
- * Interface PrintJobAttributeSet specifies the interface for a set of print
- * job attributes, i.e. printing attributes that implement interface {@link
- * PrintJobAttribute PrintJobAttribute}. In the Print Service API, a
- * service uses a PrintJobAttributeSet to report the status of a print job.
- * <P>
- * A PrintJobAttributeSet is just an {@link AttributeSet AttributeSet} whose
- * constructors and mutating operations guarantee an additional invariant,
- * namely that all attribute values in the PrintJobAttributeSet must be
- * instances of interface {@link PrintJobAttribute PrintJobAttribute}.
- * The {@link #add(Attribute) add(Attribute)}, and
- * {@link #addAll(AttributeSet) >addAll(AttributeSet)} operations
- * are respecified below to guarantee this additional invariant.
+ * Interface {@code PrintJobAttributeSet} specifies the interface for a set of
+ * print job attributes, i.e. printing attributes that implement interface
+ * {@link PrintJobAttribute PrintJobAttribute}. In the Print Service API, a
+ * service uses a {@code PrintJobAttributeSet} to report the status of a print
+ * job.
+ * <p>
+ * A {@code PrintJobAttributeSet} is just an {@link AttributeSet AttributeSet}
+ * whose constructors and mutating operations guarantee an additional invariant,
+ * namely that all attribute values in the {@code PrintJobAttributeSet} must be
+ * instances of interface {@link PrintJobAttribute PrintJobAttribute}. The
+ * {@link #add(Attribute) add(Attribute)}, and
+ * {@link #addAll(AttributeSet) addAll(AttributeSet)} operations are respecified
+ * below to guarantee this additional invariant.
  *
- * @author  Alan Kaminsky
+ * @author Alan Kaminsky
  */
 public interface PrintJobAttributeSet extends AttributeSet {
 
     /**
      * Adds the specified attribute value to this attribute set if it is not
-     * already present, first removing any existing value in the same
-     * attribute category as the specified attribute value (optional
-     * operation).
+     * already present, first removing any existing value in the same attribute
+     * category as the specified attribute value (optional operation).
      *
-     * @param  attribute  Attribute value to be added to this attribute set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of
-     *          the call, i.e., the given attribute value was not already a
-     *          member of this attribute set.
-     *
-     * @throws  UnmodifiableSetException
-     *     (unchecked exception) Thrown if this attribute set does not
-     *     support the {@code add()} operation.
-     * @throws  ClassCastException
-     *     (unchecked exception) Thrown if the {@code attribute} is
-     *     not an instance of interface
-     *     {@link PrintJobAttribute PrintJobAttribute}.
-     * @throws  NullPointerException
-     *    (unchecked exception) Thrown if the {@code attribute} is null.
+     * @param  attribute attribute value to be added to this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
+     *         call, i.e., the given attribute value was not already a member of
+     *         this attribute set
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code add()} operation
+     * @throws ClassCastException if the {@code attribute} is not an instance of
+     *         interface {@link PrintJobAttribute PrintJobAttribute}
+     * @throws NullPointerException if the {@code attribute} is {@code null}
      */
     public boolean add(Attribute attribute);
 
     /**
-     * Adds all of the elements in the specified set to this attribute.
-     * The outcome is  the same as if the
-     * {@link #add(Attribute) add(Attribute)}
-     * operation had been applied to this attribute set successively with
-     * each element from the specified set. If none of the categories in the
-     * specified set  are the same as any categories in this attribute set,
-     * the {@code addAll()} operation effectively modifies this attribute
-     * set so that its value is the <i>union</i> of the two sets.
-     * <P>
-     * The behavior of the {@code addAll()} operation is unspecified if
-     * the specified set is modified while the operation is in progress.
-     * <P>
-     * If the {@code addAll()} operation throws an exception, the effect
-     * on this attribute set's state is implementation dependent; elements
-     * from the specified set before the point of the exception may or
-     * may not have been added to this attribute set.
+     * Adds all of the elements in the specified set to this attribute. The
+     * outcome is the same as if the {@link #add(Attribute) add(Attribute)}
+     * operation had been applied to this attribute set successively with each
+     * element from the specified set. If none of the categories in the
+     * specified set are the same as any categories in this attribute set, the
+     * {@code addAll()} operation effectively modifies this attribute set so
+     * that its value is the <i>union</i> of the two sets.
+     * <p>
+     * The behavior of the {@code addAll()} operation is unspecified if the
+     * specified set is modified while the operation is in progress.
+     * <p>
+     * If the {@code addAll()} operation throws an exception, the effect on this
+     * attribute set's state is implementation dependent; elements from the
+     * specified set before the point of the exception may or may not have been
+     * added to this attribute set.
      *
-     * @param  attributes  whose elements are to be added to this attribute
-     *            set.
-     *
-     * @return  {@code true} if this attribute set changed as a result of
-     *          the call.
-     *
-     * @throws  UnmodifiableSetException
-     *     (Unchecked exception) Thrown if this attribute set does not
-     *     support the {@code addAll()} method.
-     * @throws  ClassCastException
-     *     (Unchecked exception) Thrown if some element in the specified
-     *     set is not an instance of interface {@link PrintJobAttribute
-     *     PrintJobAttribute}.
-     * @throws  NullPointerException
-     *     (Unchecked exception) Thrown if the specified  set is null.
-     *
+     * @param  attributes whose elements are to be added to this attribute set
+     * @return {@code true} if this attribute set changed as a result of the
+     *         call
+     * @throws UnmodifiableSetException if this attribute set does not support
+     *         the {@code addAll()} method
+     * @throws ClassCastException if some element in the specified set is not an
+     *         instance of interface {@link PrintJobAttribute PrintJobAttribute}
+     * @throws NullPointerException if the specified set is {@code null}
      * @see #add(Attribute)
      */
     public boolean addAll(AttributeSet attributes);
--- a/src/java.desktop/share/classes/javax/print/attribute/PrintRequestAttribute.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/PrintRequestAttribute.java	Thu Aug 31 15:47:34 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
@@ -23,28 +23,25 @@
  * questions.
  */
 
-
 package javax.print.attribute;
 
 /**
- * Interface PrintRequestAttribute is a tagging interface which a printing
- * attribute class implements to indicate the attribute denotes a
+ * Interface {@code PrintRequestAttribute} is a tagging interface which a
+ * printing attribute class implements to indicate the attribute denotes a
  * requested setting for a print job.
  * <p>
- * Attributes which are tagged with PrintRequestAttribute and are also tagged
- * as PrintJobAttribute, represent the subset of job attributes which
- * can be part of the specification of a job request.
+ * Attributes which are tagged with {@code PrintRequestAttribute} and are also
+ * tagged as {@code PrintJobAttribute}, represent the subset of job attributes
+ * which can be part of the specification of a job request.
  * <p>
- * If an attribute implements {@link DocAttribute  DocAttribute}
- * as well as PrintRequestAttribute, the client may include the
- * attribute in a {@code Doc}'s attribute set to specify
- * a job setting which pertains just to that doc.
+ * If an attribute implements {@link DocAttribute DocAttribute} as well as
+ * {@code PrintRequestAttribute}, the client may include the attribute in a
+ * {@code Doc}'s attribute set to specify a job setting which pertains just to
+ * that doc.
  *
+ * @author Alan Kaminsky
  * @see DocAttributeSet
  * @see PrintRequestAttributeSet
- *
- * @author  Alan Kaminsky
  */
-
 public interface PrintRequestAttribute extends Attribute {
 }
--- a/src/java.desktop/share/classes/javax/print/attribute/PrintRequestAttributeSet.java	Thu Aug 31 13:00:23 2017 -0700
+++ b/src/java.desktop/share/classes/javax/print/attribute/PrintRequestAttributeSe