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: