如何打印SOAP XML响应

时间:2018-01-09 12:42:34

标签: java xml web-services soap

我正在使用以下系统属性:

System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true");
                System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");
                System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true");
                System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dump", "true");

这是打印:

---[HTTP response - https://XXXXXXXXXXXXXXXXX/v1.0?wsdl - 200]---

null: HTTP/1.1 200 OK

Connection: Keep-Alive

Content-Language: en-US

Content-Type: text/xml; charset=utf-8

Date: Tue, 09 Jan 2018 12:23:42 GMT

Keep-Alive: timeout=30, max=100

Transfer-Encoding: chunked

X-Frame-Options: SAMEORIGIN

X-Powered-By: Servlet/3.0

<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><sch:InquiryResponse xmlns:sch="http://XXXXXXXXXX/1.0"><sch:InquiryResponseHeader><sch:ClientID>XXXX</sch:ClientID><sch:ProductCode>PCS</sch:ProductCode><sch:SuccessCode>0</sch:SuccessCode><sch:Date>XX-XX-XXXX</sch:Date><sch:Time>17:53:28</sch:Time></sch:InquiryResponseHeader><sch:InquiryRequestInfo><sch:InquiryPurpose>05</sch:InquiryPurpose><sch:FirstName>Ajay</sch:FirstName><sch:LastName>XXXX</sch:LastName><sch:AddrLine1>XXXX</sch:AddrLine1><sch:State>MH</sch:State><sch:Postal>411014</sch:Postal><sch:DOB>1987-06-21</sch:DOB><sch:Id>XXXX</sch:Id><sch:MobilePhone>XXXX</sch:MobilePhone></sch:InquiryRequestInfo><sch:ReportData><sch:Error><sch:ErrorCode>E0021</sch:ErrorCode><sch:ErrorMsg>User ID does not exist for the given customer.</sch:ErrorMsg></sch:Error></sch:ReportData></sch:InquiryResponse></soapenv:Body></soapenv:Envelope>

如何从上面的打印数据中获取XML数据?

我想将XML存储在变量中以供进一步使用。

感谢。

1 个答案:

答案 0 :(得分:0)

的MessageHandler:

利用JAX-WS规范提供的可扩展Handler框架和RI中更好的Message抽象,我们引入了一个名为MessageHandler的新处理程序来扩展Web Service应用程序。 MessageHandler类似于SOAPHandler,除了它的实现可以访问MessageHandlerContext(MessageContext的扩展)。通过MessageHandlerContext,可以访问Message并使用Message API处理它。当我放入博客的标题时,这个处理程序允许您使用Message,它提供了访问/处理消息的有效方法,而不仅仅是基于DOM的消息。处理程序的编程模型是相同的,Message处理程序可以与标准的Logical和SOAP处理程序混合使用。我在JAX-WS RI 2.1.3中添加了一个示例,显示使用MessageHandler来记录消息,这里是样本的片段:

        public class LoggingHandler implements MessageHandler<MessageHandlerContext> {
public boolean handleMessage(MessageHandlerContext mhc) {
    Message m = mhc.getMessage().copy();
    XMLStreamWriter writer = XMLStreamWriterFactory.create(System.out);
    try {
        m.writeTo(writer);
    } catch (XMLStreamException e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

public boolean handleFault(MessageHandlerContext mhc) {
    ..... 
    return true;
}

public void close(MessageContext messageContext) {    }

public Set getHeaders() {
    return null;
}

}