use of org.eclipse.kapua.transport.message.TransportMessage in project kapua by eclipse.
the class MqttFacadeTest method testMqttClientSend.
/**
* Ignoring this test for a while. We should fix the build in the first place and then use embedded ActiveMQ
* broker for tests.
*/
@Ignore
@Test
@SuppressWarnings({ "rawtypes", "unchecked" })
public void testMqttClientSend() throws Exception {
//
// Get facade
KapuaLocator locator = KapuaLocator.getInstance();
TransportClientFactory transportFacadeFactory = locator.getFactory(TransportClientFactory.class);
TransportFacade transportFacade = transportFacadeFactory.getFacade();
assertNotNull("client.clientId", transportFacade.getClientId());
//
// Send
String sendTopic = "$EDC/kapua-sys/" + transportFacade.getClientId() + "/" + MqttClientTest.class.getSimpleName() + "/testTransportFacadeSend";
MqttTopic mqttTopic = new MqttTopic(sendTopic);
MqttPayload mqttPayload = new MqttPayload("testTransportFacadeSendPayload".getBytes());
MqttMessage mqttMessage = new MqttMessage(mqttTopic, new Date(), mqttPayload);
TransportMessage responseMessage = null;
try {
responseMessage = transportFacade.sendSync(mqttMessage, null);
} catch (Exception e) {
fail(e.getMessage());
}
//
// Verify
assertNull("responseMessage", responseMessage);
// Clean
try {
transportFacade.clean();
} catch (Exception e) {
fail(e.getMessage());
}
}
use of org.eclipse.kapua.transport.message.TransportMessage in project kapua by eclipse.
the class KuraDeviceCallImpl method send.
@SuppressWarnings({ "unchecked" })
private KuraResponseMessage send(KuraRequestMessage requestMessage, Long timeout) throws KuraMqttDeviceCallException {
KuraResponseMessage response = null;
TransportFacade transportFacade = null;
try {
//
// Borrow a KapuaClient
transportFacade = borrowClient();
//
// Get Kura to transport translator for the request and vice versa
Translator translatorKuraTransport = getTranslator(KuraRequestMessage.class, transportFacade.getMessageClass());
Translator translatorTransportKura = getTranslator(transportFacade.getMessageClass(), KuraResponseMessage.class);
//
// Make the request
// Add requestId and requesterClientId to both payload and channel if response is expected
// Note: Adding to both payload and channel to let the translator choose what to do base on the transport used.
KuraRequestChannel requestChannel = requestMessage.getChannel();
KuraRequestPayload requestPayload = requestMessage.getPayload();
if (timeout != null) {
// FIXME: create an utilty class to use the same synchronized random instance to avoid duplicates
Random r = new Random();
String requestId = String.valueOf(r.nextLong());
requestChannel.setRequestId(requestId);
requestChannel.setRequesterClientId(transportFacade.getClientId());
requestPayload.setRequestId(requestId);
requestPayload.setRequesterClientId(transportFacade.getClientId());
}
// Do send
try {
// Set current timestamp
requestMessage.setTimestamp(new Date());
// Send
TransportMessage transportResponseMessage = transportFacade.sendSync((TransportMessage) translatorKuraTransport.translate(requestMessage), timeout);
// Translate response
response = (KuraResponseMessage) translatorTransportKura.translate(transportResponseMessage);
} catch (KapuaException e) {
throw new KuraMqttDeviceCallException(KuraMqttDeviceCallErrorCodes.CLIENT_SEND_ERROR, e, (Object[]) null);
}
} catch (KapuaException ke) {
throw new KuraMqttDeviceCallException(KuraMqttDeviceCallErrorCodes.CALL_ERROR, ke, (Object[]) null);
} finally {
if (transportFacade != null) {
transportFacade.clean();
}
}
return response;
}
Aggregations