Java XML-RPC Server - PHP XML-RPC Client ?

Status
Nicht offen für weitere Antworten.
M

mediaOne

Gast
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
 

Murray

Top Contributor
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.
 
G

Guest

Gast
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
 
M

mediaOne

Gast
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:
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 ?
 
M

mediaOne

Gast
Habe doch eine Fehlermeldung!
Also unter Windows geht der Server ohne probleme.
Unter Linux bekomme ich die fehlermeldung:

CPX104 linuxSIv1 # java -jar linuxSI.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlrpc/XmlRpcException

???
 

Murray

Top Contributor
mediaOne hat gesagt.:
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:
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

Top Contributor
mediaOne hat gesagt.:
Habe doch eine Fehlermeldung!
Also unter Windows geht der Server ohne probleme.
Unter Linux bekomme ich die fehlermeldung:

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?
 
M

mediaOne

Gast
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!

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?
 

Murray

Top Contributor
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.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
J HTTP Java Client / Server Internet - Webshare ?! Netzwerkprogrammierung 9
L C# WCF Server und Java Client? Netzwerkprogrammierung 2
N Socket Java server c# client problem Netzwerkprogrammierung 7
M client server in java Netzwerkprogrammierung 4
I Java Client - C Server Netzwerkprogrammierung 8
H Java.nio Server, Java.io Client Netzwerkprogrammierung 3
R Kommunikationsproblem zwischen JAVA-client und C-Server Netzwerkprogrammierung 5
F Java Client-Server-Client Verbindung Netzwerkprogrammierung 9
R Java Applikation als Client ,Servlet als Server: Problem? Netzwerkprogrammierung 3
S Kommunikation Fortran <-> Java auf Client-Server-Archi Netzwerkprogrammierung 2
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
F Server für Java Applikationen Netzwerkprogrammierung 16
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
S Java Chat Server Netzwerkprogrammierung 8
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
M Socket Java Server: NullPointerException Netzwerkprogrammierung 4
J Java Server empfängt php inhalt nicht Netzwerkprogrammierung 1
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
F Socket Java Server mit Android App, Antwort vom Server an App Netzwerkprogrammierung 5
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
G Multiple Clients and one Server --> java.lang.NullPointerException Netzwerkprogrammierung 1
E Java Server übers Internet erreichen Netzwerkprogrammierung 4
C Kostenloser Java-Server? Netzwerkprogrammierung 25
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
P FTP Server mit Java, möglich ? Netzwerkprogrammierung 4
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
F Java SMTP Server Netzwerkprogrammierung 9
S Socket Java Server StreamCorruptedException Netzwerkprogrammierung 7
P Java Programm als Dienst auf Server Netzwerkprogrammierung 11
P Java Web Server Netzwerkprogrammierung 3
D Umwandlung von Java WebStart zu Java Server Pages Netzwerkprogrammierung 6
W Terminal-Server (Windows 2003) und Java Netzwerkprogrammierung 9
E java.net.SocketException: Unexpected end of file from server Netzwerkprogrammierung 2
H Mit Java ein JPG auf einem Server öffnen. Netzwerkprogrammierung 7
A Java-Programm auf einem Server laufen lassen Netzwerkprogrammierung 9
M Java Server mit verschiedenen Kommunikationsmöglichkeiten Netzwerkprogrammierung 6
E Java Server via Swing offline setzen Netzwerkprogrammierung 4
J Server soll Zugriff auf Java Programm ermöglichen Netzwerkprogrammierung 3
D Server Socket läuft nicht -> java.net.SocketException: Netzwerkprogrammierung 4
N eigener Java-Server => PHP einbauen Netzwerkprogrammierung 67
S MySQL, PHP, Perl Support in einem Java HTTP Server? Netzwerkprogrammierung 7
D HTTP Apache-HttpClient/UNAVAILABLE (java 1.4) Netzwerkprogrammierung 18
M JAX-WS unter Java 17 plötzlich nicht mehr möglich Netzwerkprogrammierung 5
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
M HTTP Let's Encrypt und Java Trust-Store Netzwerkprogrammierung 6
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
x46 Java SSLContext erstellen mit SSL-Zertifikat Netzwerkprogrammierung 1
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
R Anfängerbeispiel: Suche Java-Anwendung die http-Anfragen in Tomcat liest Netzwerkprogrammierung 8
V Browsergame mit Java(WebSocketServer) als Backend? Netzwerkprogrammierung 5
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
S Fragen zu Java Webservice mit Axis2 Netzwerkprogrammierung 0
M Mit Java Mail Mails an Webmailer schicken Netzwerkprogrammierung 1
mor16Euro HTTP Php website mit Java aktualisiern Netzwerkprogrammierung 6
T HTTP JAVA Browser Konsolenanfrage(JavaScript) Netzwerkprogrammierung 7
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
L Remote Desktop per Java steuern Netzwerkprogrammierung 4
J Webserver mit Java schreiben? Netzwerkprogrammierung 4
D JAVA RMI Netzwerkprogrammierung 1
K HTTP Mit Java HTML Codeauslesen um damit zu arbeiten Netzwerkprogrammierung 7
V Kann man mit Hilfe eines Java-Programms den Zugriff auf bestimmte Internetseiten verhinden? Netzwerkprogrammierung 3
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Bestimmter URL/Certificate per Java immer vertrauen (Trustmanager/HostnameVerifier) Netzwerkprogrammierung 1
T VPN-Verbindung über Java Netzwerkprogrammierung 4
M HTTP PATCH Request mit Java ausführen Netzwerkprogrammierung 2
Niggo_ Probleme mit Java Mail Netzwerkprogrammierung 14
L FTP Java Interpreter unterbindet SSL Handshake Netzwerkprogrammierung 2
C IFrame mit java auslesen Netzwerkprogrammierung 1
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
C Datensammlung mit Java RMI Netzwerkprogrammierung 0
K Java Jsoup : OnLoad Netzwerkprogrammierung 0
Carres HTTP Vorhandenen Session-ID Cookie von Firefox, Chrome oder IE in Java verwenden Netzwerkprogrammierung 2
B Java+Grbl: G-Code Befehle mit Java an Arduino senden und lesen Netzwerkprogrammierung 1
Z HTTP HTML Element auslesen in Java Netzwerkprogrammierung 1
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
Thallius HTTP HTTPS unter Java 1.6 schlägt fehl Netzwerkprogrammierung 4
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
P Chat in Java Netzwerkprogrammierung 3
C java.net.ConnectException: Operation timed out? Netzwerkprogrammierung 2
T curl request in java umwandeln Netzwerkprogrammierung 4
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
L Java RMI Objekt konsistenz Netzwerkprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben