Sto creando due server di applicazioni client & springboot che comunicano utilizzando JMS, e tutto funziona bene il rilascio 5.12.1
per ActiveMQ, ma appena posso aggiornare alla versione 5.12.3
, sto ottenendo il seguente errore:SpringBoot + ActiveMQ - Come impostare pacchetti attendibili?
org.springframework.jms.support.converter.MessageConversionException: Could not convert JMS message; nested exception is javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class MyClass! This class is not trusted to be serialized as ObjectMessage payload. Please take a look at http://activemq.apache.org/objectmessage.html for more information on how to configure trusted classes.
Sono andato su the URL che è fornito e ho capito che il mio problema è legato alla nuova sicurezza implementata nella versione 5.12.2
di ActiveMQ, e ho capito che potevo risolverlo definendo i pacchetti attendibili, ma non ne ho idea su dove inserire una tale configurazione nel mio progetto SpringBoot.
L'unico riferimento che sto facendo alla coda JMS nel mio client e nel mio server è la sua impostazione URI in application.properties e abilitazione JMS sulla mia classe "principale" con @EnableJms
, ed ecco la mia configurazione sul broker separato :
@Configuration
@ConfigurationProperties(prefix = "activemq")
public class BrokerConfiguration {
/**
* Defaults to TCP 10000
*/
private String connectorURI = "tcp://0.0.0.0:10000";
private String kahaDBDataDir = "../../data/activemq";
public String getConnectorURI() {
return connectorURI;
}
public void setConnectorURI(String connectorURI) {
this.connectorURI = connectorURI;
}
public String getKahaDBDataDir() {
return kahaDBDataDir;
}
public void setKahaDBDataDir(String kahaDBDataDir) {
this.kahaDBDataDir = kahaDBDataDir;
}
@Bean(initMethod = "start", destroyMethod = "stop")
public BrokerService broker() throws Exception {
KahaDBPersistenceAdapter persistenceAdapter = new KahaDBPersistenceAdapter();
persistenceAdapter.setDirectory(new File(kahaDBDataDir));
final BrokerService broker = new BrokerService();
broker.addConnector(getConnectorURI());
broker.setPersistent(true);
broker.setPersistenceAdapter(persistenceAdapter);
broker.setShutdownHooks(Collections.<Runnable> singletonList(new SpringContextHook()));
broker.setUseJmx(false);
final ManagementContext managementContext = new ManagementContext();
managementContext.setCreateConnector(true);
broker.setManagementContext(managementContext);
return broker;
}
}
Quindi mi piacerebbe sapere dove dovrei specificare i pacchetti attendibili.
Grazie :)
Thanks :) Ho appena avuto a modificare la risposta in quanto 'setTrustedPackage' solo prende un' 'lista come parametro e non un' STRING'. –
AntoineB
Doh! Scusa, certo che lo è. ActiveMQConnectionFactory ha anche un metodo setTrustAllPackages (booleano) in modo da non doverli impostare singolarmente. –