Принудительные веб-сервисы Spring, чтобы добавить пространство имен XSD в ответ

StackOverflow https://stackoverflow.com/questions/2813320

Вопрос

Я использую весну WS версии 1.5.8. Мой ответ выглядит так:

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

Тем не менее, мой клиент (которому я интегрирую) требует, чтобы я добавим больше дескрипторов пространств имен, чтобы разбавиться, чтобы преуспеть:

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

Как мне это сделать?

Это было полезно?

Решение

Вам, вероятно, не нужна, чтобы я сказал вам, что любой мыльный клиент, который требует определенных деклараций пространств имен, когда эти пространства имен не используются в документе, не сломаны. Так что я не буду упомянуть это.

Однако, если вы хотите мутировать такое ответа, вы можете использовать EndpointInterceptor, конкретно а SoapEndpointInterceptor. Отказ Вы можете проводить проводные перехватыватели конечной точки Как описано здесь.

Ваш пользовательский перехватчик может реализовать handleResponse Метод, отливка messageContext.getResponse() к SoapMessage И добавляя все, что вам нужно:

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
}

Добавление таких низкоуровневых деклараций пространства имен может иметь побочные эффекты, хотя и тщательно протектовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top