Uncategorized SQLException pour SQL
Je suis à l'aide de Spring Integration dans mon projet.
Comme par ma condition, j'ai appeler deux procédures stockées simultanément. Voici mon code:
<int:service-activator ref="msgHandler" method="buildRequestBasedDataSource" />
<int-jdbc:stored-proc-outbound-gateway
id="PQIssueHistory-StoredProcedure-PQCOMMENTLOOKUP"
auto-startup="true"
data-source="routingDataSource"
stored-procedure-name="${PQIssueHistory-StoredProcedure-PQCOMMENTLOOKUP}"
skip-undeclared-results="true"
ignore-column-meta-data="true"
use-payload-as-parameter-source = "false"
expect-single-result="true" >
<int-jdbc:sql-parameter-definition name="P_CRDATTIM" direction="IN" type="VARCHAR" />
<int-jdbc:sql-parameter-definition name="P_RECORDCD" direction="IN" type="VARCHAR" />
<int-jdbc:sql-parameter-definition name="P_CRNODE" direction="IN" type="VARCHAR" />
<int-jdbc:parameter name="P_CRDATTIM" expression="#xpath(payload, '//CRDATTIM')" />
<int-jdbc:parameter name="P_RECORDCD" expression="#xpath(payload, '//RECORDCD')" />
<int-jdbc:parameter name="P_CRNODE" expression="#xpath(payload, '//CRNODE')" />
<int-jdbc:returning-resultset name="rowMapper" row-mapper="com.dsths.cs.awd.utils.ResultSetRowMapper"/>
</int-jdbc:stored-proc-outbound-gateway>
<int:service-activator ref="msgHandler" method="buildMessageFromExtSysResponseTestOne" />
<int:header-enricher default-overwrite="true" should-skip-nulls="true" >
<int:header name="${headerNames.originalPayload}" expression="payload" />
</int:header-enricher>
</int:chain>
<int:channel id="test" />
<int:chain input-channel="test" output-channel="PQIssueHistory-XsltTransformInputChannel" >
<int-jdbc:stored-proc-outbound-gateway
id="PQIssueHistory-StoredProcedure-PQHISTORYLOOKUP"
auto-startup="true"
data-source="routingDataSource"
stored-procedure-name="${PQIssueHistory-StoredProcedure-PQHISTORYLOOKUP}"
skip-undeclared-results="true"
ignore-column-meta-data="true"
use-payload-as-parameter-source = "false"
expect-single-result="true" >
<int-jdbc:sql-parameter-definition name="P_CRDATTIM" direction="IN" type="VARCHAR" />
<int-jdbc:sql-parameter-definition name="P_RECORDCD" direction="IN" type="VARCHAR" />
<int-jdbc:sql-parameter-definition name="P_CRNODE" direction="IN" type="VARCHAR" />
<int-jdbc:parameter name="P_CRDATTIM" expression="#xpath(payload, '//CRDATTIM')" />
<int-jdbc:parameter name="P_RECORDCD" expression="#xpath(payload, '//RECORDCD')" />
<int-jdbc:parameter name="P_CRNODE" expression="#xpath(payload, '//CRNODE')" />
<int-jdbc:returning-resultset name="rowMapper" row-mapper="com.dsths.cs.awd.utils.ResultSetRowMapper"/>
</int-jdbc:stored-proc-outbound-gateway>
<int:service-activator ref="msgHandler" method="buildMessageFromExtSysResponseTestTwo" />
</int:chain>
Je pourrais en mesure de frapper les procédures stockées sans aucun problème quand j'execute l'aide du cas de test junit.Mais, cependant, Lorsque je tente de l'exécuter à partir de l'interface graphique(c'est à dire après l'intégration avec l'INTERFACE utilisateur), j'obtiens l'erreur suivante:
org.springframework.integration.MessageHandlingException: error occurred in message handler [org.springframework.integration.handler.MessageHandlerChain#201$child.PQIssueHistory-StoredProcedure-PQHISTORYLOOKUP.handler]
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:79)
at org.springframework.integration.handler.MessageHandlerChain.handleMessageInternal(MessageHandlerChain.java:131)
................................
............................
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)
Caused by: org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; uncategorized SQLException for SQL [{call ZSPPQHISTORYLOOKUP(?, ?, ?)}]; SQL state [000RZ]; error code [930027]; No record found in the VOC file for "BP". ; nested exception is java.sql.SQLException: No record found in the VOC file for "BP".
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1036)
at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1070)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:387)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:350)
at org.springframework.jdbc.core.simple.SimpleJdbcCall.execute(SimpleJdbcCall.java:181)
at org.springframework.integration.jdbc.StoredProcExecutor.executeStoredProcedure(StoredProcExecutor.java:335)
at org.springframework.integration.jdbc.StoredProcExecutor.executeStoredProcedureInternal(StoredProcExecutor.java:325)
at org.springframework.integration.jdbc.StoredProcExecutor.executeStoredProcedure(StoredProcExecutor.java:294)
at org.springframework.integration.jdbc.StoredProcOutboundGateway.handleRequestMessage(StoredProcOutboundGateway.java:56)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:142)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:73)
... 146 more
Caused by: java.sql.SQLException: No record found in the VOC file for "BP".
at com.ibm.u2.jdbc.UniJDBCMsgFactory.createException(UniJDBCMsgFactory.java:101)
at com.ibm.u2.jdbc.UniJDBCExceptionSupport.addException(UniJDBCExceptionSupport.java:87)
at com.ibm.u2.jdbc.UniJDBCProtocolU2Impl.addServerError(UniJDBCProtocolU2Impl.java:2799)
at com.ibm.u2.jdbc.UniJDBCProtocolU2Impl.serverExecuteSql(UniJDBCProtocolU2Impl.java:2130)
at com.ibm.u2.jdbc.UniJDBCProtocolU2Impl.executeSql(UniJDBCProtocolU2Impl.java:2169)
at com.ibm.u2.jdbc.UniJDBCProtocolU2Impl.doExecute(UniJDBCProtocolU2Impl.java:2208)
at com.ibm.u2.jdbc.UniJDBCProtocolU2Impl.executeStatementQuery(UniJDBCProtocolU2Impl.java:606)
at com.ibm.u2.jdbc.UniJDBCPreparedStatementImpl.execute(UniJDBCPreparedStatementImpl.java:407)
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.execute(WrappedPreparedStatement.java:299)
at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1072)
at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1070)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1020)
... 156 more
12:26:25,972 INFO [STDOUT] 12:26:25,971 DEBUG [org.springframework.integration.channel.DirectChannel.preSend] preSend on channel 'cs-exceptionHandlingChannel', message: [Payload=org.springframework.integration.MessageHandlingException: error occurred in message handler [org.springframework.integration.handler.MessageHandlerChain#201$child.PQIssueHistory-StoredProcedure-PQHISTORYLOOKUP.handler]][Headers={timestamp=1401778585971, id=60a1966f-e5ed-8bc0-d9d0-76ee7f6856d8, errorChannel=org.springframework.integration.core.MessagingTemplate$TemporaryReplyChannel@1c8968f, replyChannel=org.springframework.integration.core.MessagingTemplate$TemporaryReplyChannel@1c8968f}]
L'exception ci-dessus, il est clair que le contrôle se passe à l'erreur de canal. Ici, je voulais juste savoir la requête sql qui est à l'origine du problème. J'ai tourné sur "DEBUG". Ce serait génial si quelqu'un peut partager leurs idées sur la façon d'aller plus loin pour trouver de/à réparer le problème.
- Je ne suis pas un Printemps de la personne, mais il semble que votre procédure stockée a jeté l'exception. Aucun enregistrement trouvé dans le fichier COV pour "BP" je voudrais essayer de l'exécuter à la main avec les mêmes données.
- Suite à cela, vous pouvez lancer des messages d'information via raiseerror qui serait normalement ignoré avec un certain nombre de messages de la gamme. Je pense que vous devez changer le proc ou de comprendre comment obtenir du Printemps à l'ignorer ces messages (ou de traiter avec eux d'une certaine façon).
- Lorsque j'exécute la procédure stockée manuellement, il fonctionne très bien.
- Je pense que vous devez utiliser les paramètres exacts au moment où l'erreur a été levée. Quelques informations sur le contexte et les Codes d'Erreur SQLSTate - msdn.microsoft.com/en-us/library/ms714687.aspx Si vous avez le code de la procédure stockée, je regarde dans et trouver ce message, qui va vous montrer ce qui est jeté et vous donner un meilleur point de départ pour travailler. Il n'y a pas suffisamment d'informations pour résoudre le problème.
- SQL état [000RZ]; code d'erreur [930027]. Il est disponible dans la stacktrace.
- Que SQL État est dénué de sens, comme c'est le code d'erreur. Vous allez avoir à regarder dans le code de procédure stockée pour la "Aucun enregistrement trouvé dans le fichier COV pour "BP" message " et de savoir ce que la procédure stockée est en train de faire.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez dire que vous voulez voir le contenu réel de la requête envoyée à la base de données, utilisez un espion pilote; google; il y a un certain nombre d'entre eux. Ou utiliser WireShark ou similaire pour obtenir une trace réseau.
ExpressionEvaluatingSqlParameterSourceFactory.ExpressionEvaluatingSqlParameterSource.doGetValue()
pour vérifier vos expressions xpath sont en cours d'évaluation comme prévu.Ashok, je ne peux que partager des idées, depuis que je connaisse moins springjdbc. Mais je pense que ce qui a causé le problème était une déclaration ajoutés par le conducteur comme getUpdateCount.
Tout d'abord, vous pouvez créer une classe d'étendre JdbcTemplate mais tout copier et modifier les constructeurs de sorte qu'il est identique à JdbcTemplate. Je suppose que vous pouvez voir le code source de JdbcTemplate.
Deuxième, à la ligne 1020, savoir ce qu'il est et comment il a été appelé. L'exception a été traduit de l'SQLException à quelque chose d'autre que vous n'avez pas de nous le montrer. Merci de nous montrer, donc nous savons ce que le haut niveau d'exception. quelle est la version de springjdbc tu utilises?
Troisième, maintenant, vous pouvez modifier votre code pour utiliser votre propre sous-classe au lieu de JdbcTemlate et vous pouvez modifier le code. Commentaire quelque chose comme handlewarnings. Étape par étape, que vous avez des commentaires à partir de la dernière ligne dans un try { } bloc où l'exception a été attrapée et un par un. Ensuite, vous devriez être en mesure de trouver ce que supplémentaires de l'instruction SQL de la pilote a été à l'origine du problème.
Ce n'est qu'une idée. S'il vous plaît laissez-nous savoir ce que votre résultat est et nous pouvons continuer.