Есть ли способ добавить заголовок к 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"));   
}

0 ответов

Другие вопросы по тегам