2017-03-22 1 views
0

Nous partageons beaucoup de fichiers CSV dans notre organisation, contenant toutes sortes d'informations. J'ai écrit un petit programme Java pour surveiller un certain dossier partagé et lire de nouveaux fichiers csv. Mon objectif est de permettre la lecture et la mise à jour des informations via les services Web SOAP. Mon problème est que la structure de l'information n'est pas statique, donc je ne peux pas créer un fichier WSDL à partir de ma structure Java (par exemple en utilisant spring ...). Je devrais créer un fichier WSDL dynamique. Je cherchais dans Axis2 (http://axis.apache.org/axis2/java/core/) mais je pense toujours qu'il me manque quelque chose, car je devrais construire la classe Java avec les définitions WS à la volée, puis compiler, construire le paquet .aar et ensuite déplacer le fichier dans le dossier axis2. Cela semble un peu lourd.Fournisseur de services Web dynamiques (SOAP) en Java

Fondamentalement, je seulement besoin de deux méthodes:

  • find (id) -> retourner la ligne avec ID spécifié si ID est NULL retour alors tout
  • mise à jour (id) -> Mises à jour de la ligne et ici, j'aurais besoin du contenu dynamique puisque je dois transmettre le champ et le type qui devrait être mis à jour.

Par exemple, j'ai User.csv:

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

qui devrait générer quelque chose comme ceci:

[...]

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

[...]

Quelqu'un at-il une meilleure façon de le faire?

Cheers, Stephanie

Répondre

0

Utilisez un WS simples seulement avec 2 opération avec un corps brut en XML.

Le fichier XML doit être compatible avec un fichier XSD externe non au format WSDL. Dans le serveur vous avez tous XSD et vous pouvez valider l'entrée et créer un objet avec Jaxb par exemple, que vous pouvez utiliser pour l'opération CRUD sur CSV.

+0

Vous suggérez donc d'écrire le fichier SWDL moi-même (générez-le moi-même)? Mais alors le point final ne saurait pas gérer les «champs» ou est-ce que je me trompe? – Stephanie

+0

vous pouvez mettre dans un champ byte [] un fichier xml représentant l'entrée, annoncez dans un autre champ un identifiant unique pour le noeud final à mettre à jour, ainsi dans le serveur vous pouvez implémenter un modèle d'usine qui vous donne une implémentation basée sur un ID unique . Maintenant, pour l'extrémité, vous avez un XSD spécifique pour valider l'entrée dans l'autre fichier (octet []), vous pouvez valider et créer l'objet correct et faire l'opération CRUD où vous voulez. Le maître ws est juste un routeur qui connaît l'implémentation d'une clé. Tous les autres XSD sont partagés en externe avec le client et ne font pas partie du WSDL –