Comment recevoir l'argument XML de storedProcedudure en utilisant spring jdbcTemplate?

J'utilise le server MS-SQL pour mon application de spring. J'ai une procédure de magasin, que je veux exécuter depuis mon application.

CREATE PROCEDURE dbo.spCheckPerson ( @inXML XML, @outXML XML OUTPUT, @inDebug BIT = 0 ) AS --do sth SET @outXML = '<person><name>Piotr</name></person>' RETURN 0 

J'essaye de l'exécuter par ce DAO:

 import java.sql.SQLException; import java.sql.SQLXML; import java.sql.Types; import java.util.Map; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.core.simple.SimpleJdbcCall; import org.springframework.jdbc.support.xml.Jdbc4SqlXmlHandler; public class PersonDAOImpl implements PersonDAO { private JdbcTemplate jdbcTemplate; private SimpleJdbcCall spCheckPerson; public PersonDAOImpl(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } @Override public Ssortingng checkPersonData(Ssortingng personData) { Jdbc4SqlXmlHandler sqlXmlHandler = new Jdbc4SqlXmlHandler(); spCheckPerson = new SimpleJdbcCall(jdbcTemplate) .withoutProcedureColumnMetaDataAccess() .withProcedureName("spCheckPerson") .declareParameters(new SqlParameter("inXML", Types.SQLXML)) .declareParameters(new SqlOutParameter("outXML", Types.SQLXML)); Map<Ssortingng, Object> result = spCheckPerson.execute(sqlXmlHandler.newSqlXmlValue("<test>Test</test>")); return ((SQLXML) result.get("outXML")).getSsortingng(); } } 

mais j'ai une erreur

 SEVERE: Servlet.service() for servlet [SpringDispatcher] in context with path [/TestSpringProject] threw exception [Request processing failed; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: The TDS protocol stream is not valid.] with root cause com.microsoft.sqlserver.jdbc.SQLServerException: The TDS protocol stream is not valid. at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667) at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1654) at com.microsoft.sqlserver.jdbc.SQLServerConnection.throwInvalidTDS(SQLServerConnection.java:1635) at com.microsoft.sqlserver.jdbc.TDSReader.throwInvalidTDS(IOBuffer.java:4747) at com.microsoft.sqlserver.jdbc.TDSReader.readBytes(IOBuffer.java:5061) at com.microsoft.sqlserver.jdbc.TDSReader.readWrappedBytes(IOBuffer.java:5082) at com.microsoft.sqlserver.jdbc.TDSReader.readInt(IOBuffer.java:5023) at com.microsoft.sqlserver.jdbc.TDSReader.readUnsignedInt(IOBuffer.java:5040) at com.microsoft.sqlserver.jdbc.PLPInputStream.readBytesInternal(PLPInputStream.java:313) at com.microsoft.sqlserver.jdbc.PLPInputStream.getBytes(PLPInputStream.java:104) at com.microsoft.sqlserver.jdbc.PLPXMLInputStream.getBytes(PLPInputStream.java:509) at com.microsoft.sqlserver.jdbc.SQLServerSQLXML.getSsortingng(SQLServerSQLXML.java:290) at pl.test.dao.PersonDAOImpl.checkPersonData(PersonDAOImpl.java:34) 

Comment devrais-je recevoir correctement cet object? Quelle class devrais-je utiliser pour jeter de la valeur? Qu'est-ce que le protocole TDS? J'ai essayé d'utiliser la méthode: getCharacterStream () de SQLXML mais elle donne la même exception.