tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von SE
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
386
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    bnr bnr ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    21
    Hallo, ich verwende Jax-WS um Webservices zu realisieren. Unter MAC funktioniert die Applikation ohne Probleme (Jar). Unter Windows und Linux hingegen nicht. Hier erhalte ich folgende Meldung.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    .....
    Exception in thread "Thread-2" com.sun.xml.internal.ws.server.ServerRtException: Server Runtime Error: java.net.BindException: Address already in use: bind
            at com.sun.xml.internal.ws.transport.http.server.ServerMgr.createContext(Unknown Source)
            at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(Unknown Source)
            at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(Unknown Source)
            at com.soft2tec.stanandoli.oli.init.WebService.startWebService(WebService.java:150)
            at com.soft2tec.stanandoli.oli.init.WebService.run(WebService.java:163)
            at java.lang.Thread.run(Unknown Source)
    Caused by: java.net.BindException: Address already in use: bind
            at sun.nio.ch.Net.bind(Native Method)
            at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
            at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
            at sun.net.httpserver.ServerImpl.<init>(Unknown Source)
            at sun.net.httpserver.HttpServerImpl.<init>(Unknown Source)
            at sun.net.httpserver.DefaultHttpServerProvider.createHttpServer(Unknown Source)
            at com.sun.net.httpserver.HttpServer.create(Unknown Source)
            ... 6 more

    Die Meldung kann aber nicht sein, da der angegebene Port nicht verwendet wird. Es ist auch egal, welchen Port ich angebe. Die Meldung bleibt immer gleich.

    Hier ein paar Codeschnipsel.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    ....
     
        private static Map<String, Endpoint> endpoints = new HashMap<String, Endpoint>();
     
        private Map<String, Object> serviceImp = new HashMap<String, Object>();
    ....
        public WebService(String host, int port, int backlog) {
            // Create new Endpoints
            this.host = host;
            this.port = port;
            this.backlog = backlog;
            serviceImp.put("ressourcename", new RessourcenNameImpl());
            ...
            serviceImp.put("applicationversion", new ApplicationVersionImpl());
     
            for (String ressource : serviceImp.keySet()) {
                Endpoint endpoint = Endpoint.create(serviceImp.get(ressource));
                endpoints.put(ressource, endpoint);
            }
    .....
     
    public void startWebService() throws Exception {
            logger.info("Starting Webservice on  " + host + " port " + port);
            server = HttpServer.create(new InetSocketAddress(port), backlog);
            // httpThreadPool = Executors.newFixedThreadPool(0);
            // server.setExecutor(httpThreadPool);
            logger.info("Publish endpoints");
     
            // Publish now all endpoints
            for (String ressource : serviceImp.keySet()) {
                Endpoint endpoint = endpoints.get(ressource);
                endpoint.publish("http://" + host + ":" + port + "/abc/"
                        + ressource);
            }
     
            server.start();
        }

    Die Zeile 150 sieht wie folgt aus
    endpoint.publish("http://" + host + ":" + port + "/abc/"
    Ich stehe auf dem Schlauch und finde im Internet keine andere Erklärung. Hat wer eine Idee!
     

  2. #2
    SE Tutorials.de Gastzugang
    Unter Linux könnte es bei Ports unt 1023 zu dieser Meldung kommen da du dafür ROOT-Rechte brauchst.
    Unter Windows könnte dir eine FireWall dazwischen funken.

    Java hat leider keine gesonderten Meldungen für solche Probleme. Wenn ein Port nicht belegt werden konnte , aus welchen Gründen auch immer , gibt es leider nur diese eine Exception.

    Prüfe also unter Linux und Windows mal eventuell vorhandene FireWall-Einstellungen und versuche es mit einem Port oberhalb von 1024.
     

  3. #3
    Avatar von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.394
    Hi,

    unter Linux könnte es daran liegen, dass ein nicht priviligierter Benutzer keine Ports unter 1024 (?) binden darf. Hier musst du das Programm (bzw. den bind) als root ausführen.

    Welchen Port willst du denn benututzen?

    Ob dieser wirklich frei ist, kannst du normalerweise über ein "telnet <ip> <port>" schnell rausfinden. Falls hier die Gegenseite antwortet, ist der Port in Benutzung.

    Was ich mir noch vorstellen könne: Bei dem Bind gibt du ihm einen Hostnamen und den Port mit. Kann der Hostname via DNS auch aufgelöst werden? (Unter Windows in der cmd: nslookup <hostname>)

    @Spike: Die Firewall verhindert soweit ich es weiß nicht, dass ein Port belegt wird, sondern nur, dass dieser von aussen erreichbar ist. Das binden sollte also nicht an einer Firewall scheitern.

    Gruß
    BK
     
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"

  4. #4
    bnr bnr ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    21
    Allgemein wollen wir 8080 verwenden. Wir haben aber auch schon 8090, 8091, 1212 usw Probiert. Alle gehen unter Windows XP, Windows 7 und Linux nicht. Es ist keine Firewall installiert! Ich habe jetzt unter Windows XP mal Java 7 installiert. Problem besteht immer noch!
     

  5. #5
    SE Tutorials.de Gastzugang
    @Bratkartoffel
    Oh doch ... z.B. die Avira FireWall ...
    Wenn ich dort Java den "Zugang" verweigere bekomme ich auch *seltsamer weise* genau diesen Error : ADDRESS ALREADY IN USE ...
    Von daher war meine Frage schon begründet da ich ja selbst damit Erfahrungen habe =D.

    @bnr
    Sicher das es keine FireWall gibt ? Auch schon mal in der Systemsteuerung nach der WindowsFireWall gesucht ? Ist gerne ein beliebtes Problem.
    Bratkartoffel bedankt sich. 

  6. #6
    bnr bnr ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    21
    Die Windows Firewall ist bei mir immer aus, da ich das Ding nicht mag. Es ist auch kein AV oder andere Firewall installiert. Dieses Problem habe ich mit Windows XP (VM-Ware), Windows 7 bei meinem Kollegen, die Linux-Kiste von meinem Teamleiter und der Linux Server wo unser Jenkins läuft. Daher kann es nicht am Rechner liegen! Im Code sehe ich aber auch kein Fehler und unter Mac geht ja alles!
    Geändert von bnr (27.10.11 um 16:29 Uhr)
     

  7. #7
    SE Tutorials.de Gastzugang
    Ich kenne mich mit diesem Framework nicht aus ... daher weis ich nicht ob es daran liegt das du eine URL übergibst *was mir eigentlich schon beim ersten Mal lesen aufgefallen ist*.
    Vielleicht solltest du dich mal in einem Forum zu diesem Framework melden ... die dürften da mehr Ahnung haben.
     

  8. #8
    bnr bnr ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    21
    Ha, Problem gefunden. Jax-Ws braucht kein servlet, EJB container usw. Einfach Endpoints publishen und gut ist. Somit benötigt man auch kein HttpServer. Um aber mehr Kontrolle zu bekommen, kann man einen eigenen HttpServer verwenden, was ich ja wollte. Aber, wenn man einen eigenen HttpServer verwenden möchte, dann muss der HttpServer erstellt und gestartet werden bevor man die Endpoints erstellt und publiziert. Angewendet auf mein Beispiel müsste dann dies so aussehen

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    ....
     
        private static Map<String, Endpoint> endpoints = new HashMap<String, Endpoint>();
     
        private Map<String, Object> serviceImp = new HashMap<String, Object>();
    ....
        public WebService(String host, int port, int backlog) {
            // Create new Endpoints
            this.host = host;
            this.port = port;
     
            logger.info("Starting Webservice on  " + host + " port " + port);
            server = HttpServer.create(new InetSocketAddress(port), backlog);
            server.start();
            
            serviceImp.put("ressourcename", new RessourcenNameImpl());
            ...
            serviceImp.put("applicationversion", new ApplicationVersionImpl());
     
            for (String ressource : serviceImp.keySet()) {
                Endpoint endpoint = Endpoint.create(serviceImp.get(ressource));
                endpoints.put(ressource, endpoint);
            }
    .....
     
    public void publishEndPoints() throws Exception {
            logger.info("Publish endpoints");
     
            // Publish now all endpoints
            for (String ressource : serviceImp.keySet()) {
                Endpoint endpoint = endpoints.get(ressource);
                endpoint.publish("http://" + host + ":" + port + "/abc/"
                        + ressource);
            }
        }
     

Ähnliche Themen

  1. bind() address already in use
    Von extexo im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 20.08.09, 21:00
  2. Dateien per HTTP von Server suchen
    Von Knoppers im Forum HTML & XHTML
    Antworten: 0
    Letzter Beitrag: 13.01.08, 12:32
  3. Http-Server in C/C++ method POST
    Von RanCpp im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 26.07.07, 19:56
  4. Antworten: 8
    Letzter Beitrag: 09.02.06, 14:14
  5. Externer HTTP Server
    Von andreassin im Forum PHP
    Antworten: 9
    Letzter Beitrag: 24.08.05, 11:24