2017-03-22 2 views
0

Wir teilen viele CSV-Dateien in unserer Organisation, enthält alle Arten von Informationen. Ich habe ein kleines Java-Programm geschrieben, um einen bestimmten freigegebenen Ordner zu überwachen und neue CSV-Dateien zu lesen. Mein Ziel ist es, Informationen über SOAP Web Services lesen und aktualisieren zu können. Mein Problem ist, dass die Informationsstruktur nicht statisch ist, also kann ich keine WSDL-Datei aus meiner Java-Struktur erstellen (zum Beispiel mit Feder ...). Ich müsste eine dynamische WSDL-Datei erstellen.Dynamic Web Service (SOAP) Provider in Java

Ich habe in Axis2 (http://axis.apache.org/axis2/java/core/) gesucht, aber ich fühle immer noch, dass ich etwas vermisse, da ich die Java-Klasse mit den WS-Definitionen on the fly erstellen müsste, dann kompilieren, das .aar-Paket erstellen und dann verschieben die Datei zum Ordner axis2. Das scheint ein bisschen schwer.

Grundsätzlich nur ich brauche zwei Methoden:

  • find (id) -> die Zeile mit dem angegebenen ID zurückkehren, wenn ID NULL ist dann wieder alle
  • update (id) -> aktualisiert die Zeile und Hier würde ich den dynamischen Inhalt benötigen, da ich das Feld weitergeben muss und den Typ, der aktualisiert werden soll.

Zum Beispiel habe ich eine User.csv:

ID;FirstName;Age;Mail 
01;Stephanie;27;[email protected] 

, das so etwas wie diese erzeugen soll:

[...]

<xsd:element name="delete"> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element maxOccurs="1" minOccurs="1" name="id" type="xsd:string" /> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 


<xsd:element name="insert"> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element maxOccurs="1" minOccurs="0" name="id" type="xsd:string" /> 
        <xsd:element maxOccurs="1" minOccurs="0" name="FirstName" type="xsd:string" /> 
        <xsd:element maxOccurs="1" minOccurs="0" name="Age" type="xsd:integer" /> 
        <xsd:element maxOccurs="1" minOccurs="0" name="Mail" type="xsd:string" /> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 

[...]

Hat jemand einen besseren Weg, dies zu tun?

Cheers, Stephanie

Antwort

0

ein einfaches WS Verwenden Sie nur mit 2 Betrieb mit einem Körper in xml roh.

Die XML-Datei muss mit einer externen XSD, die nicht in WSDL enthalten ist, kompatibel sein. Auf dem Server haben Sie alle XSD und Sie können Eingabe validieren und ein Objekt mit Jaxb zum Beispiel erstellen, das Sie für CRUD-Operation auf CSV verwenden können.

+0

Also schlagen Sie vor, dass ich die SWDL-Datei selbst schreibe (selbst generieren)? Aber dann würde der Endpunkt nicht wissen, wie man mit den "Feldern" umgeht oder irre ich mich? – Stephanie

+0

Sie können in ein Byte [] -Feld eine XML-Datei eingeben, die die Eingabe darstellt, in einem anderen Feld eine eindeutige ID für den zu aktualisierenden Endpunkt, sodass Sie auf dem Server ein Factory-Muster implementieren können, das Ihnen eine Endpunktimplementierung basierend auf der eindeutigen ID bietet . Wenn Sie für den Endpunkt eine bestimmte XSD haben, um die Eingabe im anderen Feld (Byte []) zu validieren, können Sie das korrekte Objekt validieren und erstellen und die CRUD-Operation an beliebigen Stellen ausführen. Der Master ws ist nur ein Router, der die Implementierung für einen Schlüssel kennt. Alle anderen XSD werden extern mit dem Client geteilt, nicht Teil der WSDL –