SOAP訊息的簽名驗籤Handler
TODO:SOAP訊息的簽名驗籤
現在需要解決的問題:
1、【2007-01-22】在Axis中,如果SOAP訊息攜帶附件的時候,由SOAP報文轉換成xml document時,解析報錯,導致無法正確簽名,SAX解析報錯org.xml.sax.SAXParseException: :Content is not allowed in prolog。這裡對SOAP報文的簽名就是按照對XML檔案簽名處理,Web服務可以正確呼叫
解決:尚未解決
2、【2007-01-22】在伺服器端,在一個web服務中,對於上傳上來的XML檔案,可以通過DOM解析,修改了Document之後,想通過Transformer將dom物件儲存到XML檔案中去,在通過 TransformerFactory得到Transformer例項語句處,Web服務直接終止。如果將儲存上面的語句註釋後,程式正常返回。不能使用TransformerFactory,不知道原因在哪?可不想自己將document內容寫到檔案中去。在第一行語句處Web服務就直接終止TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
// doc.normalize();
DOMSource ds = new DOMSource(doc);
StreamResult sr = new StreamResult(new FileOutputStream(filePath));
t.transform(ds, sr);,上面放在了一個try-catch中,但程式沒有任何異常丟擲,axis報出java.lang.reflect.InvocationTargetException,如果這個功能通過一個應用程式執行,沒有任何問題,XML檔案可以正常讀入寫入,通過Web服務的形式釋出後,從客戶端傳過來的XML檔案可以正常解析,並可以從DataHandler以流的形式寫入到檔案中
解決:解決。在使用TransformerFactory之前加上System.setProperty("javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
一行程式碼就可以了。還有一種做法是配置一個jaxp.properties放在java_home/jre/lib/下,或者換成jdk1.4沒有這個問題。 還有一點需要注意的就是在更新XML檔案時,注意增加兩個相同的Element
理論介紹
資料簽名
檔案摘要(MD5,SHA1)
檔案簽名
驗證簽名
簽名Handler的實現
驗籤Handler的實現
Handler的部署