⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientfaultconverter.java

📁 Xfire文件 用于开发web service 的一个开源工具 很好用的
💻 JAVA
字号:
package org.codehaus.xfire.client;import java.lang.reflect.Constructor;import java.util.Iterator;import javax.xml.namespace.QName;import org.codehaus.xfire.MessageContext;import org.codehaus.xfire.fault.XFireFault;import org.codehaus.xfire.handler.AbstractHandler;import org.codehaus.xfire.service.FaultInfo;import org.codehaus.xfire.service.MessagePartInfo;import org.codehaus.xfire.service.OperationInfo;import org.codehaus.xfire.service.binding.BindingProvider;import org.codehaus.xfire.util.stax.JDOMStreamReader;import org.jdom.Element;/** * Takes an XFireFault and converts it to a local exception type if possible. *  * @author Dan Diephouse */public class ClientFaultConverter extends AbstractHandler{    public void invoke(MessageContext context)        throws Exception    {        XFireFault fault = (XFireFault) context.getExchange().getFaultMessage().getBody();                if (fault.getDetail() != null && fault.getDetail().getChildren().size() > 0)        {            processFaultDetail(fault, context);        }    }    protected void processFaultDetail(XFireFault fault, MessageContext context)        throws Exception    {        Element exDetail = (Element) fault.getDetail().getChildren().get(0);                MessagePartInfo faultPart = getFaultPart(context.getExchange().getOperation(),                                                 exDetail);        if (faultPart == null || faultPart.getTypeClass() == null)            return;        BindingProvider provider = context.getService().getBindingProvider();        JDOMStreamReader reader = new JDOMStreamReader(exDetail);        reader.nextTag();                Object e = (Object) provider.readParameter(faultPart, reader, context);        if (!(e instanceof Exception))        {            Class exClass = ((FaultInfo) faultPart.getContainer()).getExceptionClass();                        Constructor constructor = exClass.getConstructor(new Class[] {String.class, faultPart.getTypeClass()});            e = constructor.newInstance(new Object[] {fault.getMessage(), e});        }                context.getExchange().getFaultMessage().setBody(e);    }        protected MessagePartInfo getFaultPart(OperationInfo operation, Element exDetail)    {        QName qname = new QName(exDetail.getNamespaceURI(), exDetail.getName());                for (Iterator itr = operation.getFaults().iterator(); itr.hasNext();)        {            FaultInfo faultInfo = (FaultInfo) itr.next();                        MessagePartInfo part = faultInfo.getMessagePart(qname);                        if (part != null) return part;        }                return null;    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -