1. 程式人生 > >SOAP訊息的簽名驗籤Handler

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