我有一个返回XML的过程,并且我正在使用simpleJdbcCall来执行它。当我得到结果作为地图时,它返回一个SQLServerSQLXML。我将其强制转换为java.sql.SQLXML以使用getString()方法,但没有成功。它抛出NegativeArraySize异常。当我在SQLServer Management Studio中执行该过程时,它将起作用并生成XML。
我已经尝试获取二进制流,但是没有成功,它只返回了两个Unicode字符:ÿ
(255)和þ
(254)。
这是我的SimpleJdbcCall:
SimpleJdbcCall simpleCall = new SimpleJdbcCall(dataSource)
.withCatalogName("dbo")
.withProcedureName("pProcName")
.withoutProcedureColumnMetaDataAccess()
.declareParameters(new SqlParameter("@ID", Types.BIGINT))
.declareParameters(new SqlOutParameter("@XmlOut", Types.SQLXML));
我已经设置了ID并将其放在MapSqlParameterSource上,然后执行该过程:
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("@ID", inDTO.getIdCertificado());
Map<String, Object> mapa = simpleCall.execute(params);
SQLXML xml = (SQLXML) mapa.get("@XmlOut");
String val = xml.getString();
答案 0 :(得分:0)
我可以开始使用inputstream了。看来指针在最后,所以我要做的就是重置它并将xml解析为文档:
InputStream binaryStream = xml.getBinaryStream();
binaryStream.reset();
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document result = parser.parse(binaryStream);
然后使用它来获取我的属性和值。