2017-04-04 26 views
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\""); 

回答

0

我已經解決了,但我不知道究竟是什麼做我搬到了JNLP創建一個jsp頁面的伎倆 ,只是操控更容易 我在那裏工作更多的是在JNLP標籤,周圍的codebase和HREF 附帶產生的JNLP文件

<jnlp spec="1.0+" codebase="https://ddd-003.trustitalia.it/Server/servlet/" href="" > 
<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> 

似乎已經奏效的唯一的事情就是離開空href屬性,進入codebase一個不只是主機,但也是上下文路徑(不是servlet名稱)

希望這會幫助別人