【问题标题】:Spring WS SOAP Response Header modification in EndPoint classEndPoint 类中的 Spring WS SOAP 响应头修改
【发布时间】:2018-09-13 05:10:10
【问题描述】:

我是 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;
    }
}

【问题讨论】:

    标签: java soap spring-ws endpoint


    【解决方案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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多