Есть ли способ добавить заголовок к HTTP-ответу SOAP в веб-службе, созданной Axis2?
У меня есть веб-служба, созданная Apache Axis2 из WSDL с использованием eclipse-mars, работающая на tomcat 8.0: скелет методов, сгенерированные классы типов и получатель сообщений, который является автоматически сгенерированной реализацией AbstractInOutMessageReciever.
Любой запрос возвращает статус http 200. Если я отправляю XML без обязательных полей, он выдает 500 внутренних ошибок сервера и XML со строкой ошибки (adbeException).
Реализация сервиса содержится в скелетоне. Мне нужно добавить код состояния 400 при выполнении некоторых условий, но я не могу найти, куда поместить заголовки в ответе HTTP. У меня есть сгенерированный объект ответа, но он не содержит ничего, кроме полей и установщиков для них.
Сгенерированный MessageReciever содержит метод ignoreBusinessLogic, который отправляет в ответ объект SOAPEnvelope. Есть ли способ добавить в этот конверт несколько http-заголовков?
upd: добавлен пример кода
у меня есть скелетный метод:
public class GenServiceSkeleton {
public TaskResponse taskResponse(TaskRequest request) {
// some business logic
// for ex
TaskResponse resp = new TaskResponse();
resp.setTask("1");
return resp;
}
}
где TaskResponse — это реализация компонента ADBBean, а получатель — подкласс AbstractInOutMessageReceiver.
public class GenServiceRecieverInOut extends org.apache.axis2.receivers.AbstractInOutMessageReceiever {
public void invokeBusinessLogic(org.apache.axis2.context.MessageContext msgContect, org.apache.axis2.context.MessageContext newMsgContext) {
try {
// get the implementation class for the Web Service
Object obj = getTheImplementationObject(msgContext)
GenServiceSkeleton skel = (GenServiceSkeleton)skel;
//Out Envelop
org.apache.axiom.soap.SOAPEnvelope envelope = null;
// ....
// below some code
// ....
// ....
if("getTask".equals(methodName)){
TaskResponse taskResponse11 = null;
TaskRequest wrappedParam = (TaskRequest)fromOM(msgContext.getEnvelope().getBody().getFirstElement(),TaskRequest.class);
taskResponse11 =skel.taskResponse(wrappedParam);
envelope = toEnvelope(getSOAPFactory(msgContext), taskResponse11, false,new javax.xml.namespace.QName("http://example.com", "TaskResponse"));
}