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

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存储在变量中以备将来使用。

谢谢。

最佳答案

MessageHandler:

利用JAX-WS Specification提供的可扩展的Handler框架和RI中更好的Message抽象,我们引入了一个称为MessageHandler的新处理程序来扩展您的Web Service应用程序。 MessageHandler与SOAPHandler类似,不同之处在于它的实现可以访问MessageHandlerContext(MessageContext的扩展)。通过MessageHandlerContext,可以访问消息并使用消息API对其进行处理。正如我在博客标题中所述,此处理程序使您可以处理Message,它提供了有效的方法来访问/处理消息,而不仅仅是基于DOM的消息。处理程序的编程模型相同,并且消息处理程序可以与标准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;
}


}

08-25 09:02