United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-4707777 JPS only prints to default printer on Solaris 8.
JDK-4707777 : JPS only prints to default printer on Solaris 8.

Details
Type:
Bug
Submit Date:
2002-06-25
Status:
Resolved
Updated Date:
2002-12-09
Project Name:
JDK
Resolved Date:
2002-12-09
Component:
client-libs
OS:
solaris,solaris_8,linux
Sub-Component:
2d
CPU:
x86,sparc
Priority:
P4
Resolution:
Fixed
Affected Versions:
1.4.0,1.4.1
Fixed Versions:
1.4.2 (b10)

Related Reports
Duplicate:

Sub Tasks

Description
description: FULL PRODUCT VERSION :
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)


FULL OPERATING SYSTEM VERSION :
SunOS brubert 5.8 Generic_108528-12 sun4u sparc SUNW,Ultra-1

ADDITIONAL OPERATING SYSTEMS :
Red Hat Linux 7.2, and I suspect all Unix flavors
error dos _not_ occur in Windows


EXTRA RELEVANT SYSTEM CONFIGURATION :
In my environment it was any network printer, all were non
IPP.

A DESCRIPTION OF THE PROBLEM :
JPS (javax.print.*) will only print to the system default
printer.
This leads me to suspect that java internally is calling
the posix "lp" printing command without utilizing the -d
option to lp.

Correct me if I am wrong, but you setup the default printer
by doing one of the following:
1.) LPDEST or PRINTER environment variable settings
2.) _default destination in $HOME/.printers
3.) _default destination in /etc/printers.conf
4.) _default destination in FNS

If none of the above are set, then JPS will print nothing.

If one of the above are set, then JPS will only print to
that default printer, even if you specify a different one
in JPS.

EXPECTED VERSUS ACTUAL BEHAVIOR :
When selecting a non-default printer I would expect that
non-default printer to pruduce my output, but the default
printer was the one that printed it instead, no matter what
printer I chose.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. identify your default printer, by the following command:
lpstat -d
2. identify another printer on your system, by the
following command: lpstat -s
3. ensure that you can print to both printers from steps 1
and 2 by issuing the command: echo "DOES THIS PRINT" |lp -d
PRINTER_NAME
4. create a postscript file named "example.ps"
5. in the same step as number 4., compile and run the
attached program (with jdk1.4 of course) and select the non-
default printer identified in step 2.

---------- BEGIN SOURCE ----------
import java.io.*;
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import javax.print.event.*;

public class PrintPS {

    public static void main(String args[]) {
        PrintPS ps = new PrintPS();
    }

    public PrintPS() {
        DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
        PrintRequestAttributeSet aset =
            new HashPrintRequestAttributeSet();
        aset.add(MediaSizeName.ISO_A4);

        /* locate a print service that can handle it */
        PrintService[] pservices =
            PrintServiceLookup.lookupPrintServices(flavor, aset);
        if (pservices.length > 0) {

            /* create a print job for the chosen service */
            PrintService pserv = ServiceUI.printDialog(null, 50, 50,
pservices,
                    null, flavor, aset);
            //DocPrintJob pj = pservices[0].createPrintJob();
            DocPrintJob pj = pserv.createPrintJob();
            try {
                FileInputStream fis = new FileInputStream("example.ps");
                Doc doc = new SimpleDoc(fis, flavor, null);

                /* print the doc as specified */
                pj.print(doc, aset);

            } catch (IOException ie) {
                System.err.println(ie);
            } catch (PrintException e) {
                System.err.println(e);
            }
        }
    }
}

---------- END SOURCE ----------

                                    

Comments
EVALUATION

The UnixPrintJob implementation is constructed from the correct UnixPrintService
implementation. However the printer name is not copied from the service to
the job so the destination field is left empty, so it spools to the default printer. The fix is simple - just copy the printer name from the service to
the destination variable of the job.

###@###.### 2002-12-02
============================
                                     
2002-12-02
CONVERTED DATA

BugTraq+ Release Management Values

COMMIT TO FIX:
mantis-beta

FIXED IN:
mantis-beta

INTEGRATED IN:
mantis-b10
mantis-beta


                                     
2004-06-14



Hardware and Software, Engineered to Work Together