# Apache Mina Serial: Error



## DavidVolt (10. Dez 2012)

Hallo Leute,

ich versuch mich jetzt schon seit Tagen an einer seriellen Übertragung mit Hilfe von Mina. Leider bekomm ich grad einen Fehler zurück den ich nicht lösen kann.


Ich hab ein kleines Testfile: SerialTest.java
[Java]
package org.apache.mina.timeserver;

import org.apache.mina.transport.serial.*;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.codec.ProtocolCodecFilter;

public class SerialTest extends IoHandlerAdapter {

	@SuppressWarnings("deprecation")
	public static void main(String [] args){

		SerialConnector connector = new SerialConnector();		
		connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(
                new TextLineCodecFactory()));
		connector.setHandler(new SerialTest());
		String comPort = "COM10";
		int bauds = 9600;
		ConnectFuture cf = connector.connect(
			new SerialAddress(comPort, bauds, SerialAddress.DataBits.DATABITS_8,
				SerialAddress.StopBits.BITS_1, SerialAddress.Parity.NONE,
				SerialAddress.FlowControl.NONE));		

        cf.join();		
		String rawcmd = "";
        while (true){
            rawcmd = System.console().readLine().trim();
            if (rawcmd.equals("exit"))
                break;
            else if (rawcmd.equals(""))
                continue;
			/* IoBuffer.setUseDirectBuffer(false); 
			IoBuffer buf = IoBuffer.allocate(1024); */            
			cf.getSession().write(rawcmd + "\r");//cf.getSession().write(rawcmd + "\r\n"); also tested
        }
        //cf.getSession().getCloseFuture().awaitUninterruptibly();
		cf.getSession().close();
		connector.dispose();
	}
	public void sessionClosed(IoSession session) {     
        System.err.println("Total " + session.getReadBytes() + " byte(s)");
    }
	public void messageSent(IoSession session, Object message) {
		System.out.println("message has been sent: " + message);
	}
	public void messageReceived(IoSession session, Object message) {
        System.out.println("message received:[" + message + "]");
    }	
}
[/Java]

als Ausgabe mit dem Fehler bekomm ich:

```
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7
[21:37:27] DEBUG [org.apache.mina.transport.serial.SerialConnector] - Serial port discovered : COM3
[21:37:27] DEBUG [org.apache.mina.transport.serial.SerialConnector] - Serial port discovered : COM10
[21:37:27] DEBUG [org.apache.mina.transport.serial.SerialConnector] - Serial port found : COM10
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.mina.core.session.AbstractIoSession.<init>(Lorg/apache/mina/core/service/IoService;)V
	at org.apache.mina.transport.serial.SerialSessionImpl.<init>(SerialSessionImpl.java:73)
	at org.apache.mina.transport.serial.SerialConnector.connect0(SerialConnector.java:97)
	at org.apache.mina.core.service.AbstractIoConnector.connect(AbstractIoConnector.java:262)
	at org.apache.mina.core.service.AbstractIoConnector.connect(AbstractIoConnector.java:172)
	at org.apache.mina.timeserver.SerialTest.main(SerialTest.java:22)
```

Ich hoffe das mir jemand helfen kann. Vielleicht hab ich ja nur eine kleinigkeit übersehn.

Schön Gruß David


----------



## tröööt (11. Dez 2012)

also wenn man die exception mal auseinander nimmt besagt diese das im konstruktor (also "<init>") von org.apache.mina.transport.serial.SerialSessionImpl versucht wird den konstruktor (wieder "<init>") von org.apache.mina.core.session.AbstractIoSession mit einem parameter des types org.apache.mina.core.service.IoService zu callen .. dieser aber nicht vorhanden ist ...
sowas kann schon mal vorkommen wenn man interface / abstract class und implementierung getrennt von ein ander entwickelt und veröffentlicht ...
es scheint also versions-konflikte innerhalb der verwendeten lib zu geben ...

da du ganz oben über deiner main() DEPRECATED unterdrückst würde ich einfach mal vermuten das du versuchst alte API-funktionen zu nutzen die mitlerweile aus den implementierungen entfernt wurden ... nicht umsonst sollte man DEPRECATED vermeiden ...
du solltest also einfach versuchen deinen code entsprechend so umzuschreiben das du die aktuelle version der API nutzt ... und vor allem noch mal alle abhängigkeiten und libs auf ihre version prüfen ...

das ist eben das problem bei DEPRECATED code : man weist darauf hin das der code nicht mehr verwendet werden sollte (warum auch immer) und das er möglicherweise entfernt wird ...


----------



## DavidVolt (13. Dez 2012)

Danke dir für den Tip:

ich hab das Framework in der letzten Version eingebunden und auch die letzte mina.transport.serial eingesetzt. Jetzt läuft apache Mina über Serial...

Danke


----------

