Je suis actuellement confronté à un problème avec les codes d'erreur et les messages utilisant Spring WS.Comment transformer des exceptions en codes retour en utilisant Spring-WS?
Nous utilisons Spring WS 2.0 avec une liaison JAXB2 et les annotations @Endpoint et @PayloadRoot pour plus de commodité.
point final Notre ressemble à ceci:
@Endpoint
public class MyEndpoint() {
private static final String MY_NAMESPACE=...;
@PayloadRoot(namespace=MY_NAMESPACE, localPart="myPart")
public MyPartResponse handleMyPart(MyPart myPart) {
....
}
}
Nous utilisons uniquement du savon comme enveloppe mince autour d'un message POX, défini par le XSD. Cela signifie également que nous utilisons des codes de retour et des messages au lieu de fautes.
Chaque réponse hérite de
<xs:complexType name="ResultBase">
<xs:sequence>
<xs:element name="errorCode" type="tns:ErrorCode" />
<xs:element name="errorMessage" type="xs:string" />
</xs:sequence>
</xs:complexType>
et ajoute quelques détails en cas de succès, comme celui-ci:
<xs:element name="MySpecificResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="tns:ResultBase">
<xs:sequence>
<xs:element name="mySpecificElement" type="tns:MySpecificType" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
Toutes les exceptions étant jetés dans la méthode handleMyPart peut être proprement cartographiés.
Cependant deux types d'erreurs restent uncaught et génèrent des défauts au lieu d'un message d'erreur clair:
- XSD Validations erreurs
- XML malformées Erreurs
A la fin de la journée, ce sont des problèmes qui concernent chaque service Web POX utilisant Spring WS. Comment devrait-on intercepter ces exceptions et cartographier ensuite sur un objet réponse? Rappelez-vous cependant: tous les objets de réponse sont légèrement différents car ils héritent tous du commun, mais y ajoutent un contenu optionnel unique.
Je viens de soulever une demande de fonctionnalité sur le printemps-WS Jira: https://jira.springframework.org/browse/SWS-657 –