java-forum.org
JBoss Seam
Alter Preis: 39,95 €
Jetzt: 0,00 €

zzgl. Versandkosten

Zurück   java-forum.org > Java - Programmierung > Netzwerkprogrammierung

Netzwerkprogrammierung Fragen zu Client-/Server-Programmierung sowie zu verteilten Anwendungen (RMI, CORBA etc.)

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 06.07.2007, 19:17   #1 (permalink)
mediaOne
Inkognito
 
Beiträge: n/a
Standard Java XML-RPC Server - PHP XML-RPC Client ?

Hallo @ll...

Ich versuche nun seid einigen Tagen schon einen Java XML-RPC Server zu bauen, mittels der Apache XML-RPC Dokumentation. Und dazu einen PHP XML-RPC CLient. Um daten vom Client an den Java Server weiter zu geben, der diese dann verarbeitet und einen Status zurück gibt.

Im Moment habe ich folgenden Java Code zusammen:
Code:
import java.util.*;
import org.apache.xmlrpc.server.*;
import org.apache.xmlrpc.webserver.WebServer;

/**
 *
 * @author mediaOne
 */
public class linuxSIArea {
    linuxSIArea t;

    private final int port = 8200;
    /*private final String propertyFile = "server.properties";*/

    public static void main(String args[]) throws ClassNotFoundException {
        System.out.println("Section: main ");
        try {
            linuxSIArea t = new linuxSIArea();
        } catch (java.io.IOException e) {
            System.out.println("Caught IOException\n");
            e.printStackTrace();
        } catch (org.apache.xmlrpc.XmlRpcException e) {
            System.out.println("Caught IOException\n");
            e.printStackTrace();
        }
    }
    public linuxSIArea() throws java.io.IOException, org.apache.xmlrpc.XmlRpcException, ClassNotFoundException {
        PropertyHandlerMapping mapping = new PropertyHandlerMapping();
        ClassLoader cl = Thread.currentThread().getContextClassLoader();
        /*mapping.load(cl, propertyFile);*/
        
        mapping.addHandler("calculate", "linuxSIArea"));
        
        WebServer ws = new WebServer(port);
        XmlRpcServerConfigImpl config = new XmlRpcServerConfigImpl();
        XmlRpcServer server = ws.getXmlRpcServer();
        server.setConfig(config);
        server.setHandlerMapping(mapping);
        System.out.println("test Server wird gestartet...");
        System.out.println("test Server nutzt System Port " + port);
        System.out.println("test Server wartet nun auf anfragen.");
        ws.start();
    }
    
    public String calculate(String n1, String n2){
        int ans = Integer.parseInt(n1)+Integer.parseInt(n2);
        return String.valueOf(ans);
    }

}
So in diesem Server bekomme ich die Fehlermeldung das er die Kasse linuxSIArea nicht finden kann. Also fehler wird verursacht bei mapping.addHandler("calculate", "linuxSIArea")); dort gebe ich ja die Function frei in der Klasse damit der PHP Client Sie ansteuern kann. Wo Liegt da der Fehler ?

So nun benötige ich natürlich noch den PHP Client .
Kann mir einer mal zeigen bzw ein beispiel erstellen um diesen zu bauen ?
Alle beispiele die ich nun als PHP Client gefunden habe steuern auch einen PHP Server an.
Also folglich steht als Server Verbindung eine PHP Datei am ende. Nur bei Java habe ich ja keine PHP datei sondern nur eine IP mit Port die ich ansteuern kann.

Brauche da dringendst Hilfe!

Danke
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.07.2007, 21:06   #2 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Registriert seit: 24.11.2005
Beiträge: 2.844
Abgegebene Danke: 0
Erhielt 40 Danke für 40 Beiträge
Diese Zeile
Code:
mapping.addHandler("calculate", "linuxSIArea"));
passt doch nicht, oder? Am Ende ist eine Klammer zuviel, und eigentlich erwartet die Methode laut Doku als zweiten Parameter eine Klasse und keinen String.

Versuch mal
Code:
mapping.addHandler("calculate", linuxSIArea.class);
Wenn dann beim Übersetzen noch Fehler auftauchen, poste doch bitte den neuen Code und die Fehlermeldung.


Was das Problem mit dem Client ist, leuchtet mir nicht so recht ein: ein XML-RPC-Client muss doch - egal in welcher Sprache er und der Server implementiert sind - immer eine URL angehen.
Murray ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.07.2007, 21:16   #3 (permalink)
Inkognito
 
Beiträge: n/a
Danke, das hat schon mal geholfen und der Server Startet !

Ja das mit dem Client habe ich schon verstanden, weiß nur nicht wie ich ihn umsetzten soll, kannst mir zu meinem Server vielleicht eine Beispiel erstellen ? Muss nicht groß sein.

Nur damit ich es sehen kann und lernen kann!

Danke
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.07.2007, 21:20   #4 (permalink)
mediaOne
Inkognito
 
Beiträge: n/a
Ach eine frage habe ich noch,
wie man sieht habe ich den code bereich
Code:
/*mapping.load(cl, propertyFile);*/
Ausgeklamert weil dieser fehler Liefert !
Weiß nur nicht wieso.

Fehler Meldung:
Zitat:
symbol : variable propertyFile
location: class linuxsi.linuxSIArea
mapping.load(cl, propertyFile);
1 error
Ich weiß das ich da normal angaben machen muss frage mich nur was oder kann ich das ganz weglassen ?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.07.2007, 22:11   #5 (permalink)
mediaOne
Inkognito
 
Beiträge: n/a
Habe doch eine Fehlermeldung!
Also unter Windows geht der Server ohne probleme.
Unter Linux bekomme ich die fehlermeldung:

Zitat:
CPX104 linuxSIv1 # java -jar linuxSI.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlrpc/XmlRpcException
???
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.07.2007, 22:54   #6 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Registriert seit: 24.11.2005
Beiträge: 2.844
Abgegebene Danke: 0
Erhielt 40 Danke für 40 Beiträge
Zitat: mediaOne
Ach eine frage habe ich noch,
wie man sieht habe ich den code bereich
Code:
/*mapping.load(cl, propertyFile);*/
Ausgeklamert weil dieser fehler Liefert !
Weiß nur nicht wieso.

Fehler Meldung:
Zitat:
symbol : variable propertyFile
location: class linuxsi.linuxSIArea
mapping.load(cl, propertyFile);
1 error
Ich weiß das ich da normal angaben machen muss frage mich nur was oder kann ich das ganz weglassen ?
Das kannst du m.E. weglassen, da du die Handler-Definition ja direkt im Code macht; man kann das alternativ aus einer Datei lesen.
Murray ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.07.2007, 22:55   #7 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Registriert seit: 24.11.2005
Beiträge: 2.844
Abgegebene Danke: 0
Erhielt 40 Danke für 40 Beiträge
Zitat: mediaOne
Habe doch eine Fehlermeldung!
Also unter Windows geht der Server ohne probleme.
Unter Linux bekomme ich die fehlermeldung:

Zitat:
CPX104 linuxSIv1 # java -jar linuxSI.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlrpc/XmlRpcException
???
Offensichtlich ein Classpath-Problem. Sind die Apache-Klassen mit in deinem Jar enthalten? Wir sieht das Manifest aus?
Murray ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.07.2007, 01:03   #8 (permalink)
mediaOne
Inkognito
 
Beiträge: n/a
Hallo...

So nun habe ich es hin bekommen...
Bis auf das Problem das ich nun immer die Fehler Meldung bekomme wenn ich mit dem PHP Client auf den Server zugreife!

Zitat:
CPX104 linuxSIv1 # java -jar linuxSI.jar
Jul 7, 2007 1:00:01 AM org.apache.xmlrpc.server.XmlRpcStreamServer execute
SEVERE: execute: Error while performing request
java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at org.apache.xmlrpc.webserver.WebServer.createServerSocket(WebServer.java:162)
at org.apache.xmlrpc.webserver.WebServer.setupServerSocket(WebServer.java:181)
at org.apache.xmlrpc.webserver.WebServer.start(WebServer.java:216)
at linuxsi.linuxSIArea.<init>(linuxSIArea.java:68)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
at org.apache.xmlrpc.metadata.Util.newInstance(Util.java:212)
at org.apache.xmlrpc.server.RequestProcessorFactoryFactory$RequestSpecificProcessorFactoryFactory.getRequestProcessor(RequestProcessorFactoryFactory.java:107)
at org.apache.xmlrpc.server.RequestProcessorFactoryFactory$RequestSpecificProcessorFactoryFactory$1.getRequestProcessor(RequestProcessorFactoryFactory.java:112)
at org.apache.xmlrpc.server.ReflectiveXmlRpcHandler.getInstance(ReflectiveXmlRpcHandler.java:74)
at org.apache.xmlrpc.server.ReflectiveXmlRpcHandler.execute(ReflectiveXmlRpcHandler.java:86)
at org.apache.xmlrpc.server.XmlRpcServerWorker.execute(XmlRpcServerWorker.java:43)
at org.apache.xmlrpc.server.XmlRpcServer.execute(XmlRpcServer.java:83)
at org.apache.xmlrpc.server.XmlRpcStreamServer.execute(XmlRpcStreamServer.java:182)
at org.apache.xmlrpc.webserver.Connection.run(Connection.java:175)
at org.apache.xmlrpc.util.ThreadPool$MyThread.runTask(ThreadPool.java:71)
at org.apache.xmlrpc.util.ThreadPool$MyThread.run(ThreadPool.java:87)
Mein Aktueller Java Server Code ist !

Code:
/*
 * linuxSIArea.java
 * 
 * Created on 06.07.2007, 13:49:59
 * 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package linuxsi;

import java.util.*;

import org.apache.xmlrpc.server.*;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.webserver.WebServer;

/**
 *
 * @author mstruth
 */
public class linuxSIArea {
    linuxSIArea t;
    private final int port = 8300;
    
    public static void main(String args[])  throws ClassNotFoundException {
    
        try {
            linuxSIArea t = new linuxSIArea();
        } catch (java.io.IOException e) {
            System.out.println("Caught IOException\n");
            e.printStackTrace();
        } catch (org.apache.xmlrpc.XmlRpcException e) {
            System.out.println("Caught IOException\n");
            e.printStackTrace();
        }
        
    }
    
    public linuxSIArea() throws java.io.IOException, org.apache.xmlrpc.XmlRpcException, ClassNotFoundException {
          
        WebServer webServer = new WebServer(port);
          XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
        
          PropertyHandlerMapping phm = new PropertyHandlerMapping();
          /* Load handler definitions from a property file.
           * The property file might look like:
           *   Calculator=org.apache.xmlrpc.demo.Calculator
           *   org.apache.xmlrpc.demo.proxy.Adder=org.apache.xmlrpc.demo.proxy.AdderImpl
           */

          phm.load(Thread.currentThread().getContextClassLoader(), "linuxsi/server.properties");

          /* You may also provide the handler classes directly,
           * like this:
           * phm.addHandler("Calculator",
           *     org.apache.xmlrpc.demo.Calculator.class);
           * phm.addHandler(org.apache.xmlrpc.demo.proxy.Adder.class.getName(),
           *     org.apache.xmlrpc.demo.proxy.AdderImpl.class);
           */
          phm.addHandler("calculate", linuxsi.linuxSIArea.class);
          xmlRpcServer.setHandlerMapping(phm);
        
          XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
          serverConfig.setEnabledForExtensions(true);
          serverConfig.setContentLengthOptional(false);

          webServer.start();
      }
      
    public String calculate(){
        String text = "Server Respons";
        return text;
    }

}
Wo liegt der Fehler?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.07.2007, 08:28   #9 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Registriert seit: 24.11.2005
Beiträge: 2.844
Abgegebene Danke: 0
Erhielt 40 Danke für 40 Beiträge
Das problem besteht darin, dass bei einem Request eine neue Instanz der Handler-Klasse erzeugt wird. Da bei dir Server und Handler die gleiche Klasse sind und bereits im Default-Konstruktor der Web-Service erzeugt wird, wird beim Request ein neuer Web-Service erzeugt, was nicht klappt, weil der Port natürlich schon belegt ist.

Als schnelle Lösung könntest du unterschiedliche Konstruktoren definieren:

Code:
/*
* linuxSIArea.java
*
* Created on 06.07.2007, 13:49:59
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package linuxsi;

import java.util.*;

import org.apache.xmlrpc.server.*;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.webserver.WebServer;

/**
*
* @author mstruth
*/
public class linuxSIArea {
    linuxSIArea t;
   
    public static void main(String args[])  throws ClassNotFoundException {
   
        try {
            linuxSIArea t = new linuxSIArea( 8300);
        } catch (java.io.IOException e) {
            System.out.println("Caught IOException\n");
            e.printStackTrace();
        } catch (org.apache.xmlrpc.XmlRpcException e) {
            System.out.println("Caught IOException\n");
            e.printStackTrace();
        }
       
    }

    /*
       Default-Konstruktor (für Handler-Instanziierung)
    */
    public linuxSIArea() throws java.io.IOException, org.apache.xmlrpc.XmlRpcException, ClassNotFoundException {
    }
   
    /*
        Service-Konstruktor
    */
    public linuxSIArea( int port) throws java.io.IOException, org.apache.xmlrpc.XmlRpcException, ClassNotFoundException {
         
        WebServer webServer = new WebServer(port);
          XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
       
          PropertyHandlerMapping phm = new PropertyHandlerMapping();
          /* Load handler definitions from a property file.
           * The property file might look like:
           *   Calculator=org.apache.xmlrpc.demo.Calculator
           *   org.apache.xmlrpc.demo.proxy.Adder=org.apache.xmlrpc.demo.proxy.AdderImpl
           */

          phm.load(Thread.currentThread().getContextClassLoader(), "linuxsi/server.properties");

          /* You may also provide the handler classes directly,
           * like this:
           * phm.addHandler("Calculator",
           *     org.apache.xmlrpc.demo.Calculator.class);
           * phm.addHandler(org.apache.xmlrpc.demo.proxy.Adder.class.getName(),
           *     org.apache.xmlrpc.demo.proxy.AdderImpl.class);
           */
          phm.addHandler("calculate", linuxsi.linuxSIArea.class);
          xmlRpcServer.setHandlerMapping(phm);
       
          XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
          serverConfig.setEnabledForExtensions(true);
          serverConfig.setContentLengthOptional(false);

          webServer.start();
      }
     
    public String calculate(){
        String text = "Server Respons";
        return text;
    }

}
Alternativ könntest du den Handler auch in einer eigenen Klasse implementieren.
Murray ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Lesezeichen

Latex Maths & Physics Editor ...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Java Client - C Server IceTi Netzwerkprogrammierung 8 14.06.2008 10:58
Java Client - C Server IceTi Netzwerkprogrammierung 0 28.05.2008 17:29
Java Server VM/ Client VM Fragender Allgemeine Java-Themen 7 17.04.2008 12:00
Java Server Client Programmierung Java Basics - Anfänger-Themen 3 28.07.2007 15:54
Java Client-Server-Client Verbindung FabianK Netzwerkprogrammierung 9 03.06.2007 12:14


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:02 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de