Probleme mit xmlrpc und php

Status
Nicht offen für weitere Antworten.

Huhn

Mitglied
Hallo Leute!

Ich habe ein Problem mit xmlrpc funktionaufrufen.

Folgendes:

- mein xmlrpc server ist ein php skript, engine stammt von http://keithdevens.com/software/xmlrpc
- xmlrpc client ist eine java umsetzung und benutzt die apache xmlrpc bibliothek 2.0

mein java code, verkürzt auf den Aufruf:

Code:
Object result = client.execute("xmlrpcfunction", params);
System.err.println(result.getClass().getName()+": "+result.toString());
if(result.getClass().getName().equals("org.apache.xmlrpc.XmlRpcException")) throw new XmlRpcException(((XmlRpcException) result).code,((XmlRpcException) result).getMessage());

mein php code, auf includes wurde verzichtet:

Code:
$xmlrpc_methods["xmlrpcfunction"] = "xmlrpc_exception";

function xmlrpc_exception($params) {
	XMLRPC_error(800,"fehler");
}

$xmlrpc_request = XMLRPC_parse($HTTP_RAW_POST_DATA);
$methodName = XMLRPC_getMethodName($xmlrpc_request);
$params = XMLRPC_getParams($xmlrpc_request);

    #call the method
    $xmlrpc_methods[$methodName]($params);

jetzt kommts:

- java liefert mir beim execute ein org.apache.xmlrpc.XmlRpcException Object zurück, was den korreken Fehlercode und Fehlermeldung enthält
- java erzeugt aber keine exception
- erst bei der manuellen abfrage wird die exception erzeugt

Kann mir einer sagen wieso das so ist ? woran liegts ? Hat schonmal einer Erfahrungen gemacht mit java - php xmlrpc Aufrufen ?

Ich hab echt kein Idee mehr :(
 

Huhn

Mitglied
habe das grad nochmal mit der pear xmlrpc implementierung getestet, gleiches Ergebnis. Es wird keine Exception erzeugt.
 

Bleiglanz

Gesperrter Benutzer
- java erzeugt aber keine exception

würde vermuten, dass die Bibliothek eben so ist; d.h. nicht der execute aufruf wirft die Exception, sondern diese wird einfach als Ergebnis geliefert (schau mal in die Doku)

- erst bei der manuellen abfrage wird die exception erzeugt

wie siehtst du das? was ist der "manuelle" Aufruf??

(wenn das im browser ist, dann wird eben der php fehler direkt angezeigt und nicht vom Framework in eine Java-Exception eingewickelt)
 

Huhn

Mitglied
zu 1. :

http://ws.apache.org/xmlrpc/apidocs/org/apache/xmlrpc/XmlRpcClient.html

laut api doc wird da eine IOException oder XmlRpcExcepion erzeugt:
Code:
public java.lang.Object execute(java.lang.String method,
                                java.util.Vector params)
                         throws XmlRpcException,
                                java.io.IOException
zu 2.:

oben im Code frage ich das Object ab was mir zurückgegeben wird, und erzeuge daraus ne Exception falls es sich eben um das Exception Object handelt. Das meinte ich mit manuellem Aufruf. Diese Zeile sollte normalerweise nie zur Ausführung kommen, die Exception sollte ja schon von der execute Methode kommen, tut sie aber nicht :shock:


zu hülfe :(
 

Bleiglanz

Gesperrter Benutzer
Code:
Object result = client.execute("xmlrpcfunction", params);
Hast du um das ganze ein Try Catch?

Und wenn ja, dann wirfst du aber in
Code:
if(rif(result.getClass().getName().equals("org.apache.xmlrpc.XmlRpcException")) throw new XmlRpcException
einfach eine neue, das wär dann ein klassischer Fehler (das Verschlucken von geworfenen Exceptions??)
 

Bleiglanz

Gesperrter Benutzer
ggf. würde ich auch die Doku beider Frameworks lesen

vielleicht ist die php-Seite da nicht konform mit dem Client und schickt fälschlicherweise ein Exceptionobjekt zurück
 

Huhn

Mitglied
Bleiglanz hat gesagt.:
Code:
Object result = client.execute("xmlrpcfunction", params);
Hast du um das ganze ein Try Catch?

Und wenn ja, dann wirfst du aber in
Code:
if(rif(result.getClass().getName().equals("org.apache.xmlrpc.XmlRpcException")) throw new XmlRpcException
einfach eine neue, das wär dann ein klassischer Fehler (das Verschlucken von geworfenen Exceptions??)

Also ein try - catch block ist an der stelle pflicht,da die von execute erzeugten exceptions ja abgefangen werden müssen, wird von java schon so gefordert bzw. netbeans ;)
Und da die execute methode die exception erzeugt, dürfte die throw anweisung gar nicht mehr ausgeführt werden, da ja vorher in den catch block gesprungen wird. tut sie aber eben nicht.

im Beispiel oben wird bei mir _immer_ das Object als String ausgegeben (die zeile nach execute), wo ich sehe dass es sich um ein XmlRpcException Object handelt.

Danach checke ich nochmal manuell um welchen Objekt Typ es sich handelt, und erzeuge manuell eine neue XmlRpcException mit den Daten des Objekts, was ich bei der execute Methode zurückbekommen habe.
Und siehe da, es wird der catch Block aufgerufen, mit der Fehlermeldung und Fehlercode die ich auch im PhP Skript verwendet habe.

Wodurch dieser Effekt entsteht würde ich ja gern mal wissen. Ich habe jetzt auf PhP Seite (Server) schon mit der oben angegebenen Variante und der PEAR::XML_RPC Implementierung versucht, mit jeweils dem gleichen Ergebnis.

Auf Client Seite hab ich bis jetzt nur die Apache XmlRpc Variante probiert, andere bibliotheken hab ich dazu nicht gefunden. Kennt da noch jemand welche ?

Ich könnte auch einfach einen wrapper um die execute Methode baun, der mir eben nochmal manuell die exception erzeugt, aber das kanns ja irgendwie auch nicht sein oder ?
 

Huhn

Mitglied
Hier nochmal die Codeblöcke, mit allem drum und dran:

java client:

Code:
       try {
            XmlRpcClient client = XmlRpcClient("http://localhost/xmlrpctest.php");
            Vector params = new Vector ();
            Object result = client.execute("test.exception", params);
            System.err.println(result.getClass().getName()+": "+result.toString());
            if(result.getClass().getName().equals("org.apache.xmlrpc.XmlRpcException")) throw new XmlRpcException(((XmlRpcException) result).code,((XmlRpcException) result).getMessage());
        } catch(XmlRpcException s) {
            System.err.println("rpc error: "+s.getMessage());
        } catch(IOException i) {
            System.err.println("io error: "+i.getMessage());
        }

php server, pear xml_rpc
Code:
<?php
require_once 'XML/RPC/Server.php';

function testException($params) {
	return new XML_RPC_Response (0, 100, "testfehler");
}

$server = new XML_RPC_Server(
    array(
        'test.exception' =>
            array(
                'function' => 'testException'
            )
    )
);
?>

und die Ausgabe:
Code:
org.apache.xmlrpc.XmlRpcException: org.apache.xmlrpc.XmlRpcException: testfehler
rpc error: testfehler
 

Bleiglanz

Gesperrter Benutzer
php gibt ja einfach eine Exception Objekt zurück

die frage ist, wie du in php das "throw" realisieren kannst, gibts da keinen Befehl dafür, steht nix in der Doku?
 

Huhn

Mitglied
Im php code wird eine xmlrpc fehlermeldung generiert und an den client geschickt. Dessen Aufgabe ist es, dieses zu interpretieren. Java sollte aus der xmlrpc fehlermeldung eine Exception erzeugen, was Java offensichtlich nicht tut. Java gibt mir das Exception Object als Ergebnis der execute Methode zurück, und erzeugt keine Exception wie in der Api Doku beschrieben. Sieht nach einem handfesten Bug aus....
 

Bleiglanz

Gesperrter Benutzer
schreib mal ein

$i = 1/0;

in deiner php-server routine

=> bekommt der java client dann eine exception?
 

Bleiglanz

Gesperrter Benutzer
Na gut, dann machs eben alleine wenn du dich so toll auskennst

War ja nur ein versuch, hätte mich auch gewundert wenn das so clever gewesen wäre (in Java ist das normal: am Server fliegt Exception, die wird aufgefangen und schön in eine Fault-Message für den Client verpackt...)

Das Problem ist eben wie du am Server solche erzeugst, d.h. wie organsiert deine PHP Library die Erzeugung eines "faults"

Code:
<methodResponse>
   <fault>
      <value>
         usw.
das sollte eingentlich von

XMLRPC_error

generiert werden, aber wenn du lieber "als Antwort" ein Exception Objekt schickst (das ja dann gar kein Fehler ist) na gut
 

Huhn

Mitglied
Bleiglanz hat gesagt.:
Na gut, dann machs eben alleine wenn du dich so toll auskennst

War ja nur ein versuch, hätte mich auch gewundert wenn das so clever gewesen wäre (in Java ist das normal: am Server fliegt Exception, die wird aufgefangen und schön in eine Fault-Message für den Client verpackt...)

Das Problem ist eben wie du am Server solche erzeugst, d.h. wie organsiert deine PHP Library die Erzeugung eines "faults"

Code:
<methodResponse>
   <fault>
      <value>
         usw.
das sollte eingentlich von

XMLRPC_error

generiert werden, aber wenn du lieber "als Antwort" ein Exception Objekt schickst (das ja dann gar kein Fehler ist) na gut

ich schicke keine exception, sondern ein xmlrpc_error paket. Von java wird das interpretiert und daraus eine exception erzeugt.

Man kann als Antwort keine Exception schicken, sondern nur xml pakete.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Probleme mit XML XPATH Select XML & JSON 3
N Probleme bei der Formatierung beim Einfügen und löschen über DOM XML & JSON 7
G Probleme mit Jsoup in .jar File XML & JSON 11
K JAX-WS Bindin-Probleme XML & JSON 1
B Probleme mit RelativeLayout XML & JSON 1
L Jackson JSON: Probleme beim einlesen XML & JSON 1
K XOM Builder Probleme XML & JSON 3
N Jsoup: PHP-Tags bereiten Probleme? XML & JSON 2
M SAX-Parsing Probleme XML & JSON 23
M Probleme mit XPath bei Java XML & JSON 5
hdi Probleme beim Erstellen einer XML XML & JSON 7
F Probleme beim html parsen mit tagsoup XML & JSON 4
M Probleme beim Parsen eines gefilterten XML-Dokuments XML & JSON 6
H JAXB Probleme beim Unmarshalling XML & JSON 3
G Probleme mit XML und JTree XML & JSON 9
klattiator Probleme mit Codierung XML & JSON 3
S Probleme beim erstellen einer Jar XML & JSON 12
T XML und Sonderzeichen, Probleme mit ASP.NET Server XML & JSON 2
G Probleme mit Namespaces XML & JSON 5
D Probleme mit Eclipse Modeling Framework (EMF) XML & JSON 2
S PDF Erzeugung - Probleme mit der XML Datei bei Schema-Infos XML & JSON 2
C SAX Probleme beim lesen XML & JSON 4
F JAXB - Nachträglich hinzugefügter Code macht Probleme XML & JSON 2
D Probleme beim SAX parsing XML & JSON 4
P Probleme mit JDom . addContent(int index,Collection c) XML & JSON 2
F Unmarshall Probleme XML & JSON 5
byte Probleme beim Parsen von XHTML-Datei XML & JSON 4
R Probleme mit Transformer und StreamResult XML & JSON 4
C Probleme mit Include XML & JSON 10
C POI + jXLS Probleme XML & JSON 3
B DOM DTD laden abschalten, Probleme mit Doctypes und PIs XML & JSON 2
S Probleme mit Jdom XML & JSON 3
G probleme mit package XML & JSON 12
M Probleme mit String XML & JSON 3
B Probleme mit Zugriff auf eXist-Datenbank XML & JSON 9
H Neu bei JAVA- Probleme mit der Integration von Xerces XML & JSON 3
P Probleme mit jdom XML & JSON 5
R JAVA und DOM, probleme beim einfügen von elementen ?????? XML & JSON 6
A XMLRPC für Java XML & JSON 3
X XMLRPC mit GWT XML & JSON 13
A xmlrpc Datenbankabfrage XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben