2017-09-30 2 views
1

Je POSTE un XML à mon application springboot et je le reçois dans un Pojo Jaxb et je renvoie une réponse. Je suis capable de le faire avec succès, cependant si je passe xml avec l'espace de noms j'obtiens le code de réponse comme 406 et le corps de réponse comme aucun contenu. J'ai essayé plusieurs façons d'ajouter un espace de noms dans mon Pojo et j'ai même essayé de l'ajouter dans le paquet-info mais je suis incapable de trouver un moyen de le faire fonctionner. Ci-dessous l'exemple de travail avec un xml simple, sans espace de nomsJAXB - Envoyer XML avec l'espace de noms au contrôleur REST dans SpringBoot

Pojo Employee.java

@XmlRootElement(name = "Employee") 
public class Employee { 
    private int id; 
    private String name; 
    private float salary; 

    public Employee() {} 
    public Employee(int id, String name, float salary) { 
     super(); 
     this.id = id; 
     this.name = name; 
     this.salary = salary; 
    } 
    @XmlAttribute 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    @XmlElement //(namespace="http://www.example.org/property") 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    @XmlElement 
    public float getSalary() { 
     return salary; 
    } 
    public void setSalary(float salary) { 
     this.salary = salary; 
    } 
} 

ci-dessous est ma méthode du contrôleur qui devient des valeurs du xml via POJO

@RequestMapping(value = { "/myURL" }, method = RequestMethod.POST, consumes = { "application/xml" }) 
public ResponseEntity<?> postMethodXMLreturnXML(@RequestBody Employee list) { 
    try { 
     Employee FirstValue=list; 
     System.out.println("SOP : post Method started . Name " + FirstValue.getName());   
     return new ResponseEntity<Object>(Employee , HttpStatus.CREATED); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return (new ResponseEntity<String>(ErrorCodes.SERVER_ERROR.getDescription(), 
       HttpStatus.INTERNAL_SERVER_ERROR)); 
    } 
} 

Ci-dessous la xml que je poste à ceci et obtenir la sortie désirée avec le code de réponse valide et le message de réponse

Entrée post xml

<?xml version="1.0"?> 
<Employee> 
    <id>1</id> 
    <name>myName</name> 
    <salary>1.1</salary> 
</Employee> 

Mais je veux maintenant passer sous xml, et quand je passe ci-dessous xml à ce code i obtenir le code de réponse 406 et pas de contenu, ai essayé d'ajouter l'espace de noms en POJO et même essayé d'ajouter du code pour empaqueter informations, S'il vous plaît conseiller Merci d'avance

<?xml version="1.0"?> 
<Employee> 
    <myns:id>1</myns:id> 
    <myns:name>myName</myns:name> 
    <myns:salary>1.1</myns:salary> 
</Employee> 
+0

Vous utilisez uniquement un espace de noms dans les balises d'ouverture. Les balises de fermeture n'en ont pas. –

+0

La fermeture a aussi, mis à jour ... –

+0

Joindre le code client. –

Répondre

0

Le fichier XML utilise des préfixes d'espace de noms, mais l'espace de nom lui-même n'est pas défini dans la balise de début de Employee.

<?xml version="1.0"?> 
<Employee xmlns:myns="http://example/a/b/c"> 
    <myns:id>1</myns:id> 
    <myns:name>myName</myns:name> 
    <myns:salary>1.1</myns:salary> 
</Employee> 

Ajoutez également l'espace de noms à chaque élément XML.

@XmlElement(namespace="http://example/a/b/c") 
+0

Même cela ne fonctionne pas. –

+0

@paarthbatra comment l'envoyez-vous? Utilisez-vous 'Content-Type: application/xml' dans l'en-tête? –

+0

Je poste le xml que vous venez de poster dans votre réponse à l'URL de mon microservice de démarrage. et en réponse recevoir le code de réponse 406 et le corps de réponse aucun en-tête de contenu et de réponse { "connexion": "fermer", "cache-control": "must-revalider, no-cache, no-store", "serveur" : "non spécifié", "type de contenu": null }. Fondamentalement, il n'est pas capable de lire l'entrée xml –