2011-10-25 29 views
0

我想獲得簽名的小+ XSL轉換簽名Applet與外部文檔做XSLT時拋出的AccessControlException()

幫助我有一個簽署小程序(1個JAR文件)執行XSL轉換,其中輸入XML,XSL和輸出在本地文件系統上讀取/寫入。 我已經與JRE

  • 1.5.0_22
  • 1.6.0_29
  • 1.7.0_01

試了一下,結果是一樣的:

當我的XSL文件包含對外部XML文檔的引用:

<xsl:variable name="extXML" select="document('/tmp/A.XML')"/> 
<xsl:value-of select="$extXML/Child"/> 

轉型失敗:

com.sun.org.apache.xalan.internal.xsltc.TransletException: java.security.AccessControlException: access denied (java.io.FilePermission /tmp/A.XML read) 
at com.sun.org.apache.xalan.internal.xsltc.dom.LoadDocument.documentF(LoadDocument.java:142) 
at in.topLevel() 
at in.transform() 
at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:603) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 
at myxsltapplet.MyXSLTApplet.xsltTransform(MyXSLTApplet.java:66) 

如果參考外部XML文檔被註釋掉一切工作就好了。 使用策略文件解決了這個問題,但不幸的是這不是一個選項。

我已經實現了一個URIResolver,我爲TransformerFactory設置,但我也得到AccessControlException。

在applet我檢索了SecurityManager及其AccessControlContext,並記錄了他們的哈希碼:

SecurityManager: [email protected] 
getSecurityContext(): [email protected] 

和我一樣的在我的URIResolver實現和AccessControlContext的改變:

SecurityManager: [email protected] 
getSecurityContext(): [email protected] 

呼叫原始AccessControlContext上的checkPermission毫無例外地運行。

在我的URIResolver訪問新的AccessControlContext調用的checkPermission:

AccessControlContext acc = (AccessControlContext) System.getSecurityManager().getSecurityContext(); 
acc.checkPermission(new FilePermission("/tmp/A.XML", "read")); 

拋出:

ERROR: 'java.security.AccessControlException: access denied (java.io.FilePermission /tmp/A.XML read)' 

它是一個正常的事情或一個錯誤? 感謝您的任何想法,

+0

標準的應用程序可以讀取輸入的文件?那麼該文件的系統默認使用者呢? –

+0

是的。如果刪除了對外部XML文檔的引用,則該轉換將起作用。 – Atos

+0

使用JavaScript調用的功能是什麼? –

回答

相關問題