栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用AXIS2创建的ADB存根在客户端获取原始XML SOAP响应

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用AXIS2创建的ADB存根在客户端获取原始XML SOAP响应

按照joergl的建议,我使用“ SOAPHandler”将ADB存根更改为JAX-WS-
one,以按照以下说明记录请求,响应和错误:http ://www.mkyong.com/webservices/jax-ws/jax -ws-
soap-handler在客户端/

我的处理程序如下所示,用于使用log4j记录格式正确的XML:

public class RequestResponseHandler  implements SOAPHandler<SOAPMessageContext> {    private static Logger log = Logger.getLogger(RequestResponseHandler.class);    private Transformer transformer = null;    private documentBuilderFactory docBuilderFactory = null;    private documentBuilder docBuilder = null;    public RequestResponseHandler() {        try { transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "5"); docBuilderFactory = documentBuilderFactory.newInstance(); docBuilder = docBuilderFactory.newdocumentBuilder();        } catch (TransformerConfigurationException     | TransformerFactoryConfigurationError     | ParserConfigurationException e) { log.error(e.getMessage(), e);        }    }    @Override    public void close(MessageContext arg0) {    }    @Override    public boolean handleFault(SOAPMessageContext messageContext) {        log(messageContext);        return true;    }    @Override    public boolean handleMessage(SOAPMessageContext messageContext) {        log(messageContext);        return true;    }    private void log(SOAPMessageContext messageContext) {        String xml = "";        SOAPMessage msg = messageContext.getMessage();        ByteArrayOutputStream out = new ByteArrayOutputStream();        try { msg.writeTo(out); xml = out.toString("UTF-8");        } catch (Exception e) { log.error(e.getMessage(),e);        }        String direction = "";        Boolean outbound = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);         if (outbound) {  direction += "Request: n";         } else {  direction += "Response: n";        }        log.info(direction + getXMLprettyPrinted(xml));         }    @Override    public Set<QName> getHeaders() {        return Collections.emptySet();    }    public String getXMLprettyPrinted(String xml) {        if (transformer == null || docBuilder == null) return xml;        InputSource ipXML = new InputSource(new StringReader(xml));        document doc;        try { doc = docBuilder.parse(ipXML); StringWriter stringWriter = new StringWriter(); StreamResult streamResult = new StreamResult(stringWriter); DOMSource domSource = new DOMSource(doc); transformer.transform(domSource, streamResult); return stringWriter.toString();        } catch (SAXException | IOException | TransformerException e) { log.error(e.getMessage(), e); return xml;        }    }}

另外,我想在应用程序代码中重用原始XML。因此,我不得不将此数据从SOAPHandler传输回我的客户端代码。如何做到这一点并不是太明显。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号