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