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