Задать код ответа для SOAP-запроса [Java, Spring, WSDL]

Есть проект на Java и Spring. Имеется файл WSDL такого содержания :

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
        targetNamespace="http://s_service.connector/2.0.0"
        xmlns:impl="http://s_service.connector/2.0.0"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
        xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">

        <!-- ...  -->

        <wsdl:portType name="GenericAccountManagement">
          <wsdl:operation name="createAccount">
            <wsdl:input message="impl:createAccountRequest" name="createAccountRequest"/>
            <wsdl:output message="impl:createAccountResponse" name="createAccountResponse"/>
            <wsdl:fault message="impl:GenericAccountManagementException" name="GenericAccountManagementException"/>
          </wsdl:operation>
        </wsdl:portType>

        <!-- ...  -->

</wsdl:definitions>

Далее по описанию из этого wsdl-файла генерируются необходимые классы. Например есть сгенерированные классы CreateAccount, CreateAccountResponse, GenericAccountManagementException. Также сгенерирован такой интерфейс:

/**
 * This class was generated by the XML-WS Tools.
 * XML-WS Tools 4.0.3
 * Generated source version: 3.0
 *
 */
@WebService(
        name = "GenericAccountManagement", 
        targetNamespace = "http://s_service.connector/2.0.0"
)
@XmlSeeAlso({
        ObjectFactory.class
})
public interface GenericAccountManagement {
    
    /**
     *
     * @param accountInfo
     * @throws GenericAccountManagementException_Exception
     */
    @WebMethod
    @RequestWrapper(localName = "createAccount", targetNamespace = "http://s_service.connector/2.0.0", className = "ru.s_service_connector._2_0.CreateAccount")
    @ResponseWrapper(localName = "createAccountResponse", targetNamespace = "http://s_service.connector/2.0.0", className = "ru.s_service_connector._2_0.CreateAccountResponse")
    public void createAccount(
            @WebParam(name = "accountInfo", targetNamespace = "http://s_service.connector/2.0.0")
            GenericAccountInfo accountInfo)
            throws GenericAccountManagementException_Exception
    ;
}

Также есть класс, реализующий этот интерфейс. Но данный класс не сгенерирован, а написан:

@WebService(
        portName = "GenericAccountManagement2",
        serviceName = "GenericAccountManagementService2",
        targetNamespace = "http://s_service.connector/2.0.0",
        endpointInterface = "ru.s_service_connector._2_0.GenericAccountManagement",
        wsdlLocation = "wsdl/GenericAccountManagement2.wsdl")
@HandlerChain(file = "jaxws-handlers.xml")
@SSL
@Api
public class GenericAccountManagementImpl implements GenericAccountManagement {
    
    @Autowired
    private SaveHandler saveHandler;

    @Override
    public void createAccount(
            @WebParam(name = "accountInfo", targetNamespace = "http://s_service.connector/2.0.0") GenericAccountInfo accountInfo
    ) throws GenericAccountManagementException_Exception {
        try {
            // ...
            saveHandler.create( /* ... */ );
        } catch (GenericAccountManagementException_Exception e) {
            throw e; // при ошибке попадаю сюда
        } 
    }    
}

Далее я с помощью программы Insomnia выполняю запросы для создания нового акаунта и как раз попадю в метод createAccount(). Запросы вида:

POST
http://localhost:56823/.../GenericAccountManagerService2/createAccount
Тело запроса в виде XML

И если новый акаунт создался, то получаю ответ с кодом 200 :

введите сюда описание изображения

В случае ошибки получаю ответ с кодом 500 :

введите сюда описание изображения

Вопрос такой: как я могу изменить код ответа? Например, в случае успеха я хочу отправлять не 200, а 201. А в случае ошибки - не 500, а 400 к примеру. Как это можно сделать? Я вообще не понял, откуда тут взялись коды ответов 200 и 500, нигде в коде проекта не вижу чтобы они явно задавались.


Ответы (0 шт):