Search in sources :

Example 1 with SOAPHeaderElement

use of org.apache.axis.message.SOAPHeaderElement in project Lucee by lucee.

the class AxisUtil method addSOAPResponseHeader.

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);
}
Also used : AxisFault(org.apache.axis.AxisFault) SOAPHeaderElement(org.apache.axis.message.SOAPHeaderElement) MessageContext(org.apache.axis.MessageContext) SOAPEnvelope(org.apache.axis.message.SOAPEnvelope)

Example 2 with SOAPHeaderElement

use of org.apache.axis.message.SOAPHeaderElement in project Lucee by lucee.

the class AxisUtil method getSOAPRequestHeader.

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);
}
Also used : AxisFault(org.apache.axis.AxisFault) SOAPHeaderElement(org.apache.axis.message.SOAPHeaderElement) MessageContext(org.apache.axis.MessageContext) SOAPEnvelope(org.apache.axis.message.SOAPEnvelope)

Example 3 with SOAPHeaderElement

use of org.apache.axis.message.SOAPHeaderElement in project Lucee by lucee.

the class Axis1Client method _call.

private Object _call(PageContext pc, Config secondChanceConfig, String methodName, Struct namedArguments, Object[] arguments) throws PageException, ServiceException, RemoteException {
    ApplicationContextSupport acs = (ApplicationContextSupport) pc.getApplicationContext();
    javax.wsdl.Service service = getWSDLService();
    Service axisService = new Service(parser, service.getQName());
    axisService.setMaintainSession(acs.getWSMaintainSession());
    TypeMappingUtil.registerDefaults(axisService.getTypeMappingRegistry());
    Port port = WSUtil.getSoapPort(service);
    Binding binding = port.getBinding();
    SymbolTable symbolTable = parser.getSymbolTable();
    BindingEntry bEntry = symbolTable.getBindingEntry(binding.getQName());
    // get matching operation/method
    Iterator<Entry<Operation, Parameters>> itr = bEntry.getParameters().entrySet().iterator();
    Operation operation = null;
    Entry<Operation, Parameters> e;
    Parameters parameters = null;
    while (itr.hasNext()) {
        e = itr.next();
        if (e.getKey().getName().equalsIgnoreCase(methodName)) {
            operation = e.getKey();
            parameters = e.getValue();
            break;
        }
    }
    // no operation found!
    if (operation == null || parameters == null) {
        // get array of existing methods
        Set<Operation> set = bEntry.getParameters().keySet();
        Iterator<Operation> it = set.iterator();
        Collection.Key[] keys = new Collection.Key[set.size()];
        int index = 0;
        while (it.hasNext()) {
            keys[index++] = KeyImpl.init(it.next().getName());
        }
        throw new RPCException(ExceptionUtil.similarKeyMessage(keys, methodName, "method/operation", "methods/operations", null, true) + " Webservice: " + wsdlUrl);
    }
    org.apache.axis.client.Call call = (Call) axisService.createCall(QName.valueOf(port.getName()), QName.valueOf(operation.getName()));
    if (!StringUtil.isEmpty(username, true)) {
        call.setUsername(username);
        call.setPassword(password);
    }
    org.apache.axis.encoding.TypeMapping tm = call.getTypeMapping();
    Vector<String> inNames = new Vector<String>();
    Vector<Parameter> inTypes = new Vector<Parameter>();
    Vector<String> outNames = new Vector<String>();
    Vector<Parameter> outTypes = new Vector<Parameter>();
    Parameter p = null;
    for (int j = 0; j < parameters.list.size(); j++) {
        p = (Parameter) parameters.list.get(j);
        map(pc, symbolTable, secondChanceConfig, tm, p.getType());
        switch(p.getMode()) {
            case Parameter.IN:
                inNames.add(p.getQName().getLocalPart());
                inTypes.add(p);
                break;
            case Parameter.OUT:
                outNames.add(p.getQName().getLocalPart());
                outTypes.add(p);
                break;
            case Parameter.INOUT:
                inNames.add(p.getQName().getLocalPart());
                inTypes.add(p);
                outNames.add(p.getQName().getLocalPart());
                outTypes.add(p);
                break;
        }
    }
    // set output type
    if (parameters.returnParam != null) {
        QName rtnQName = parameters.returnParam.getQName();
        // TypeEntry rtnType = parameters.returnParam.getType();
        map(pc, symbolTable, secondChanceConfig, tm, parameters.returnParam.getType());
        outNames.add(rtnQName.getLocalPart());
        outTypes.add(parameters.returnParam);
    }
    // get timezone
    TimeZone tz;
    if (pc == null)
        tz = ThreadLocalPageContext.getTimeZone(secondChanceConfig);
    else
        tz = ThreadLocalPageContext.getTimeZone(pc);
    // check arguments
    Object[] inputs = new Object[inNames.size()];
    if (arguments != null) {
        if (inNames.size() != arguments.length)
            throw new RPCException("Invalid arguments count for operation " + methodName + " (" + arguments.length + " instead of " + inNames.size() + ")");
        for (int pos = 0; pos < inNames.size(); pos++) {
            p = inTypes.get(pos);
            inputs[pos] = getArgumentData(tm, tz, p, arguments[pos]);
        }
    } else {
        UDFUtil.argumentCollection(namedArguments);
        if (inNames.size() != namedArguments.size())
            throw new RPCException("Invalid arguments count for operation " + methodName + " (" + namedArguments.size() + " instead of " + inNames.size() + ")");
        Object arg;
        for (int pos = 0; pos < inNames.size(); pos++) {
            p = inTypes.get(pos);
            arg = namedArguments.get(KeyImpl.init(p.getName()), null);
            if (arg == null) {
                throw new RPCException("Invalid arguments for operation " + methodName, getErrorDetailForArguments(inNames.toArray(new String[inNames.size()]), CollectionUtil.keysAsString(namedArguments)));
            }
            inputs[pos] = getArgumentData(tm, tz, p, arg);
        }
    }
    Object ret = null;
    // add header
    if (headers != null && !headers.isEmpty()) {
        Iterator<SOAPHeaderElement> it = headers.iterator();
        while (it.hasNext()) {
            call.addHeader(it.next());
        }
    }
    try {
        ret = invoke(call, inputs);
    } catch (AxisFault af) {
        boolean rethrow = true;
        Throwable cause = af.getCause();
        if (cause != null) {
            /*
        		// first check if that missing type is around
        		String[] notFound=new String[]{"could not find deserializer for type","No deserializer for"};
        		int index;
        		if(msg!=null)for(int i=0; i<notFound.length;i++) {
        			if((index=msg.indexOf(notFound[i]))==-1)continue;;
        			
        			String raw=msg.substring(index+notFound[i].length()+1).trim();
        			QName qn = QName.valueOf(raw);
        			print.e(qn.getLocalPart());
        			print.e(qn.getNamespaceURI());
        			Type type = symbolTable.getType(qn);
        			if(type!=null) {
        				map(pc,secondChanceConfig,call.getTypeMapping(),type);
        				ret = invoke(call,inputs);
        				rethrow=false;
        			}
        		}*/
            // get the missing types from the SOAP Body, if possible
            String msg = cause.getMessage();
            // if(StringUtil.indexOfIgnoreCase(msg, "deserializer")!=-1) {
            try {
                InputSource is = new InputSource(new StringReader(call.getResponseMessage().getSOAPPartAsString()));
                Document doc = XMLUtil.parse(is, null, false);
                Element body = XMLUtil.getChildWithName("soapenv:Body", doc.getDocumentElement());
                Vector types = SOAPUtil.getTypes(body, symbolTable);
                map(pc, symbolTable, secondChanceConfig, (org.apache.axis.encoding.TypeMapping) (axisService.getTypeMappingRegistry().getDefaultTypeMapping()), types);
                ret = invoke(call, inputs);
                rethrow = false;
            } catch (Throwable t) {
                ExceptionUtil.rethrowIfNecessary(t);
            }
        // }
        }
        if (rethrow)
            throw af;
    }
    last = call;
    if (outNames.size() <= 1)
        return AxisCaster.toLuceeType(null, ret);
    // getParamData((org.apache.axis.client.Call)call,parameters.returnParam,ret);
    Map outputs = call.getOutputParams();
    Struct sct = new StructImpl();
    for (int pos = 0; pos < outNames.size(); pos++) {
        String name = outNames.get(pos);
        // print.ln(name);
        Object value = outputs.get(name);
        if (value == null && pos == 0) {
            sct.setEL(name, AxisCaster.toLuceeType(null, ret));
        } else {
            sct.setEL(name, AxisCaster.toLuceeType(null, value));
        }
    }
    return sct;
}
Also used : AxisFault(org.apache.axis.AxisFault) InputSource(org.xml.sax.InputSource) Port(javax.wsdl.Port) SOAPHeaderElement(org.apache.axis.message.SOAPHeaderElement) Element(org.w3c.dom.Element) Call(org.apache.axis.client.Call) Operation(javax.wsdl.Operation) Document(org.w3c.dom.Document) Struct(lucee.runtime.type.Struct) BindingEntry(org.apache.axis.wsdl.symbolTable.BindingEntry) Entry(java.util.Map.Entry) SymTabEntry(org.apache.axis.wsdl.symbolTable.SymTabEntry) TypeEntry(org.apache.axis.wsdl.symbolTable.TypeEntry) ServiceEntry(org.apache.axis.wsdl.symbolTable.ServiceEntry) RPCException(lucee.runtime.net.rpc.RPCException) StringReader(java.io.StringReader) Vector(java.util.Vector) Binding(javax.wsdl.Binding) SOAPHeaderElement(org.apache.axis.message.SOAPHeaderElement) ApplicationContextSupport(lucee.runtime.listener.ApplicationContextSupport) Call(org.apache.axis.client.Call) Parameters(org.apache.axis.wsdl.symbolTable.Parameters) QName(javax.xml.namespace.QName) Service(org.apache.axis.client.Service) SymbolTable(org.apache.axis.wsdl.symbolTable.SymbolTable) TimeZone(java.util.TimeZone) StructImpl(lucee.runtime.type.StructImpl) Parameter(org.apache.axis.wsdl.symbolTable.Parameter) TypeMapping(javax.xml.rpc.encoding.TypeMapping) BindingEntry(org.apache.axis.wsdl.symbolTable.BindingEntry) Map(java.util.Map) Key(lucee.runtime.type.Collection.Key)

Example 4 with SOAPHeaderElement

use of org.apache.axis.message.SOAPHeaderElement in project Lucee by lucee.

the class AxisUtil method getSOAPResponseHeader.

public static Object getSOAPResponseHeader(PageContext pc, WSClient 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);
}
Also used : SOAPHeaderElement(org.apache.axis.message.SOAPHeaderElement) MessageContext(org.apache.axis.MessageContext) SOAPEnvelope(org.apache.axis.message.SOAPEnvelope)

Example 5 with SOAPHeaderElement

use of org.apache.axis.message.SOAPHeaderElement in project Lucee by lucee.

the class AxisUtil method addSOAPRequestHeader.

public static void addSOAPRequestHeader(WSClient client, String namespace, String name, Object value, boolean mustUnderstand) throws PageException {
    SOAPHeaderElement header = toSOAPHeaderElement(namespace, name, value);
    header.setMustUnderstand(mustUnderstand);
    client.addHeader(header);
}
Also used : SOAPHeaderElement(org.apache.axis.message.SOAPHeaderElement)

Aggregations

SOAPHeaderElement (org.apache.axis.message.SOAPHeaderElement)5 AxisFault (org.apache.axis.AxisFault)3 MessageContext (org.apache.axis.MessageContext)3 SOAPEnvelope (org.apache.axis.message.SOAPEnvelope)3 StringReader (java.io.StringReader)1 Map (java.util.Map)1 Entry (java.util.Map.Entry)1 TimeZone (java.util.TimeZone)1 Vector (java.util.Vector)1 Binding (javax.wsdl.Binding)1 Operation (javax.wsdl.Operation)1 Port (javax.wsdl.Port)1 QName (javax.xml.namespace.QName)1 TypeMapping (javax.xml.rpc.encoding.TypeMapping)1 ApplicationContextSupport (lucee.runtime.listener.ApplicationContextSupport)1 RPCException (lucee.runtime.net.rpc.RPCException)1 Key (lucee.runtime.type.Collection.Key)1 Struct (lucee.runtime.type.Struct)1 StructImpl (lucee.runtime.type.StructImpl)1 Call (org.apache.axis.client.Call)1