spring integration: service de l'activateur exige-réponse=“false” utilisation
Pourquoi reçois-je des la ci-dessous exception, même après que je l'ai spécifié requires-reply="false"
Exception
org.springframework.de l'intégration.de soutien.canal.ChannelResolutionException: pas de sortie-canal ou replyChannel en-tête disponible
Config
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-2.1.xsd">
<int:channel id="inChannel">
</int:channel>
<bean id="upperService" class="sipackage.service.UppercaseService"></bean>
<int:service-activator requires-reply="false" input-channel="inChannel" ref="upperService" method="toUpper"></int:service-activator>
</beans>
JUnit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/META-INF/spring/integration/sample.xml"})
public class ChannelTest {
@Autowired MessageChannel inChannel;
@Test
public void test() {
boolean sendOutcome=inChannel.send(MessageBuilder.withPayload("Hello, there 1!").build());
assertTrue(sendOutcome);
sendOutcome=inChannel.send(MessageBuilder.withPayload("Hello, there 2!").build());
assertTrue(sendOutcome);
}
}
Service
public class UppercaseService {
public String toUpper(String msg)
{
return msg.toUpperCase();
}
}
tu veux dire que le client n'est pas intéressé par la valeur retournée de l'aval de service? utilisation de la sortie-channel="nullChannel";-la réponse doit être pour les méthodes retournant vide ou null autant que je sache
Je vous remercie, mais je suis conscient du fait que les deux solutions que vous avez proposées. J'ai pensé qu'il faut répondre drapeau était censé ignorer la valeur retournée. Si non, que peut-être le but de ce drapeau?
il faut répondre est false par défaut. définir la nécessite de réponse de l'attribut de composant en aval à 'true' pour assurer une réponse rapide, produit par le lancement d'une Exception en tant que bientôt en tant que composant en aval retourne null en interne.
Je vous remercie, mais je suis conscient du fait que les deux solutions que vous avez proposées. J'ai pensé qu'il faut répondre drapeau était censé ignorer la valeur retournée. Si non, que peut-être le but de ce drapeau?
il faut répondre est false par défaut. définir la nécessite de réponse de l'attribut de composant en aval à 'true' pour assurer une réponse rapide, produit par le lancement d'une Exception en tant que bientôt en tant que composant en aval retourne null en interne.
OriginalL'auteur Aravind R. Yarram | 2013-01-25
Vous devez vous connecter pour publier un commentaire.
Comme par "La Configuration De Service Activator":
Ce qu'il ne mentionne pas c'est que le comportement de base de la réponse-la production de gestionnaire de message, c'est que si il ne trouve pas de quoi que ce soit avec ces deux contrôles, il lève une exception, comme on peut le voir dans le sendReplyMessage() la méthode de la AbstractReplyProducingMessageHandler, une classe de base partagé par beaucoup de choses. Donc si vous avez un non-nulle service méthode, vous devez définir une sortie de canal ou une replyChannel en-tête de vos messages.
Une option proposé par le SI les gars est de mettre une tête de enricher en face de votre service activator qui va définir la replyChannel en-tête de "nullChannel". Parce que les en-têtes ne sont pas écrasées par défaut, toutes les replyChannel va fonctionner comme prévu, et tout le reste sera exportée vers la nullChannel.
Comme pour les exige de réponse de l'attribut, c'est pour la manipulation d'un tout autre problème où vous disposez d'un composant qui peut produire des
null
au lieu d'un message valide. Cet indicateur permet d'indiquer qu'unnull
réponse devrait être l'exception. Vous trouverez une discussion de cette question dans la note sur "Passerelle De Messagerie D'Erreur De Manipulation" et dans "Passerelle comportement lorsque aucune réponse n'arrive".OriginalL'auteur Ryan Stewart
requires-reply="false"
signifie "c'est OK qu'une méthode qui n'est pas défini pour revenirvoid
retournenull
".SI la méthode retourne une réponse, nous avons besoin d'un endroit où l'envoyer. Comme
guido
dit - si vous souhaitez ignorer le résultat, réglez leoutput-channel
à nullChannel.OriginalL'auteur Gary Russell
Attribut : nécessite une réponse
De préciser si le service méthode doit retourner une valeur non null.
Cette valeur à "false" par défaut, mais si la valeur 'true', un
ReplyRequiredException sera levée lorsque le sous-jacent
méthode de service (ou l'expression) renvoie une valeur null.
OriginalL'auteur Flavio Troia