Задать код ответа для 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, нигде в коде проекта не вижу чтобы они явно задавались.

