Advertisement
Guest User

Untitled

a guest
Mar 6th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.44 KB | None | 0 0
  1. @SpringBootTest
  2. @SpringJUnitConfig
  3. internal open class ProvisioningTest @Autowired constructor(
  4. private val mqtt: IMqttAsyncClient,
  5. private val mapper: ObjectMapper
  6. ) {
  7.  
  8. @Test
  9. fun provision() {
  10. val entity = Foley(
  11. rfid = UUID.randomUUID().toString(),
  12. )
  13.  
  14. val called = AtomicBoolean(false)
  15. mqtt.subscribe("foley/created", 1) { _, _ -> called.set(true) }
  16.  
  17. mqtt.publish("foley/new", MqttMessage(mapper.writeValueAsBytes(entity)))
  18.  
  19. Awaitility.await().atMost(10, TimeUnit.SECONDS).untilTrue(called)
  20. }
  21. }
  22.  
  23. @Service
  24. open class Provisioning(private val repo: FoleyRepo) {
  25. private val log: Logger = LogManager.getLogger(this::class.java)
  26.  
  27. @SendTo("foley.created")
  28. @RabbitListener(queuesToDeclare = [Queue("foley.new")] )
  29. open fun listen(entity: Foley): Foley {
  30. log.trace("saving: {}", entity)
  31. val save = repo.save(entity)
  32. log.debug("saved: {}", save)
  33. return save
  34. }
  35.  
  36. }
  37.  
  38. @Bean
  39. open fun client(
  40. @Value("tcp://${mqtt.client.host:localhost}:${mqtt.client.port:1883}") uri: String,
  41. @Value("${mqtt.client.user:#{null}}") user: String?,
  42. @Value("${mqtt.client.pass:#{null}}") pass: CharArray?
  43. ): IMqttAsyncClient {
  44.  
  45. val connOpt = MqttConnectOptions()
  46. user?.let { connOpt.userName = it }
  47. pass?.let { connOpt.password = it }
  48. connOpt.isCleanSession = false
  49. connOpt.isAutomaticReconnect = true
  50. val client = MqttAsyncClient(uri, MqttAsyncClient.generateClientId(), MemoryPersistence())
  51. client.connect(connOpt)
  52. return client
  53. }
  54.  
  55. @Bean
  56. open fun messageConverter(om: ObjectMapper): MessageConverter {
  57. return Jackson2JsonMessageConverter(om)
  58. }
  59.  
  60. @Bean
  61. open fun builder(): Jackson2ObjectMapperBuilderCustomizer {
  62. return Jackson2ObjectMapperBuilderCustomizer {
  63. it.modules(JavaTimeModule(), KotlinModule())
  64. }
  65. }
  66.  
  67. @Bean
  68. open fun foleyNew(): Queue {
  69. return Queue("foley.new")
  70. }
  71.  
  72. @Bean
  73. open fun foleyCreated(): Queue {
  74. return Queue("foley.created")
  75. }
  76.  
  77. @Bean
  78. open fun exchange(): TopicExchange {
  79. return TopicExchange("amq.topic")
  80. }
  81.  
  82. @Bean
  83. open fun binding(): Binding {
  84. return BindingBuilder.bind(foleyNew()).to(exchange()).with("foley.new")
  85. }
  86.  
  87. Caused by: org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener method could not be invoked with the incoming message
  88. Endpoint handler details:
  89. Method [public phg.entity.monitor.Foley phg.event.monitor.Provisioning.save(phg.entity.monitor.Foley)]
  90. Bean [phg.event.monitor.Provisioning@320770d7]
  91. at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:193) ~[spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE]
  92. at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:127) ~[spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE]
  93. at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1547) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE]
  94. at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1473) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE]
  95. at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1461) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE]
  96. at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1456) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE]
  97. at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1405) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE]
  98. ... 6 common frames omitted
  99. Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [[B] to [phg.entity.monitor.Foley] for GenericMessage [payload=byte[262], headers={amqp_receivedDeliveryMode=PERSISTENT, amqp_receivedRoutingKey=foley.new, amqp_receivedExchange=amq.topic, x-mqtt-publish-qos=1, x-mqtt-dup=false, amqp_deliveryTag=1, amqp_consumerQueue=foley.new, amqp_redelivered=false, id=9980af26-8b7d-87b9-dde3-64f0fbfe1fa2, amqp_consumerTag=amq.ctag-vOvIcybV6HMf8fD3kwiC3w, timestamp=1551852622698}]
  100. at org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver.resolveArgument(PayloadArgumentResolver.java:144) ~[spring-messaging-5.1.5.RELEASE.jar:5.1.5.RELEASE]
  101. at org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:117) ~[spring-messaging-5.1.5.RELEASE.jar:5.1.5.RELEASE]
  102. at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:147) ~[spring-messaging-5.1.5.RELEASE.jar:5.1.5.RELEASE]
  103. at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:116) ~[spring-messaging-5.1.5.RELEASE.jar:5.1.5.RELEASE]
  104. at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:49) ~[spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE]
  105. at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:190) ~[spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement