Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8230640

Canceling an octet-stream Printjob as byte array fails

XMLWordPrintable

    • 2d
    • x86_64
    • windows_10

      ADDITIONAL SYSTEM INFORMATION :
      OS: Microsoft Windows 10 Education
      OS Version: 10.0.17763 Build 17763
      Java Runtime Information: 12.0.1

      A DESCRIPTION OF THE PROBLEM :
      If using the javax.print library to create a printjob with a DocFlavor "application/octet-stream" and className "[B", the canceling of this job throws always a javax.print.PrintException with the message:
      Job could not be cancelled.
      at java.desktop/sun.print.Win32PrintJob.cancel(Win32PrintJob.java:747)
             ....



      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Create a byte array (with random data)
      Create a DocFlavor with mimeType = "application/octet-stream" and className = "[B"
      Create a javax.print.Doc with the byte array, the DocFlavor and for the attributes null
      Create a Printservice
      Create a PrintRequestAttributeSet
      Create a DocPrintJob with the PrintService (service.createPrintJob())
      Call (PrintJob).print with the Doc and the PrintRequestAttributeSet
      Create a CancelablePrintJob from the previous printjob (cast the job to
      (CancelablePrintJob))
      Call cancel


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Job is canceled.
      ACTUAL -
      javax.print.PrintException: Job could not be cancelled.
      at java.desktop/sun.print.Win32PrintJob.cancel(Win32PrintJob.java:747)

      ---------- BEGIN SOURCE ----------
      import javax.print.CancelablePrintJob;
      import javax.print.Doc;
      import javax.print.DocFlavor;
      import javax.print.DocPrintJob;
      import javax.print.PrintException;
      import javax.print.PrintService;
      import javax.print.PrintServiceLookup;
      import javax.print.SimpleDoc;
      import javax.print.attribute.HashPrintRequestAttributeSet;
      import javax.print.attribute.PrintRequestAttributeSet;
      import javax.print.attribute.standard.JobName;

      public class Main {
          public static void main(final String[] args) {
              byte[] test = {0x30, 0x31, 0x32};
              DocFlavor docflavor = new DocFlavor("application/octet-stream", "[B");
              Doc doc = new SimpleDoc(test, docflavor, null);
              // Just a dummyprinter
              PrintService service = PrintServiceLookup.lookupDefaultPrintService();
              PrintRequestAttributeSet asset = new HashPrintRequestAttributeSet();
              asset.add(new JobName("Testprinting", null));
              DocPrintJob job = service.createPrintJob();
              try {
                  job.print(doc, asset);
              } catch (PrintException p) {
                  p.printStackTrace();
              }

              CancelablePrintJob cancelableJob = (CancelablePrintJob) job;
              try {
                  cancelableJob.cancel();
              } catch (PrintException e) {
                  e.printStackTrace();
              }
          }
      }
      ---------- END SOURCE ----------

      FREQUENCY : always


            psadhukhan Prasanta Sadhukhan
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: