Package railo.runtime.net.rpc

Source Code of railo.runtime.net.rpc.AxisUtil

package railo.runtime.net.rpc;

import java.io.StringReader;

import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.client.Call;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.message.SOAPHeaderElement;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;

import railo.runtime.PageContext;
import railo.runtime.net.rpc.client.RPCClient;
import railo.runtime.text.xml.XMLCaster;
import railo.runtime.text.xml.XMLUtil;

public class AxisUtil {

  public static boolean isSOAPRequest() {
    MessageContext context = MessageContext.getCurrentContext();
        return context != null && !context.isClient();
  }
 
  public static Object getSOAPRequestHeader(PageContext pc, String namespace, String name, boolean asXML) throws Exception {
    MessageContext context = MessageContext.getCurrentContext();
        if(context==null || context.isClient()) throw new AxisFault("not inside a Soap Request");
       
        SOAPEnvelope env = context.getRequestMessage().getSOAPEnvelope();
        SOAPHeaderElement header = env.getHeaderByName(namespace, name);
        return toValue(header,asXML);
  }

  public static Object getSOAPResponseHeader(PageContext pc, RPCClient client, String namespace, String name, boolean asXML) throws Exception {
    MessageContext context = getMessageContext(client);
     
    SOAPEnvelope env = context.getResponseMessage().getSOAPEnvelope();
      SOAPHeaderElement header = env.getHeaderByName(namespace, name);
      return toValue(header,asXML);
  }
 
  public static Node getSOAPRequest(RPCClient client) throws Exception {
    MessageContext context=getMessageContext(client);
        SOAPEnvelope env = context.getRequestMessage().getSOAPEnvelope();
        return XMLCaster.toXMLStruct(env.getAsDocument(),true);
    }
 
  public static Node getSOAPResponse(RPCClient client) throws Exception {
    Call call = client.getLastCall();
    if(call==null) throw new AxisFault("web service was not invoked yet");
      SOAPEnvelope env = call.getResponseMessage().getSOAPEnvelope();
    return XMLCaster.toXMLStruct(env.getAsDocument(),true);
    }
 
  public static void addSOAPResponseHeader(String namespace, String name, Object value, boolean mustUnderstand) throws AxisFault {
        MessageContext context = MessageContext.getCurrentContext();
        if(context==null || context.isClient()) throw new AxisFault("not inside a Soap Request");
       
        SOAPEnvelope env = context.getResponseMessage().getSOAPEnvelope();
      SOAPHeaderElement header=toSOAPHeaderElement(namespace,name,value);
        header.setMustUnderstand(mustUnderstand);
        env.addHeader(header);
    }

  public static void addSOAPRequestHeader(RPCClient client, String namespace, String name, Object value, boolean mustUnderstand)  {
      SOAPHeaderElement header=toSOAPHeaderElement(namespace,name,value);
        header.setMustUnderstand(mustUnderstand);
        client.addHeader(header);
    }
 
 
  private static SOAPHeaderElement toSOAPHeaderElement(String namespace, String name, Object value) {
    Element el=XMLCaster.toRawElement(value,null);
        if(el!=null) return new SOAPHeaderElement(el);
        return new SOAPHeaderElement(namespace, name, value);
  }


 
  private static Object toValue(SOAPHeaderElement header, boolean asXML) throws Exception {
    if(header==null) return "";
      if(asXML) {
        String strXML = header.toString();
      InputSource is = new InputSource(new StringReader(strXML.trim()));
      return XMLCaster.toXMLStruct(XMLUtil.parse(is,null,false),true);
        }
       
        Object value=header.getObjectValue();
        if(value == null){
          value = header.getObjectValue(String.class);
        }
        return value;
  }
 

 
  private static MessageContext getMessageContext(RPCClient client) throws AxisFault {
    if(client!=null) {
      Call call = client.getLastCall();
          if(call==null) throw new AxisFault("web service was not invoked yet");
          return call.getMessageContext();
        }
        MessageContext context = MessageContext.getCurrentContext();
        if(context == null) throw new AxisFault("not inside a Soap Request");
        return context;
  }
 
 
}
TOP

Related Classes of railo.runtime.net.rpc.AxisUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.