Re: javax.print.PrintServiceLookup under Karaf

2017-10-13 Thread Guillaume Nodet
It looks like the code is using:
  ServiceLoader.load(PrintServiceLookup.class)
If those services are provided by the JRE, then you need to make sure that
the first time the service list is looked up, the thread context class
loader is set to null, so that it will use the system classloader to load
those services.
That's really a bad idea to initialize a static variable with something
dependent on the context, but there's not much that can be done about it.
So whenever you use lookupPrintServices make sure you do it with a block
like:

public static final PrintService[] lookupPrintServices(DocFlavor flavor,
AttributeSet attributes) {
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
  try {
  Thread.currentThread().setContextClassLoader(null);
  return PrintServiceLookup.lookupPrintServices(flavor, attributes);
  } finally {
  Thread.currentThread().setContextClassLoader(tccl);
  }
}

Guillaume

2017-10-13 20:07 GMT+02:00 Ygor Castor :

> Hello! I'm having a problem with PrintServiceLookup under Karaf, it seems
> that when i run a PrintServiceLookup.lookupPrintServices(null, null) it
> always return empty, after some investigation i found that this method
> searchs for a javax.print.PrintServiceLookup under /META-INF/services , the
> file contains the following:
>
> # Provider for Java Print Service
> sun.print.Win32PrintServiceLookup
>
> It seems that it looks to the running JRE to define which printService to
> use, so i created the required folder in my bundle and copied the
> javax.print.PrintServiceLookup file to it, with that it worked. But i can't
> rely on that in a production server, since the application can be runned on
> linux or windows.
>
> How can i fix that?
>



-- 

Guillaume Nodet


javax.print.PrintServiceLookup under Karaf

2017-10-13 Thread Ygor Castor
Hello! I'm having a problem with PrintServiceLookup under Karaf, it seems
that when i run a PrintServiceLookup.lookupPrintServices(null, null) it
always return empty, after some investigation i found that this method
searchs for a javax.print.PrintServiceLookup under /META-INF/services , the
file contains the following:

# Provider for Java Print Service
sun.print.Win32PrintServiceLookup

It seems that it looks to the running JRE to define which printService to
use, so i created the required folder in my bundle and copied the
javax.print.PrintServiceLookup file to it, with that it worked. But i can't
rely on that in a production server, since the application can be runned on
linux or windows.

How can i fix that?