Ich erstelle zwei springboot Server & Client-Anwendungen zu kommunizieren JMS verwenden und alles funktioniert prima die Veröffentlichung 5.12.1
für activemq, aber sobald ich auf die 5.12.3
Version aktualisieren, ich die folgende Fehlermeldung erhalten:SpringBoot + ActiveMQ - Wie setzt man vertrauenswürdige Pakete?
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.
Ich ging auf the URL, die bereitgestellt wird, und ich herausgefunden, dass mein Problem mit der neuen Sicherheit in der 5.12.2
Release von ActiveMQ umgesetzt, und ich verstehe, dass ich es durch die Definition der vertrauenswürdigen Pakete beheben konnte, aber ich habe keine Ahnung Wo soll ich eine solche Konfiguration in mein SpringBoot-Projekt legen?
Die einzige Referenz, die ich auf die JMS-Warteschlange in meinem Client und meinem Server mache, ist die Einrichtung ihrer URI in application.properties und die Aktivierung von JMS auf meiner "Haupt" -Klasse mit @EnableJms
, und hier ist meine Konfiguration auf dem separaten Broker :
@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;
}
}
Also ich würde gerne wissen, wo ich die vertrauenswürdigen Pakete angeben soll.
Thanks :)
Thanks :) Ich hatte gerade Ihre Antwort zu bearbeiten, da 'setTrustedPackage' nur eine' Liste 'als Parameter und kein' String' nimmt. –
AntoineB
Doh! Entschuldigung, natürlich tut es das. Die ActiveMQConnectionFactory verfügt auch über eine setTrustAllPackages (boolean) -Methode, sodass Sie sie nicht einzeln festlegen müssen. –