Код: Выделить всё
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XMPPService': Invocation of init method failed
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:222)
(...)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:784)
... 71 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at org.hibernate.internal.AbstractSharedSessionContract.resultClassChecking(AbstractSharedSessionContract.java:848)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:835)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319)
at jdk.proxy12/jdk.proxy12.$Proxy542.createQuery(Unknown Source)
at de.e_nexus.web.rm.base.DatabaseConfig.getDynamicThisConfigs(DatabaseConfig.java:58)
at de.e_nexus.web.rm.base.DatabaseConfig.getXMPPDomain(DatabaseConfig.java:102)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)
(...)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:219)
... 83 more
Код: Выделить всё
private Set getDynamicThisConfigs(final Set addresses) {
List resultList = entityManager
.createQuery("FROM " + GlobalConfig.class.getCanonicalName(), GlobalConfig.class).getResultList();
Set configs = new LinkedHashSet();
for (GlobalConfig globalConfiguration : resultList) {
String domainName = globalConfiguration.getDomain().getDomainName();
for (InetAddress inetAddress : addresses) {
if (inetAddress.getHostAddress().equals(domainName)) {
LOG.fine("Found matching configuration entry for " + domainName + "!");
configs.add(globalConfiguration);
}
}
}
return configs;
}
Код: Выделить всё
@Override
@Transactional
public String getXMPPDomain(final String fallback) {
for (GlobalConfig globalConfig : getDynamicThisConfigs(findAddresses())) {
String xmppServerDomain = globalConfig.getXMPPServerDomain();
if (xmppServerDomain != null) {
return xmppServerDomain;
}
}
return fallback;
}
Код: Выделить всё
org.hibernate:hibernate-core-jakarta:5.5.0.Final
spring-webmvc:6.1.9
Вот полный класс XMPPService:
Код: Выделить всё
package de.e_nexus.web.rm.im.xmpp;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.vysper.mina.S2SEndpoint;
import org.apache.vysper.mina.TCPEndpoint;
import org.apache.vysper.storage.StorageProviderRegistry;
import org.apache.vysper.xmpp.addressing.EntityImpl;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.MUCModule;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
import org.apache.vysper.xmpp.modules.extension.xep0054_vcardtemp.VcardTempModule;
import org.apache.vysper.xmpp.modules.extension.xep0092_software_version.SoftwareVersionModule;
import org.apache.vysper.xmpp.modules.extension.xep0119_xmppping.XmppPingModule;
import org.apache.vysper.xmpp.server.XMPPServer;
import de.e_nexus.web.rm.base.Config;
import de.e_nexus.web.rm.im.xmpp.ServerSSLCertificateService.UnlockableCertificate;
import de.e_nexus.web.rm.im.xmpp.conv.ConversationModul;
@Named
public class XMPPService {
private static final Logger[] REDUCE_LOGS = {
Logger.getLogger(org.apache.vysper.mina.MinaBackedSessionContext.class.getCanonicalName()),
Logger.getLogger("stanza.server"), Logger.getLogger("stanza.client"),
Logger.getLogger(org.apache.vysper.mina.XmppIoHandlerAdapter.class.getCanonicalName()),
Logger.getLogger(org.apache.vysper.xmpp.server.s2s.DefaultXMPPServerConnector.class.getCanonicalName()),
Logger.getLogger(org.apache.vysper.mina.XmppIoHandlerAdapter.class.getCanonicalName()) };
private static final String TRUSTSTORE_PROP = "javax.net.ssl.trustStore";
/**
* The logger for this class.
*/
private static final Logger LOG = Logger.getLogger(XMPPService.class.getCanonicalName());
@Inject
public final VcardTempModule vcard = null;
@Inject
public final StorageProviderRegistry am = null;
@Inject
private final ServerNameService sns = null;
@Inject
private final ServerSSLCertificateService certService = null;
@Inject
private final ConversationModul cmod = null;
@Inject
private final Config dc = null;
private XMPPServer server;
@PostConstruct
public void init() throws Exception {
for (Logger log : REDUCE_LOGS) {
log.setLevel(Level.WARNING);
}
String filename = System.getProperty(TRUSTSTORE_PROP);
String pass = System.getProperty("javax.net.ssl.keyStorePassword");
String serverName = dc.getXMPPDomain(sns.getXMPPServerName());
TCPEndpoint clientToServer = new TCPEndpoint();
S2SEndpoint serverToServer = new S2SEndpoint();
Conference conference = new Conference("www");
conference.createRoom(EntityImpl.parseUnchecked("public@" + serverName), "public", RoomType.Public);
MUCModule multiUserChat = new MUCModule("www", conference);
if (filename != null) {
LOG.fine("Certificate file specified: " + filename);
File certificate = new File(filename);
if (certificate.exists()) {
LOG.info(
"Truststore for PKI-Certificates has been set in system-properties (" + TRUSTSTORE_PROP + ").");
LOG.finer("Password for truststore is: '" + pass + "'!");
server = new XMPPServer(serverName);
server.addEndpoint(clientToServer);
server.addEndpoint(serverToServer);
server.setStorageProviderRegistry(am);
server.setTLSCertificateInfo(certificate, pass);
server.start();
server.addModule(vcard);
server.addModule(new SoftwareVersionModule());
server.addModule(new XmppPingModule());
server.addModule(cmod);
server.addModule(multiUserChat);
} else {
LOG.severe(
"Can not start XMPP because certificate-file is missing! Set the logger to level FINE to get informations about what filename has been tried to open!");
}
} else {
LOG.info("Truststore not set in system-properties, load default truststore.");
UnlockableCertificate cert = certService.findKS(serverName);
if (cert != null) {
LOG.info("Found certificate for " + serverName + " in organization: '" + cert.getOrgName() + "'!");
server = new XMPPServer(serverName);
server.addEndpoint(clientToServer);
server.addEndpoint(serverToServer);
server.setStorageProviderRegistry(am);
server.setTLSCertificateInfo(new ByteArrayInputStream(cert.getJksData()), cert.getPlaintextPassword());
server.start();
server.addModule(vcard);
server.addModule(new SoftwareVersionModule());
server.addModule(new XmppPingModule());
server.addModule(cmod);
server.addModule(multiUserChat);
} else {
LOG.warning("Deactivate xmpp/jabber because no certificate has been found for the servername '"
+ serverName
+ "'! Specify 'javax.net.ssl.trustStore' and 'javax.net.ssl.keyStorePassword' manually either as CATALINA_OPTS/JAVA_OPTS or in conf/catalina.properties.");
}
}
}
public XMPPServer getServer() {
return server;
}
@PreDestroy
public void shutdown() {
if (server != null) {
XMPPServer d = server;
server = null;
d.stop();
}
}
}

У Query-Plan нет переводчиков.
РЕШЕНО
Код: Выделить всё
getCanonicalName()Подробнее здесь: https://stackoverflow.com/questions/786 ... of-java-21
Мобильная версия