2016-04-22 2 views
1

Ich muss eine Java-Webanwendung erstellen, die auf eingehende HTTP-POST-Anforderungen wartet und dann das im Anfragetext enthaltene XML abruft, um es zu verarbeiten. Ich benutze Maven 4, Hibernate 3 und XML-RPC Server. Ich habe erfolgreich XML-RPC-JAR-Dateien mit Maven importiert.Ein Java XML-RPC-Servlet einrichten

Obwohl jeder zu sagen scheint, dass XML-RPC das einfachste auf der Welt ist, fällt es mir schwer, es zu implementieren. Ich bin ziemlich neu bei Webapps. Mit Blick auf Apache XML-RPC-Tutorial Ich verstehe, ich brauche eine Klasse wie zu erstellen:

public class MyServer extends XmlRpcServlet { 
    private XmlRpcServer server = new XmlRpcServer(); 
    @Override 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     server.addHandler("myProcess", new MyProcessHandler); 
     byte[] result = server.execute (request.getInputStream()); 
     response.setContentType ("text/xml"); 
     response.setContentLength (result.length()); 
     OutputStream out = response.getOutputStream(); 
     out.write (result); 
     out.flush(); 
    } 
} 

Aber das wird nicht kompiliert, da das „execute“ -Methode einen XmlRpcRequest Parameter erwartet. Irgendein Hinweis darauf, was ich falsch mache?

Abgesehen davon verstehe ich nicht, wie ich den Körper der Anfrage von meiner Funktion myProcess() bekommen werde. Ich habe eine MyProcessHandler-Klasse (die keine Klasse erweitert), die eine myProcess() - Funktion implementiert. Muss ich einen Parameter in dieser Funktion hinzufügen? Ist das denn dann welcher Typ wäre es?

Antwort

1

Nun, keine Antwort :( Jedoch habe ich es schaffte, endlich funktioniert, also werde ich meine Lösung für die anderen teilen

Das Hauptproblem liegt in der XML-RPC-Version. Apache zuerst eine alte Version mit dem Namen helma-xmlrpc erstellt und sie dann mit tiefgreifenden Änderungen in org.apache.xmlrpc umgestaltet.Obwohl Apache einige Teile seiner XML-RPC-Online-Dokumentation aktualisiert hat, verweisen einige andere Teile immer noch auf die Helma-xmlrpc ohne Hinweis auf jeder Seite Darüber hinaus sagt Apache, dass Projekte, die helma-xmlrpc verwenden nur ihre Importe aktualisieren müssen, um die neue Version org.apache.xmlrpc zu verwenden, keine Auswirkungen auf den Code - das ist total falsch. Einige Methoden und sogar einige Klassen verschwanden oder die Signatur änderte sich, und einige Klassen wurden in Unterverzeichnisse gestellt, so dass die Importe nicht mehr funktionieren.

Okay. Nachdem ich das herausgefunden hatte, verstand ich auch, dass die meisten Internet-Tutorials, die sich mit Apache XML-RPC beschäftigen, die alte helma- xmlrpc-Version verwenden, aber ihre Importe als org.apache.xmlrpc anzeigen. Daher funktionieren die Implementierungen, die sie darstellen, nicht, wenn Sie sie in Ihr eigenes Projekt einfügen, das org.apache.xmlrpc verwendet. Es kompiliert nicht einmal. Ich schaute über das Internet nach aktuellen org.apache.xmlrpc-Implementierung-mit-Servlets Tutorials ohne Ergebnis. Daher entschied ich mich für den alten Helma-xmlrpc und alles lief gut. Mit Helma kompiliert der Code, den ich in meiner ersten Nachricht gepostet habe, und ist richtig.

Wie für die Verbindung zwischen dem Listener und MyProcessHandler-Klasse gibt es dank der AddHandler-Funktion. Sobald der Handler deklariert ist, werden alle eingehenden Anfragen mit methodenname wie 'myProcess.myFunction' automatisch auf MyProcessHandler.myFunction() umgeleitet, wenn der Befehl server.execute (...) verarbeitet wird. Damit dies funktioniert, muss myFunction() einen String-Eingabeparameter deklarieren. Wenn myFunction() aufgerufen wird, enthält dieser Parameter den Rumpf der Anforderung (extrahiert von request.getInputStream() im Servlet). myFunction() muss auch etwas zurückgeben, das in die Ergebnisvariable byte [] des Servlets zurückgegeben wird.

Ich nutze den unten stehenden Link, sehr komplett und Behandlung von helma-xmlrpc nur ohne Vorwand, mit org.apache.xmlrpc ...: http://www.perfectxml.com/oreilly/chapter.asp?row_id=11

Ich hoffe, diese Antwort ist klar genug (meine Englisch ist nicht perfekt ...) und es wird anderen Entwicklern helfen, Apache XML-RPC zu verstehen.