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

📄 msgprovider.java

📁 Java有关XML编程需要用到axis 的源代码 把里面bin下的包导入相应的Java工程 进行使用
💻 JAVA
字号:
/* * Copyright 2001-2004 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.axis.providers.java;import org.apache.axis.AxisFault;import org.apache.axis.MessageContext;import org.apache.axis.handlers.soap.SOAPService;import org.apache.axis.description.OperationDesc;import org.apache.axis.description.ServiceDesc;import org.apache.axis.i18n.Messages;import org.apache.axis.message.SOAPBodyElement;import org.apache.axis.message.SOAPEnvelope;import org.apache.axis.message.MessageElement;import org.w3c.dom.Document;import org.w3c.dom.Element;import javax.xml.namespace.QName;import java.lang.reflect.Method;import java.util.Vector;/** * Deal with message-style Java services.  For now, these are services * with exactly ONE OperationDesc, pointing to a method which looks like * one of the following: * * public Element [] method(Vector v); * (NOTE : This is silly, we should change it to either be Vector/Vector * or Element[]/Element[]) * * public Document method(Document doc); * * public void method(MessageContext mc); * * @author Doug Davis (dug@us.ibm.com) * @author Glen Daniels (gdaniels@apache.org) */public class MsgProvider extends JavaProvider {    /**     * Process the message.  Figure out the method "style" (one of the three     * allowed signatures, which has already been determined and cached in     * the OperationDesc) and do the actual invocation.  Note that we don't     * catch exceptions here, preferring to bubble them right up through to     * someone who'll catch it above us.     *     * @param msgContext the active MessageContext     * @param reqEnv the request SOAPEnvelope     * @param resEnv the response SOAPEnvelope (we should fill this in)     * @param obj the service target object     * @throws Exception     */    public void processMessage (MessageContext msgContext,                                SOAPEnvelope reqEnv,                                SOAPEnvelope resEnv,                                Object obj)        throws Exception    {        OperationDesc operation = msgContext.getOperation();        SOAPService service = msgContext.getService();        ServiceDesc serviceDesc = service.getServiceDescription();        QName opQName = null;                if (operation == null) {            Vector bodyElements = reqEnv.getBodyElements();            if(bodyElements.size() > 0) {                MessageElement element = (MessageElement) bodyElements.get(0);                if (element != null) {                    opQName = new QName(element.getNamespaceURI(),                            element.getLocalName());                    operation = serviceDesc.getOperationByElementQName(opQName);                }            }        }        if (operation == null) {            throw new AxisFault(Messages.getMessage("noOperationForQName",                                opQName == null ? "null" : opQName.toString()));        }                Method method = operation.getMethod();        int methodType = operation.getMessageOperationStyle();        if (methodType != OperationDesc.MSG_METHOD_SOAPENVELOPE) {            // dig out just the body, and pass it on            Vector                bodies  = reqEnv.getBodyElements();            Object argObjects[] = new Object [1];            switch (methodType) {                // SOAPBodyElement [] / SOAPBodyElement []                case OperationDesc.MSG_METHOD_BODYARRAY:                    SOAPBodyElement [] bodyElements =                            new SOAPBodyElement[bodies.size()];                    bodies.toArray(bodyElements);                    argObjects[0] = bodyElements;                    SOAPBodyElement [] bodyResult =                            (SOAPBodyElement [])method.invoke(obj, argObjects);                    if (bodyResult != null) {                        for (int i = 0; i < bodyResult.length; i++) {                            SOAPBodyElement bodyElement = bodyResult[i];                            resEnv.addBodyElement(bodyElement);                        }                    }                    return;                // Element [] / Element []                case OperationDesc.MSG_METHOD_ELEMENTARRAY:                    Element [] elements = new Element [bodies.size()];                    for (int i = 0; i < elements.length; i++) {                        SOAPBodyElement body = (SOAPBodyElement)bodies.get(i);                        elements[i] = body.getAsDOM();                    }                    argObjects[0] = elements;                    Element[] elemResult =                            (Element[]) method.invoke( obj, argObjects );                    if (elemResult != null) {                        for ( int i = 0 ; i < elemResult.length ; i++ ) {                            if(elemResult[i] != null)                                resEnv.addBodyElement(                                        new SOAPBodyElement(elemResult[i]));                        }                    }                    return;                // Element [] / Element []                case OperationDesc.MSG_METHOD_DOCUMENT:                    Document doc = ((SOAPBodyElement)bodies.get(0)).getAsDocument();                    argObjects[0] = doc;                    Document resultDoc =                            (Document) method.invoke( obj, argObjects );                    if (resultDoc != null) {                        resEnv.addBodyElement(new SOAPBodyElement(                                resultDoc.getDocumentElement()));                    }                    return;            }        } else {            Object argObjects[] = new Object [2];            // SOAPEnvelope / SOAPEnvelope            argObjects[0] = reqEnv;            argObjects[1] = resEnv;            method.invoke(obj, argObjects);            return;        }        // SHOULD NEVER GET HERE...        throw new AxisFault(Messages.getMessage("badMsgMethodStyle"));    }};

⌨️ 快捷键说明

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