簡體   English   中英

替換axis2響應

[英]Replace the axis2 response

以前,我確實使用axis為我的Web服務實現了一個處理程序,該處理程序將讀取xml文件並將其作為響應返回。 我的代碼如下:

try {
        Message msg = msgContext.getResponseMessage();
        MessageContext context = MessageContext.getCurrentContext();



        InputStream in = this.getClass().getClassLoader().getResourceAsStream("login_rsp_xml");
        if(in==null){

            System.out.println("in is empty!!!");
        }
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(in);
        msg.getSOAPPart().setContent(new DOMSource(doc));
        System.out.println("return file>>"+fileName);

    } catch (Exception e) {
        System.setProperty("req_no", null);
        e.printStackTrace();            
    }

現在,我需要使用axis2做同樣的事情。 有誰知道如何替換axis2中的傳出響應? 我確實嘗試將文件轉換為字符串並調用Envelope.setText(),但是失敗並得到異常“ org.apache.axiom.soap.SOAPProcessingException: Can not detach SOAP Body, SOAP Envelope must have a Body !! ”。

在此先感謝您的幫助/咨詢。

我在axis2中的代碼:

   import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.util.AXIOMUtil;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceContext;
import org.apache.axis2.description.AxisMessage;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.engine.Handler;
import org.apache.axis2.handlers.AbstractHandler;
import org.apache.axis2.jaxws.message.Message;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class SamRspHandler extends AbstractHandler implements Handler {


    public String getFileContent(String path) throws Exception{
        InputStream in = this.getClass().getClassLoader()
                //.getResourceAsStream("/xmlFiles/loginRspHeader.xml");
                .getResourceAsStream(path);

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                .newInstance();

        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc2 = dBuilder.parse(in);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
                "yes");
        StringWriter writer = new StringWriter();
        transformer
                .transform(new DOMSource(doc2), new StreamResult(writer));
        String output2 = writer.getBuffer().toString();

        return output2;
    }

    public InvocationResponse invoke(MessageContext msgContext)
            throws AxisFault {
        System.out.println("In Response");


        String content = msgContext.getEnvelope().toString();

        try {

            System.out.println("zzzz>>"+System.getProperty("abc"));         


            msgContext.getEnvelope().setText("abc");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return InvocationResponse.CONTINUE;
    }

    public void revoke(MessageContext msgContext) {

    }


}

如果要在SOAP響應中設置XML文件,則必須將其包含在<![CDATA[]>標記內。 這是為了防止將XML文件作為SOAP響應的一部分進行處理。 請注意,SOAP也使用XML來處理請求和響應。

<![CDATA[
    <?xml version="1.0"?>
    <!-- Your XML -->
]>

如上所述創建XML文件,並將其設置為envelope.setText()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM