0
我們正在通過servlet生成一個JNLP,以便在JWS中運行一個applet。 第一次下載後,該文件的副本被緩存(我可以通過ControlPanel在java的臨時文件中看到它)。當我嘗試下載上傳一個小程序運行與緩存的一個動態生成的JNLP在本地緩存
繼生成JNLP的例子
<jnlp spec="1.0+" >
<information>
<title>SA</title>
<vendor>FOO</vendor>
<homepage href="https://ddd-003:8181/Server/Applets/www.foo.it"/>
<description>Applet</description>
<description kind="short">SA</description>
</information>
<security>
<all-permissions/>
</security>
<update check="always" policy="always"/>
<resources>
<java java-vm-args="-Djava.security.policy=applet.policy" version="1.6+"/>
<jar href="https://dddd-003.foo.it:8181/Server/Applets/SA.jar" download="eager" main="true"/>
</resources>
<applet-desc name="SA" main-class="com.foo.sign.applet.SPRemote" width="1004" height="80">
<param name="fileHandler" value="20170404195941440076"/>
<param name="timestampId" value="default"/>
.....
<param name="layoutType" value="ORIZ"/>
</applet-desc>
</jnlp>
我試圖設置JNLP文件中的代碼庫和HREF(HREF等同於一個用於按鈕)產生的,
<jnlp spec="1.0+" codebase="https://ddd-003.foo.it"
href="/Server/servlet/IntfServlet?cusId=020184050148978&appId=4&handId=20170404203437419794&opcode=jnlp" >
但我收到異常
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.sun.javaws.Launcher.executeApplet(Unknown Source)
at com.sun.javaws.Launcher.launchAppUsingAppletLifecycle(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javaws.Launcher$3.run(Unknown Source)
... 1 more
Caused by: java.lang.NullPointerException
at sun.plugin2.applet.viewer.JNLP2Viewer.parseAndInitialize(Unknown Source)
at sun.plugin2.applet.viewer.JNLP2Viewer.run(Unknown Source)
at sun.plugin2.applet.viewer.JNLP2Viewer.main(Unknown Source)
... 6 more
和控制檯我看到
Java.net.MalformedURLException: no protocol:
at java.net.URL.<init>(URL.java:593)
at java.net.URL.<init>(URL.java:490)
at java.net.URL.<init>(URL.java:439)
at com.sun.deploy.cache.CachedJarFile.<init>(Unknown Source)
at com.sun.deploy.cache.CacheEntry$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.cache.CacheEntry.getJarFile(Unknown Source)
at com.sun.deploy.cache.ResourceProviderImpl.getResourceObject(Unknown Source)
at sun.plugin2.applet.viewer.JNLP2Viewer.parseAndInitialize(Unknown Source)
at sun.plugin2.applet.viewer.JNLP2Viewer.run(Unknown Source)
at sun.plugin2.applet.viewer.JNLP2Viewer.main(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javaws.Launcher$3.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
java.net.MalformedURLException: no protocol:
at java.net.URL.<init>(URL.java:593)
at java.net.URL.<init>(URL.java:490)
at java.net.URL.<init>(URL.java:439)
at com.sun.deploy.cache.ResourceProviderImpl$1.getResourceURL(Unknown Source)
at sun.plugin2.applet.viewer.JNLP2Viewer.parseAndInitialize(Unknown Source)
at sun.plugin2.applet.viewer.JNLP2Viewer.run(Unknown Source)
at sun.plugin2.applet.viewer.JNLP2Viewer.main(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javaws.Launcher$3.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
#### Java Web Start Error:
#### java.lang.reflect.InvocationTargetException
一種替代辦法是刪除緩存JNLP文件執行一次applet代碼的init,但是我不知道如何編程 任何幫助感激
訪問緩存文件夾UPDATE
我忘了提,我嘗試設置的HttpResponse的頭在幾個方面。
的最後一次嘗試是
res.setIntHeader("Expires", 0);
res.setContentType("application/x-java-jnlp-file");
res.setHeader("x-java-jnlp-version-id", "1.6+");
res.setHeader("Pragma", "no-cache");
SecureRandom random = new SecureRandom();
res.setHeader("Etag", new BigInteger(130, random).toString(32));
res.setDateHeader("Date", new Date().getTime());
res.setDateHeader("Last-Modified", (new Date()).getTime());
res.setHeader("Cache-Control", "no-cache,no-store,max-age=0");
res.setHeader("Content-disposition", "inline; filename=\"SignApplet"+new Date().getTime()+".jnlp\"");