我正在使用以下系统属性:
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 规范提供的可扩展处理程序框架和 RI 中更好的消息抽象,我们引入了一个名为 MessageHandler 的新处理程序来扩展您的 Web 服务应用程序。MessageHandler 类似于 SOAPHandler,不同之处在于它的实现可以访问 MessageHandlerContext(MessageContext 的扩展(。通过 MessageHandlerContext,可以访问消息并使用消息 API 处理它。正如我在博客标题中所说的那样,此处理程序允许您处理消息,它提供了访问/处理消息的有效方法,而不仅仅是基于 DOM 的消息。处理程序的编程模型是相同的,消息处理程序可以与标准逻辑处理程序和 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;
}
}