Je tente de tester pub/sub à partir d'un courtier externe (AWs IoT); début du projet d'exemple camel-exemple-spring-boot et ajout de thecamel-mqtt-starter. Tout semble fonctionner correctement jusqu'à ce que j'essaie de définir les routes mqtt. J'ai des problèmes avec la configuration du paramètre url SSLContext:Camel MQTT Options de configuration Paramètre d'URL de route DSL avec valeur de bean ne fonctionnant pas
@Configuration
public class AppConfig {
@Bean(name="awsiotsslcontext")
SSLContext awsiotsslcontext(){
SSLContext sslContext = null;
try{
ClassLoader cl = this.getClass().getClassLoader();
InputStream is = cl.getResourceAsStream("/cert/myApp.cert.pem");
// You could get a resource as a stream instead.
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate caCert = (X509Certificate)cf.generateCertificate(is);
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null); // You don't need the KeyStore instance to come from a file.
ks.setCertificateEntry("caCert", caCert);
tmf.init(ks);
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
} catch (Exception e){
}
return sslContext;
}
}
Et puis dans mon constructeur de route:
@Component
public class SampleCamelRouter extends RouteBuilder {
@Autowired
SSLContext awsiotsslcontext;
@Override
public void configure() throws Exception {
from("timer://foo?repeatCount=0&delay=5000&fixedRate=true&period=10s")
.setBody(simple("TEST MESSAGE"))
.to("mqtt:awsiot?host=ssl://{{aws.iot.host}}:8883&publishTopicName={{aws.iot.sub.topic}}&sslContext=#awsiotsslcontext").log("Sent :"+body().convertToString().toString());
from("mqtt:awsiot?host=ssl://{{aws.iot.host}}:8883&subscribeTopicName={{aws.iot.sub.topic}}&sslContext=#awsiotsslcontext").log("Recieved : "+body().convertToString().toString());
}
}
obtenir l'erreur suivante:
java.lang.IllegalArgumentException: Could pas trouver un setter approprié pour la propriété: sslContext car il n'y a pas de méthode setter avec le même type: java.lang.String ou conversion de type possible: No typ e convertisseur disponible pour convertir le type: java.lang.String au type requis: javax.net.ssl.SSLContext avec la valeur #awsiotsslcontext
Je crois que c'est une simple question de configuration des terminaux, mais a essayé divers les choses et rien ne semble fonctionner. Avoir le # avec le nom du haricot devrait avoir camel pour rechercher dans le registre pour le bean mais ici il le reconnaît comme chaîne? Une solution de contournement ici?