Изменение заголовка ответа Spring WS SOAP в классе EndPoint

Я новичок в Spring WS и занимаюсь реализацией службы. Для этого я использую класс EndPoint и могу успешно получать запрос и отправлять ответ.

Сообщение запроса SOAP содержит важную информацию в заголовке SOAP, который я успешно извлек. Некоторая информация также должна быть отправлена ​​в заголовке ответа SOAP, но я не могу редактировать или изменять заголовок ответа SOAP.

Мне понадобится помощь в понимании того, как лучше всего создать заголовок ответа SOAP вместе с сообщением ответа SOAP.

Вы можете найти мой класс EndPoint ниже:

 @Endpoint
public class EndpointAccountInformationInquiry {

    private static final String TARGET_NAMESPACE = "http://www.sample.com/inquiry/GetAccountInformation";

    @Autowired
    private ServiceAccountInformation service;

    @PayloadRoot(localPart = "GetAccountInformationRq", namespace = TARGET_NAMESPACE)
    public @ResponsePayload GetAccountInformationRs handleRequest(@RequestPayload GetAccountInformationRq request, MessageContext messageContext) throws JAXBException, TransformerException {

        /*****************************************************************
         * Parse the request header and body
         * Also create response body and header
         *****************************************************************/
        SaajSoapMessage soapRequest = (SaajSoapMessage) messageContext.getRequest();
        SoapHeader soapRequestHeader = soapRequest.getSoapHeader();

        SaajSoapMessage soapResponse = (SaajSoapMessage) messageContext.getResponse();
        SoapHeader soapResponseHeader = soapResponse.getSoapHeader();        

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();

        MyHeaderClassRq myHeaderClassRq = null;
        JAXBContext jaxbContext = JAXBContext.newInstance(MyHeaderClassRq.class);
        Iterator<SoapHeaderElement> itr = soapRequestHeader.examineAllHeaderElements();
        while (itr.hasNext()) {
            SoapHeaderElement ele = itr.next();

            myHeaderClassRq = (MyHeaderClassRq)jaxbContext.createUnmarshaller().unmarshal(ele.getSource());
            transformer.transform(ele.getSource(), soapResponseHeader.getResult());
        }

        /*****************************************************************
         * Call the handler function
         * This handler function is asynchronous
         *****************************************************************/
        service.handleRequest(request, msgHdrRq);

        /*****************************************************************
         * Set the response body and header over here
         *****************************************************************/
         //TODO: I want to modify my response header over here....

        GetAccountInformationRs response = new GetAccountInformationRs();
        return response;
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
1 152
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я сам решил.

Вы можете увидеть приведенный ниже код в разделе:

/ *********************************************** ****************

* Создание тела и заголовка ответа

* И отправить обратно

************************************************ *************** /

 @Endpoint
public class EndpointAccountInformationInquiry {

//  private Logger logger = Logger.getLogger(EndpointAccountInformationInquiry.class);

    private static final String TARGET_NAMESPACE = "http://www.sample.com/inquiry/GetAccountInformation";

    @Autowired
    private ServiceAccountInformation service;

    @PayloadRoot(localPart = "GetAccountInformationRq", namespace = TARGET_NAMESPACE)
    public @ResponsePayload GetAccountInformationRs handleRequest(@RequestPayload GetAccountInformationRq request, MessageContext messageContext) throws JAXBException, TransformerException {

        /*****************************************************************
         * Parse the request header and body
         * Also create response body and header
         *****************************************************************/
        SaajSoapMessage soapRequest = (SaajSoapMessage) messageContext.getRequest();
        SoapHeader soapRequestHeader = soapRequest.getSoapHeader();

        SaajSoapMessage soapResponse = (SaajSoapMessage) messageContext.getResponse();
        SoapHeader soapResponseHeader = soapResponse.getSoapHeader();        

        MyHeaderClassRq myHeaderClassRq = null;
        JAXBContext jaxbContext = JAXBContext.newInstance(MyHeaderClassRq.class);
        Iterator<SoapHeaderElement> itr = reqheader.examineAllHeaderElements();
        while (itr.hasNext()) {
            SoapHeaderElement ele = itr.next();
            myHeaderClassRq = (MyHeaderClassRq)jaxbContext.createUnmarshaller().unmarshal(ele.getSource());
        }

        /*****************************************************************
         * Call the handler function
         * This handler function is asynchronous
         *****************************************************************/
        service.handleRequest(request, myHeaderClassRq);

        /*****************************************************************
         * Create response body and header
         * And send back
         *****************************************************************/
        //Response header
        MyHeaderClassRs myHeaderClassRs = new MsgHdrRs();
        //Set header values here

        //Response body
        GetAccountInformationRs response = new GetAccountInformationRs();

        /*****************************************************************
         * Send response back
         *****************************************************************/
        jaxbContext = JAXBContext.newInstance(MyHeaderClassRs.class);
        jaxbContext.createMarshaller().marshal(myHeaderClassRs, soapResponseHeader.getResult());

        return response;
    }
}

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