2010-05-11 8 views
4

J'utilise Spring WS version 1.5.8. Ma réponse ressemble à ceci:Forcer les services Web Spring à ajouter l'espace de noms xsd à la réponse

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <SOAP-ENV:Body> 
     ... 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Cependant, mon client (que j'intègre avec) exige que je vais ajouter plus declerations d'espace de noms pour que l'analyse syntaxique pour réussir:

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   
    <soapenv:Body> 
     ... 
    </soapenv:Body> 
</soapenv:Envelope> 

Comment puis-je faire il?

Répondre

4

Vous n'avez probablement pas besoin de moi pour vous dire que tout client SOAP qui nécessite la présence de certaines déclarations d'espace de noms, lorsque ces espaces de noms ne sont pas utilisés dans le document, est rompu. Donc je ne le mentionnerai pas. Cependant, si vous voulez muter la réponse comme cela, vous pouvez utiliser un EndpointInterceptor, plus précisément un SoapEndpointInterceptor. Vous pouvez câbler des intercepteurs de point de terminaison as described here.

Votre intercepteur personnalisé peut implémenter la méthode handleResponse, coulée messageContext.getResponse() à SoapMessage et en ajoutant tout ce que vous devez que:

public class MyInterceptor implements SoapEndpointInterceptor { 

    public boolean handleResponse(MessageContext messageContext, Object endpoint) throws Exception { 
     SoapMessage message = (SoapMessage) messageContext.getResponse(); 
     message.getEnvelope().addNamespaceDeclaration(....); 
     return true; 
    } 

    // ... other methods here 
} 

L'ajout de ces déclarations d'espace de noms bas niveau peuvent avoir des effets secondaires, cependant, si la bande de roulement soigneusement .

+0

Merci Skaffman pour la réponse rapide –