Hallo zusammen,
ich bin gerade an einer JMS Abgabe am arbeiten.
Dabei kommt bei mir folgende Fehlermeldung:
Exception in thread "main" java.lang.ClassCastException: org.apache.activemq.command.ActiveMQTextMessage cannot be cast to javax.jms.ObjectMessage
at Server.JMSServer.process(JMSServer.java:224)
at Server.JMSServer.main(JMSServer.java:45)
Wenn ich case 7 /8 ausführe läuft es für sich genommen schon, allerdings dann bei der Ausführung von case 5 , kommt unmittelbar danach die Fehlermeldung.
Habt ihr eine Idee was ich ändern muss?
Vielen Dank schonmal im voraus und sorry für den hässlichen Code, ich bin noch Anfänger 😉
Hier die Klassen:
Client:
Server:
ich bin gerade an einer JMS Abgabe am arbeiten.
Dabei kommt bei mir folgende Fehlermeldung:
Exception in thread "main" java.lang.ClassCastException: org.apache.activemq.command.ActiveMQTextMessage cannot be cast to javax.jms.ObjectMessage
at Server.JMSServer.process(JMSServer.java:224)
at Server.JMSServer.main(JMSServer.java:45)
Wenn ich case 7 /8 ausführe läuft es für sich genommen schon, allerdings dann bei der Ausführung von case 5 , kommt unmittelbar danach die Fehlermeldung.
Habt ihr eine Idee was ich ändern muss?
Vielen Dank schonmal im voraus und sorry für den hässlichen Code, ich bin noch Anfänger 😉
Hier die Klassen:
Client:
Java:
package Client;
import functionality.Bestellposition;
import functionality.Bestellungen;
import interfaces.IBestellposition;
import interfaces.IBestellungen;
import interfaces.IKunde;
import java.io.IOException;
import java.io.Serializable;
import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import Server.BestellungenHandler;
public class JMSClient implements Serializable {
private static final long serialVersionUID = 1L;
private static final String DESTINATION = "queue/myQueue1";
private static final String USER = "guest";
private static final String PASSWORD = "guest";
private QueueConnectionFactory factory;
private Queue queue;
QueueConnection connection;
QueueSession session;
QueueSender sender;
QueueReceiver receiver;
Queue tempQueue;
String gewaehlterMenuePunkt;
IKunde kunde=null;
public JMSClient() throws NamingException, JMSException {
Context ctx = new InitialContext();
factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
queue = (Queue) ctx.lookup(DESTINATION);
}
public static void main(String[] args) throws Exception {
JMSClient client = new JMSClient();
client.process();
}
public void process() throws JMSException, IOException{
try {
System.out.println("Herzlich Willkommen");
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
Benutzeroberflaeche hauptmenue = new Benutzeroberflaeche(befuelleHauptmenue());
hauptmenue.ausgabe();
while ( true )
{
connection = factory.createQueueConnection(USER, PASSWORD);
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
// temporäre Queue für die Antwort erzeugen
tempQueue = session.createTemporaryQueue();
sender = session.createSender(queue);
receiver = session.createReceiver(tempQueue);
connection.start();
Benutzereingabe menue= new Benutzereingabe ("Wählen Sie nun Bitte Ihren Punkt aus: ");
gewaehlterMenuePunkt= menue.getString();
switch (gewaehlterMenuePunkt){
case "1":
Benutzereingabe benutzernameEingabe= new Benutzereingabe ("Bitte geben Sie nun Ihren Benutzernamen ein: ");
String benutzername= benutzernameEingabe.getString();
Benutzereingabe passwortEingabe= new Benutzereingabe ("Bitte geben Sie nun Ihren Passwort ein: ");
String passwort= passwortEingabe.getString();
String login = "1"+","+benutzername+","+passwort;
TextMessage auswahl = session.createTextMessage();
auswahl.setText(login);
auswahl.setJMSReplyTo(tempQueue);
sender.send(auswahl);
ObjectMessage loginKunde = (ObjectMessage) receiver.receive();
kunde= (IKunde) loginKunde.getObject();
System.out.println("Sie sind jetzt eingeloggt unter dem Benutzernamen: "+kunde.getBenutzernamen());
break;
case "2":
String logoutFunc="2";
TextMessage logout =session.createTextMessage();
logout.setText(logoutFunc);
logout.setJMSReplyTo(tempQueue);
sender.send(logout);
ObjectMessage logoutKunde = session.createObjectMessage();
logoutKunde.setObject((Serializable) kunde);
logoutKunde.setJMSReplyTo(tempQueue);
sender.send(logoutKunde);
TextMessage logoutAccept = (TextMessage) receiver.receive();
System.out.println(logoutAccept.getText());
break;
case "3":
String kundenlisteFunc="3";
TextMessage kundenListeCall =session.createTextMessage();
kundenListeCall.setText(kundenlisteFunc);
kundenListeCall.setJMSReplyTo(tempQueue);
sender.send(kundenListeCall);
TextMessage eingeloggteKunden = (TextMessage) receiver.receive();
System.out.println(eingeloggteKunden.getText());
break;
case "4" :
String kundenInformationFunc="4";
TextMessage kundenInfoCall=session.createTextMessage();
kundenInfoCall.setText(kundenInformationFunc);
kundenInfoCall.setJMSReplyTo(tempQueue);
sender.send(kundenInfoCall);
TextMessage kundeninfo = (TextMessage) receiver.receive();
System.out.println(kundeninfo.getText());
break;
case "5" :
String artikelFunc="5";
TextMessage artikellisteCall=session.createTextMessage();
artikellisteCall.setText(artikelFunc);
artikellisteCall.setJMSReplyTo(tempQueue);
sender.send(artikellisteCall);
TextMessage artikelliste = (TextMessage) receiver.receive();
System.out.println(artikelliste.getText());
break;
case "6" :
String bestellungenFunc="6";
TextMessage bestellungenCall=session.createTextMessage();
bestellungenCall.setText(bestellungenFunc);
bestellungenCall.setJMSReplyTo(tempQueue);
sender.send(bestellungenCall);
TextMessage bestellungen = (TextMessage) receiver.receive();
System.out.println(bestellungen.getText());
break;
case "7" :
String stornoFunc="7";
TextMessage stornoCall=session.createTextMessage();
stornoCall.setText(stornoFunc);
stornoCall.setJMSReplyTo(tempQueue);
sender.send(stornoCall);
TextMessage bestelllisteStorno = (TextMessage) receiver.receive();
System.out.println(bestelllisteStorno.getText());
Benutzereingabe stornoId= new Benutzereingabe ("Bitte geben Sie nun die Id ein, welche Sie stornieren möchten: ");
String stornoIdString= stornoId.getString();
/*
TextMessage stornoIdSend=session.createTextMessage();
stornoIdSend.setText(stornoIdString);
stornoIdSend.setJMSReplyTo(tempQueue);
sender.send(stornoIdSend);
TextMessage stornoConfirm = (TextMessage) receiver.receive();
System.out.println(stornoConfirm.getText());
*/
break;
case "8":
String neworderFunc="8";
TextMessage newOrderCall=session.createTextMessage();
newOrderCall.setText(neworderFunc);
newOrderCall.setJMSReplyTo(tempQueue);
sender.send(newOrderCall);
TextMessage artikelBestellung = (TextMessage) receiver.receive();
System.out.println(artikelBestellung.getText());
String zusatzBestellposition="J";
IBestellungen neueBestellung= new Bestellungen(kunde);
BestellungenHandler bestellunghandler=new BestellungenHandler();
while(zusatzBestellposition.equalsIgnoreCase("J")){
String artikelnummer=new Benutzereingabe("Bitte geben Sie nun die Artikelnummer ein:").getString();
String anzahleingabe =new Benutzereingabe("Bitte geben Sie nun die Anzahl ein:").getString();
IBestellposition neueBestellposition = new Bestellposition(bestellunghandler.getArticleById(Integer.parseInt(artikelnummer)),Integer.parseInt(anzahleingabe));
neueBestellung.addBestellposition(neueBestellposition);
zusatzBestellposition = new Benutzereingabe("Moechten Sie eine weitere Bestellposition hinzufuegen? J/N").getString();;
}
ObjectMessage bestellungSend = session.createObjectMessage();
bestellungSend.setObject((Serializable) neueBestellung);
bestellungSend.setJMSReplyTo(tempQueue);
sender.send(bestellungSend);
TextMessage confirmation = (TextMessage) receiver.receive();
System.out.println(confirmation.getText());
break;
case "9":
System.out.println( "Client ist geschlossen" );
System.exit( 0 );
break;
}
}
}
finally {
sender.close();
receiver.close();
session.close();
connection.close();
}
}
private static String [] befuelleHauptmenue()
{
String [] hauptmenue = new String [9];
hauptmenue [0] = "Login";
hauptmenue [1] = "Logout";
hauptmenue [2] = "Anzeigen eingeloggte Kunden";
hauptmenue [3] = "Anzeigen der Kundendaten";
hauptmenue [4] = "Anzeigen der Artikel die gekauft werden koennen";
hauptmenue [5] = "Anzeige bisheriger Bestellungen";
hauptmenue [6] = "Stornierung von Bestellungen";
hauptmenue [7] = "Erstellen einer neuen Bestellung";
hauptmenue [8] = "Programm beenden";
return hauptmenue;
}
}
Server:
Java:
package Server;
import interfaces.IArticle;
import interfaces.IBestellungen;
import interfaces.IKunde;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.Iterator;
import java.util.List;
import javax.jms.JMSException;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class JMSServer implements Serializable {
private static final String DESTINATION = "queue/myQueue1";
private static final String USER = "guest";
private static final String PASSWORD = "guest";
private QueueConnectionFactory factory;
private Queue queue;
private static final long serialVersionUID = 1L;
IKunde kunde=null;
public JMSServer() throws NamingException, JMSException {
Context ctx = new InitialContext();
factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
queue = (Queue) ctx.lookup(DESTINATION);
}
public static void main(String[] args) throws Exception {
JMSServer server = new JMSServer();
server.process();
}
public void process() throws JMSException, RemoteException {
BestellungenHandler bestellhandler = new BestellungenHandler();
QueueConnection connection = factory.createQueueConnection(USER, PASSWORD);
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueReceiver receiver = session.createReceiver(queue);
connection.start();
System.out.println("EchoServer gestartet ...");
while (true) {
TextMessage request = (TextMessage) receiver.receive();
Queue tempQueue = (Queue) request.getJMSReplyTo();
String benutzerAuswahl = request.getText();
String [] benutzerAuswahlArray =benutzerAuswahl.split(",");
switch (benutzerAuswahlArray[0]){
case "1":
kunde= bestellhandler.loginUser(benutzerAuswahlArray[1],benutzerAuswahlArray[2]);
ObjectMessage response = session.createObjectMessage();
response.setObject((Serializable) kunde);
QueueSender loginSend = session.createSender(tempQueue);
loginSend.send(response);
break;
case "2":
ObjectMessage logoutKunden = (ObjectMessage) receiver.receive();
IKunde logoutUser=(IKunde) logoutKunden.getObject();
bestellhandler.logoutUser(logoutUser);
String logoutText="Kunde erfolgreich ausgeloggt!";
TextMessage logout =session.createTextMessage();
logout.setText(logoutText);
QueueSender logoutSend = session.createSender(tempQueue);
logoutSend.send(logout);
case "3":
String loggedInUsers="Momentan sind keine Kunden eingeloggt";
List <IKunde> kundenListe = bestellhandler.getEingeloggteKunden();
Iterator <IKunde> kundenListeAusgabe =kundenListe.iterator();
if(kundenListeAusgabe.hasNext()){
while ( kundenListeAusgabe.hasNext()) {
IKunde eingeloggtekunde =kundenListeAusgabe.next();
loggedInUsers = "Benutzername: "+eingeloggtekunde.getBenutzernamen()+ " Vorname: "+eingeloggtekunde.getVorname()+" Nachname: "+eingeloggtekunde.getNachname();
}
}
TextMessage liste = session.createTextMessage();
liste.setText(loggedInUsers);
QueueSender loggedInUserSend = session.createSender(tempQueue);
loggedInUserSend.send(liste);
break;
case "4":
String kundeninfo="+++++++++++++++++++++++++++ \n Ihre Kundeninformationen: \n"
+" Benutzername: "+kunde.getBenutzernamen()
+ "\n Vorname: "+kunde.getVorname()
+ "\n Nachname: "+kunde.getNachname()
+ "\n Straße: "+kunde.getStrasse()
+ "\n PLZ: "+kunde.getPlz()
+ "\n Ort: "+kunde.getOrt()
+ "\n Kontonummer: "+kunde.getKontonummer()
+"\n+++++++++++++++++++++++++++";
TextMessage infoausgabe =session.createTextMessage();
infoausgabe.setText(kundeninfo);
QueueSender kundeninfoSend = session.createSender(tempQueue);
kundeninfoSend.send(infoausgabe);
case "5":
String artikel="";
Iterator <IArticle> artikelliste = bestellhandler.getArticles().iterator();
if(artikelliste.hasNext()){
while ( artikelliste.hasNext()) {
IArticle hilfsArtikelObject =artikelliste.next();
artikel +="Artikelnummer:"+hilfsArtikelObject.getArtikelNummer()
+" |Artikelname: "+hilfsArtikelObject.getArtikelBezeichnung()
+" |Artikelbeschreibung: "+hilfsArtikelObject.getArtikelBeschreibung()
+" |Artikelpreis: "+hilfsArtikelObject.getPreis().umrechnung()+"\n";
}
}
else
{
artikel="Momentan können wir leider keine Artikel anbieten...";
}
TextMessage artikelausgabe =session.createTextMessage();
artikelausgabe.setText(artikel);
QueueSender artikelSend = session.createSender(tempQueue);
artikelSend.send(artikelausgabe);
case "6":
String benutzernameEingeloggterKunde = kunde.getBenutzernamen();
String bestellungen="";
Iterator <IBestellungen> bestellliste = bestellhandler.getBestellungen().iterator();
if(bestellliste.hasNext()){
while ( bestellliste.hasNext()) {
IBestellungen bestellung =bestellliste.next();
if(bestellung.getKundederBestellung().getBenutzernamen().equals(benutzernameEingeloggterKunde)){
bestellungen +=
"\n BestellId:"+bestellung.getBestellID()
+"\n Bestelldatum: "+bestellung.getBestelldatum()
+"\n Bestellpositionen: "+bestellung.ausgabe()
+"\n Gesamtpreis: "+bestellung.getBestellungGesamt().umrechnung()
+"\n";
}
}
}
TextMessage bestellausgabe =session.createTextMessage();
bestellausgabe.setText(bestellungen);
QueueSender bestelllisteSend = session.createSender(tempQueue);
bestelllisteSend.send(bestellausgabe);
case "7":
String benutzernameEingeloggterKundeStorno = kunde.getBenutzernamen();
String bestellungenStorno="";
Iterator <IBestellungen> bestelllisteStorno = bestellhandler.getBestellungen().iterator();
if(bestelllisteStorno.hasNext()){
while ( bestelllisteStorno.hasNext()) {
IBestellungen bestellung =bestelllisteStorno.next();
if(bestellung.getKundederBestellung().getBenutzernamen().equals(benutzernameEingeloggterKundeStorno)){
bestellungenStorno +=
"\n BestellId:"+bestellung.getBestellID()
+"\n Bestelldatum: "+bestellung.getBestelldatum()
+"\n Gesamtpreis: "+bestellung.getBestellungGesamt().umrechnung()
+"\n";
}
}
}
TextMessage bestellausgabeStorno =session.createTextMessage();
bestellausgabeStorno.setText(bestellungenStorno);
QueueSender stornobestelllisteSend = session.createSender(tempQueue);
stornobestelllisteSend.send(bestellausgabeStorno);
/*
TextMessage stornoId = (TextMessage) receiver.receive();
String stornoIdString = stornoId.getText();
int stornoIdInt= Integer.parseInt(stornoIdString);
bestellhandler.loescheBestellung(stornoIdInt);
String confirm="Ihre Bestellung wurde erfolgreich storniert!";
TextMessage stornoConfirm =session.createTextMessage();
stornoConfirm.setText(confirm);
QueueSender confirmSend = session.createSender(tempQueue);
confirmSend.send(stornoConfirm);
*/
case "8":
String artikelBestellung="";
Iterator <IArticle> artikellisteBestellung = bestellhandler.getArticles().iterator();
if(artikellisteBestellung.hasNext()){
while ( artikellisteBestellung.hasNext()) {
IArticle hilfsArtikelObject =artikellisteBestellung.next();
artikelBestellung +="Artikelnummer:"+hilfsArtikelObject.getArtikelNummer()
+" |Artikelname: "+hilfsArtikelObject.getArtikelBezeichnung()
+" |Artikelbeschreibung: "+hilfsArtikelObject.getArtikelBeschreibung()
+" |Artikelpreis: "+hilfsArtikelObject.getPreis().umrechnung()+"\n";
}
}
else
{
artikelBestellung="Momentan können wir leider keine Artikel anbieten...";
}
TextMessage artikelausgabeBestellung =session.createTextMessage();
artikelausgabeBestellung.setText(artikelBestellung);
QueueSender artikelBestellungSend = session.createSender(tempQueue);
artikelBestellungSend.send(artikelausgabeBestellung);
ObjectMessage bestellrecieve = (ObjectMessage) receiver.receive();
IBestellungen bestellrecieveObject=(IBestellungen) bestellrecieve.getObject();
bestellhandler.bestellunghinzufuegen(bestellrecieveObject);
String confirmation ="Ihre Bestellung wurde erfolgreich angelegt!";
TextMessage bestellungConfirm =session.createTextMessage();
bestellungConfirm.setText(confirmation);
QueueSender bestellConfirmSender = session.createSender(tempQueue);
bestellConfirmSender.send(bestellungConfirm);
}
}
}
}
Zuletzt bearbeitet: