playwright-java icon indicating copy to clipboard operation
playwright-java copied to clipboard

[ISSUE] FileSystemNotFoundException: Provider "bundleresource" not installed

Open abhinav-kipper opened this issue 4 years ago • 8 comments

Hi, I am using playwright version 1.2.0 and getting the "Provider "bundleresource" not installed" exception.

Stacktrace -

Caused by: java.lang.RuntimeException: Failed to create driver
	at com.microsoft.playwright.impl.Driver.ensureDriverInstalled(Driver.java:46)
	at com.microsoft.playwright.impl.PlaywrightImpl.create(PlaywrightImpl.java:33)
	at com.microsoft.playwright.Playwright.create(Playwright.java:76)
	at printjob.browser.ChromiumBrowser.<init>(ChromiumBrowser.java:18)
	at printjob.browser.ChromiumBrowser.getInstance(ChromiumBrowser.java:35)
	at printjob.PrintJob.getBrowserContext(PrintJob.java:28)
	at printjob.PrintJob.execute(PrintJob.java:35)

Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)[:1.8.0_172]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)[:1.8.0_172]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)[:1.8.0_172]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)[:1.8.0_172]
	at com.microsoft.playwright.impl.Driver.createDriver(Driver.java:65)
	at com.microsoft.playwright.impl.Driver.ensureDriverInstalled(Driver.java:44)
	... 34 more
Caused by: java.nio.file.FileSystemNotFoundException: Provider "bundleresource" not installed
	at java.nio.file.Paths.get(Paths.java:147)[:1.8.0_172]
	at com.microsoft.playwright.impl.DriverJar.extractDriverToTempDir(DriverJar.java:68)
	at com.microsoft.playwright.impl.DriverJar.<init>(DriverJar.java:32)

POM snippet- I used maven bundle plugin OSGI for bundling/creating jar of my project.

<plugin>
    
<groupId>org.apache.felix</groupId>
    
     <artifactId>maven-bundle-plugin</artifactId>
    
     <version>5.1.2</version>
    
     <extensions>true</extensions>
    
     <configuration>
        
            <unpackBundle>true</unpackBundle>
        
            <instructions>
            
                    <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                     
                    <Export-Package>com.project.html2pdf</Export-Package>
           
                    <Embed-Dependency>*;scope=compile</Embed-Dependency>
            
                   <Import-Package>sun.misc.*;resolution:=optional,*</Import-Package>
            
                   <Embed-Transitive>true</Embed-Transitive>
        
             </instructions>
   
        </configuration>

</plugin>


<dependency>
   
        <groupId>com.microsoft.playwright</groupId>
    
       <artifactId>playwright</artifactId>
    
       <version>1.12.0</version>
    
       <scope>compile</scope>

</dependency>
```


Can anyone please help resolve this issue?

abhinav-kipper avatar Jun 16 '21 03:06 abhinav-kipper

Speculation Ques - Can this issue occur if the browsers are not installed at location - %USERPROFILE%\AppData\Local\ms-playwright by playwright dependency? Because of internal proxy or something else?

abhinav-kipper avatar Jun 16 '21 08:06 abhinav-kipper

Do you build a single jar app? Can you share the project? I'm interested in the pom.xml where the bundling is configured.

Speculation Ques - Can this issue occur if the browsers are not installed at location - %USERPROFILE%\AppData\Local\ms-playwright by playwright dependency? Because of internal proxy or something else?

The browsers are not getting installed because it fails on the previous step where it tries to extract driver binaries from driver-bundle.jar to a temp directory. I believe the problem is similar to the one we fixed for springboot in #306

yury-s avatar Jun 16 '21 16:06 yury-s

@yury-s Unfortunately I cannot share the project, however I am creating standard OSGI bundle by adding packaging tag like this - <groupId>groupid</groupId> <artifactId>artifactid</artifactId>
 <version>1.0.0</version>
 <packaging>bundle</packaging>

and using maven-bundle-plugin for the bundling which is configured as per the pom shared above.

I referred to the issue #306 , So Does the issue can be that driver-bundle.jar not present in the class path ?

abhinav-kipper avatar Jun 17 '21 15:06 abhinav-kipper

I referred to the issue #306 , So Does the issue can be that driver-bundle.jar not present in the class path ?

Most likely there is no FileSystem provider for bundleresource scheme. This comment explains similar problem in another project. Basically there has to be a provider that represents bundleresource resources as a java filesystem (similar to jar files), without it Paths.get("bundleresource://...") will throw.

yury-s avatar Jun 17 '21 18:06 yury-s

I tried resolving the issue but could not find anything helpful.

@yury-s I have created a OSGI dummy project for you to be able to reciprocate the issue and debug easily.

Can you please help resolving this issue?

abhinav-kipper avatar Jun 23 '21 15:06 abhinav-kipper

Screenshot 2021-06-23 at 8 41 48 PM Image of similar exception thrown by dummy project

abhinav-kipper avatar Jun 23 '21 15:06 abhinav-kipper

There is no easy fix for accessing the bundled drivers in the OSGI environment, but i found another solution:

  • exlude driver-bundle (optional to save diskspace)
  • download the driver (example) https://playwright.azureedge.net/builds/driver/playwright-1.29.0-win32_x64.zip
  • extract it
  • call System.setProperty("playwright.cli.dir","pathToExtractedDriver")
  • call "playwright script in pathToExtractedDriver" with param install

RaHehl avatar Feb 01 '23 11:02 RaHehl