2017-09-18 2 views
0

Nous avons le service Web SOAP et notre approche est WSDL en premier. Ci-dessous vous voyez l'objet de requête généré depuis wsdl via wsdl vers le plugin java dans pom.xml. Ce est ainsi l'objet de la demande ressemble à:Interrogation de la requête SOAP Paramètre Enum pour envoyer un message à l'utilisateur si le type de requête est différent de celui défini dans Enum

@XmlRootElement (name = "XXXRequest") public class GetXXXRequest {

@XmlElement(name = "XXX", required = true) 
@XmlJavaTypeAdapter(XX .class) 
protected String x; 
@XmlElement(name = "YYY", required = true) 
@XmlJavaTypeAdapter(XX .class) 
protected String y; 
@XmlElement(name = "ZZZ", required = true) 
@XmlJavaTypeAdapter(XX .class) 
protected String z; 
@XmlElement(name = "TTT", required = true) 
@XmlJavaTypeAdapter(XX.class) 
protected String t; 
@XmlElement(name = "TypeOfRequest", required = true) 
protected TypeOfRequest type; 
@XmlElement(name = "Criteria", required = true) 
protected Criteria criteria; 

TypeOfRequest EST ENUM. Maintenant, TypeOfRequest avait 7 valeurs. Supposons que l'utilisateur envoie une valeur autre que les 7 valeurs définies dans TypeOfRequest, puis qu'elle soit NULL et que notre validation ne puisse pas la valider pour voir si l'utilisateur n'a pas choisi TypeOfRequest ou a donné une autre valeur que 7 valeurs. SO dans la coquille de noix je veux valider et envoyer le message significatif si l'utilisateur a choisi n'importe quelle autre valeur que la valeur 7. Je ne suis pas capable de l'atteindre. Y a-t-il un moyen de le faire? J'ai une idée que je peux l'intercepter mais j'ai besoin de conseils pour l'implémenter. Nous utilisons cxf, jaxws et Spring framework.

Répondre

0

Vos balises impliquent que vous utilisez Spring; Dans ce cas, vous pouvez regarder dans spring validation. En utilisant ceci, vous pouvez ajouter des annotations qui spécifient les instances de contrats de votre classe: @NonNull, etc., puis ajoutez @Valid (ou @Validated) dans la méthode de votre contrôleur où vous injectez l'instance.

public class XXXRequest { 
    // ... 
    protected @NonNull TypeOfRequest type; 
    // ... 
} 

Et dans le contrôleur:

@GetMapping("/{id}") 
public ResponseEntity<?> get(final @Valid XXXRequest request) { 
    // ... 
} 
+0

Arbres. Nous utilisons SPring mais ce n'est pas une application web c'est un webservice SOAP donc il n'y a pas de contrôleur. La deuxième chose est dans le cas où l'utilisateur envoie une valeur différente pour TYpeOfRequest qui est Enum alors nous obtenons null. Je veux mettre la validation pour que je puisse valider la mauvaise valeur d'Enum. – user3330509

0

Merci. Nous utilisons SPring mais ce n'est pas une application web c'est un webservice SOAP donc il n'y a pas de contrôleur. La deuxième chose est dans le cas où l'utilisateur envoie une valeur différente pour TYpeOfRequest qui est Enum alors nous obtenons null. Je veux mettre la validation pour que je puisse valider la mauvaise valeur d'Enum.

0

J'ai été capable de le résoudre. Étapes que j'ai faites étaient: 1) Créé un adaptateur personnalisé.

RequestXXXXAdapter public class étend XMLAdapter {

@Override 
public ReqXXXX unmarshal(String v) throws Exception { 
    try { 
     return ReqXXX.valueOf(v); 
    } catch(Exception e) { 
     throw new JAXBException("Invalid parameter"); 
    } 
} 

@Override 
public String marshal(ReqXXXX type) throws Exception { 
    return type.name(); 
} 

}

Étape 2: Ajout ci-dessous xsd avec ReqXXXX ENUM.

<xs:annotation> 
    <xs:appinfo> 
    <xjc:javaType name="com.XX.XX.XX.ReqXXXX" 
     adapter="com.xx.xx..yy.ReqXXXAdapter" /> 
    </xs:appinfo> 
</xs:annotation> 

... ..

donc au-dessus du code généré l'annotation XmlJavaTypeAdapter @XmlJavaTypeAdapter (ReqTXXXXAdapter.class) protégé ReqXXXX reqxxxx; Maintenant, avec ce changement, je peux valider l'Enum avant même que mes servicesimpl ne se produisent.