折腾了小一天的时间用W3c 的DOM读取xml字符串的问题终于得到解决。
问题 webservice 接受通过XMl字符串(base64编码后传输),接受字符串对xml字符串进行解析操作。
解决方式:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
(String text= it.sauronsoftware.base64.Base64.decode(str,"UTF-8");)
传输时使用的是Base64位编码格式,接收到字符串后进行转换。
StringReader sr = new StringReader(text);
InputSource is = new InputSource(sr);
Document doc = db.parse(is);
........
inputSource 此类允许 SAX 应用程序封装有关单个对象中的输入源的信息,它可包括公共标识符、系统标识符、字节流(可能带有指定的编码)、基本 URI 和/ 或字符流。
在以下两种情况下应用程序可以将输入源提供给解析器:作为 Parser.parse 方法的参数,或者作为 EntityResolver.resolveEntity 方法的返回值。
SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入。如果有字符流可用,则解析器将直接读取该流,而忽略该流中找到的任何文本编码声明。如果没有字符流,但却有字节流,则解析器将使用该字节流,从而使用在 InputSource 中指定的编码,或者另外(如果未指定编码)通过使用某种诸如 XML 规范 中的算法算法自动探测字符编码。如果既没有字符流,又没有字节流可用,则解析器将尝试打开到由系统标识符标识的资源的 URI 连接。