Java 如何使用SimpleJDBCall在StoredProcess中获取XML out参数

Java 如何使用SimpleJDBCall在StoredProcess中获取XML out参数,java,sql-server,spring,jdbc,Java,Sql Server,Spring,Jdbc,我有一个返回XML的过程,我使用SimpleJDBCall来执行它。当我将结果作为映射得到时,它返回一个SQLServerSQLXML。我将其转换为java.sql.SQLXML以使用getString()方法,但没有成功。它抛出一个NegativeArraySize异常。当我在SQLServerManagementStudio中执行该过程时,它工作并生成XML 我已经尝试获取二进制流,但没有成功,它只返回了两个unicode字符:ÿ(255)和þ(254) 这是我的SimpleJDBCall:

我有一个返回XML的过程,我使用SimpleJDBCall来执行它。当我将结果作为映射得到时,它返回一个SQLServerSQLXML。我将其转换为java.sql.SQLXML以使用getString()方法,但没有成功。它抛出一个NegativeArraySize异常。当我在SQLServerManagementStudio中执行该过程时,它工作并生成XML

我已经尝试获取二进制流,但没有成功,它只返回了两个unicode字符:
ÿ
(255)和
þ
(254)

这是我的SimpleJDBCall:

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();


MapSqlParameterSource params=新的MapSqlParameterSource();
params.addValue(“@ID”,inDTO.getIdCertificado());
Map mapa=simpleCall.execute(参数);
SQLXML=(SQLXML)mapa.get(“@XmlOut”);
String val=xml.getString();

我可以使用inputstream。指针似乎在末尾,所以我只需重置它并将xml解析为文档:

InputStream binaryStream = xml.getBinaryStream();
binaryStream.reset();
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document result = parser.parse(binaryStream);
然后用它来获取我的属性和值