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的部署