В настоящее время я использую Spring WS (spring-ws-core: 2.1.0.RELEASE). У меня настроен глобальный метод защиты:
<security:global-method-security pre-post-annotations="enabled" secured-annotations="enabled"/>
У меня есть конечная точка, которая генерирует исключение AccessDeniedException, с которым я работаюSoapFaultMappingExceptionResolver, как это:
<bean id="exceptionResolver"
class="org.springframework.ws.soap.server.endpoint.SoapFaultMappingExceptionResolver">
<property name="defaultFault" value="SERVER"/>
<property name="exceptionMappings">
<value>
org.springframework.security.access.AccessDeniedException=SENDER, 403 Forbidden
</value>
</property>
</bean>
Я получаю следующий ответ
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header/>
<env:Body>
<env:Fault>
<env:Code>
<env:Value>env:Sender</env:Value>
</env:Code>
<env:Reason>
<env:Text xml:lang="en">403 Forbidden</env:Text>
</env:Reason>
</env:Fault>
</env:Body>
</env:Envelope>
с HTTP-кодом ответа 500.
В соответствии со спецификацией спецификация мыла 1.2
он должен вернуть 400.
С моей стороны есть ошибка или это просто способ, которым Spring WS ее обрабатывает?