Search in sources :

Example 6 with CorbaStreamable

use of org.apache.cxf.binding.corba.CorbaStreamable in project cxf by apache.

the class CorbaStreamInInterceptor method prepareArguments.

protected NVList prepareArguments(CorbaMessage corbaMsg, InterfaceInfo info, OperationType opType, QName opQName, CorbaTypeMap typeMap, CorbaDestination destination, ServiceInfo service) {
    BindingInfo bInfo = destination.getBindingInfo();
    EndpointInfo eptInfo = destination.getEndPointInfo();
    BindingOperationInfo bOpInfo = bInfo.getOperation(opQName);
    OperationInfo opInfo = bOpInfo.getOperationInfo();
    Exchange exg = corbaMsg.getExchange();
    exg.put(BindingInfo.class, bInfo);
    exg.put(InterfaceInfo.class, info);
    exg.put(EndpointInfo.class, eptInfo);
    exg.put(EndpointReferenceType.class, destination.getAddress());
    exg.put(ServiceInfo.class, service);
    exg.put(BindingOperationInfo.class, bOpInfo);
    exg.put(OperationInfo.class, opInfo);
    exg.put(MessageInfo.class, opInfo.getInput());
    exg.put(String.class, opQName.getLocalPart());
    exg.setInMessage(corbaMsg);
    corbaMsg.put(MessageInfo.class, opInfo.getInput());
    List<ParamType> paramTypes = opType.getParam();
    CorbaStreamable[] arguments = new CorbaStreamable[paramTypes.size()];
    return prepareDIIArgsList(corbaMsg, bOpInfo, arguments, paramTypes, typeMap, exg.get(ORB.class), service);
}
Also used : BindingOperationInfo(org.apache.cxf.service.model.BindingOperationInfo) OperationInfo(org.apache.cxf.service.model.OperationInfo) Exchange(org.apache.cxf.message.Exchange) EndpointInfo(org.apache.cxf.service.model.EndpointInfo) BindingOperationInfo(org.apache.cxf.service.model.BindingOperationInfo) CorbaStreamable(org.apache.cxf.binding.corba.CorbaStreamable) BindingInfo(org.apache.cxf.service.model.BindingInfo) ParamType(org.apache.cxf.binding.corba.wsdl.ParamType) ORB(org.omg.CORBA.ORB)

Example 7 with CorbaStreamable

use of org.apache.cxf.binding.corba.CorbaStreamable in project cxf by apache.

the class CorbaStreamOutEndingInterceptor method handleOutBoundMessage.

private void handleOutBoundMessage(CorbaMessage message, BindingOperationInfo boi) {
    OperationInfo opInfo = boi.getOperationInfo();
    OperationType opType = boi.getExtensor(OperationType.class);
    List<ParamType> paramTypes = opType.getParam();
    MessageInfo outMsgInfo = opInfo.getOutput();
    String wrapNSUri = null;
    boolean wrap = false;
    if (boi.isUnwrappedCapable()) {
        wrap = true;
        if (outMsgInfo != null) {
            wrapNSUri = getWrappedParamNamespace(outMsgInfo);
            if (!CorbaUtils.isElementFormQualified(service, wrapNSUri)) {
                wrapNSUri = "";
            }
        }
    }
    CorbaStreamWriter writer = (CorbaStreamWriter) message.getContent(XMLStreamWriter.class);
    CorbaObjectHandler[] objs = writer.getCorbaObjects();
    int count = 0;
    int msgIndex = 0;
    ArgType returnParam = opType.getReturn();
    if (returnParam != null) {
        QName retName;
        if (wrap) {
            retName = new QName(wrapNSUri, returnParam.getName());
        } else {
            retName = getMessageParamQName(outMsgInfo, returnParam.getName(), msgIndex);
        }
        QName retIdlType = returnParam.getIdltype();
        CorbaObjectHandler obj = CorbaHandlerUtils.initializeObjectHandler(orb, retName, retIdlType, typeMap, service);
        CorbaStreamable streamable = message.createStreamableObject(obj, retName);
        message.setStreamableReturn(streamable);
        msgIndex++;
    }
    for (Iterator<ParamType> iter = paramTypes.iterator(); iter.hasNext(); ) {
        ParamType param = iter.next();
        QName idlType = param.getIdltype();
        QName paramName;
        CorbaObjectHandler obj = null;
        if (param.getMode().equals(ModeType.OUT)) {
            if (wrap) {
                paramName = new QName(wrapNSUri, param.getName());
            } else {
                paramName = getMessageParamQName(outMsgInfo, param.getName(), msgIndex);
            }
            obj = CorbaHandlerUtils.initializeObjectHandler(orb, paramName, idlType, typeMap, service);
            msgIndex++;
        } else {
            obj = objs[count++];
            paramName = obj.getName();
        }
        CorbaStreamable streamable = message.createStreamableObject(obj, paramName);
        ModeType paramMode = param.getMode();
        if (paramMode.value().equals("in")) {
            streamable.setMode(org.omg.CORBA.ARG_IN.value);
        } else if (paramMode.value().equals("inout")) {
            streamable.setMode(org.omg.CORBA.ARG_INOUT.value);
        }
        // default mode is out
        message.addStreamableArgument(streamable);
    }
}
Also used : BindingOperationInfo(org.apache.cxf.service.model.BindingOperationInfo) OperationInfo(org.apache.cxf.service.model.OperationInfo) ArgType(org.apache.cxf.binding.corba.wsdl.ArgType) CorbaStreamable(org.apache.cxf.binding.corba.CorbaStreamable) QName(javax.xml.namespace.QName) ParamType(org.apache.cxf.binding.corba.wsdl.ParamType) MessageInfo(org.apache.cxf.service.model.MessageInfo) CorbaStreamWriter(org.apache.cxf.binding.corba.runtime.CorbaStreamWriter) XMLStreamWriter(javax.xml.stream.XMLStreamWriter) CorbaObjectHandler(org.apache.cxf.binding.corba.types.CorbaObjectHandler) ModeType(org.apache.cxf.binding.corba.wsdl.ModeType) OperationType(org.apache.cxf.binding.corba.wsdl.OperationType)

Example 8 with CorbaStreamable

use of org.apache.cxf.binding.corba.CorbaStreamable in project cxf by apache.

the class CorbaStreamFaultInInterceptor method handleMessage.

public void handleMessage(Message msg) {
    CorbaMessage message = (CorbaMessage) msg;
    try {
        SystemException sysEx = message.getSystemException();
        if (sysEx != null) {
            message.setContent(Exception.class, sysEx);
            return;
        }
        CorbaStreamable exStreamable = message.getStreamableException();
        if (exStreamable != null) {
            DataReader<XMLStreamReader> reader = getDataReader(message);
            BindingOperationInfo bopInfo = message.getExchange().getBindingOperationInfo();
            OperationInfo opInfo = bopInfo.getOperationInfo();
            ServiceInfo service = message.getExchange().getEndpoint().getEndpointInfo().getService();
            org.omg.CORBA.ORB orb = (org.omg.CORBA.ORB) message.get(CorbaConstants.ORB);
            if (orb == null) {
                orb = message.getExchange().get(org.omg.CORBA.ORB.class);
            }
            QName elName = new QName("", exStreamable.getName());
            FaultInfo fault = getFaultInfo(opInfo, elName);
            CorbaTypeEventProducer faultEventProducer = CorbaHandlerUtils.getTypeEventProducer(exStreamable.getObject(), service, orb);
            CorbaStreamReader streamReader = new CorbaStreamReader(faultEventProducer);
            Object e = reader.read(fault.getMessageParts().get(0), streamReader);
            if (!(e instanceof Exception)) {
                Class<?> exClass = fault.getProperty(Class.class.getName(), Class.class);
                if (exClass != null) {
                    Class<?> beanClass = e.getClass();
                    Constructor<?> constructor = exClass.getConstructor(new Class[] { String.class, beanClass });
                    String repId = (message.getStreamableException()._type().id() != null) ? message.getStreamableException()._type().id() : "";
                    e = constructor.newInstance(new Object[] { repId, e });
                } else {
                    // Get the Fault
                    Fault faultEx = (Fault) message.getContent(Exception.class);
                    if (e instanceof Document) {
                        createFaultDetail((Document) e, fault, faultEx);
                    }
                    e = faultEx;
                }
            }
            message.setContent(Exception.class, e);
        }
    } catch (java.lang.Exception ex) {
        LOG.log(Level.SEVERE, "CORBA unmarshalFault exception", ex);
        throw new CorbaBindingException("CORBA unmarshalFault exception", ex);
    }
}
Also used : BindingOperationInfo(org.apache.cxf.service.model.BindingOperationInfo) OperationInfo(org.apache.cxf.service.model.OperationInfo) CorbaBindingException(org.apache.cxf.binding.corba.CorbaBindingException) BindingOperationInfo(org.apache.cxf.service.model.BindingOperationInfo) FaultInfo(org.apache.cxf.service.model.FaultInfo) XMLStreamReader(javax.xml.stream.XMLStreamReader) Fault(org.apache.cxf.interceptor.Fault) Document(org.w3c.dom.Document) CorbaStreamReader(org.apache.cxf.binding.corba.runtime.CorbaStreamReader) ServiceInfo(org.apache.cxf.service.model.ServiceInfo) SystemException(org.omg.CORBA.SystemException) CorbaTypeEventProducer(org.apache.cxf.binding.corba.types.CorbaTypeEventProducer) CorbaStreamable(org.apache.cxf.binding.corba.CorbaStreamable) CorbaMessage(org.apache.cxf.binding.corba.CorbaMessage) QName(javax.xml.namespace.QName) SystemException(org.omg.CORBA.SystemException) CorbaBindingException(org.apache.cxf.binding.corba.CorbaBindingException)

Example 9 with CorbaStreamable

use of org.apache.cxf.binding.corba.CorbaStreamable in project cxf by apache.

the class CorbaStreamOutEndingInterceptor method handleInBoundMessage.

private void handleInBoundMessage(CorbaMessage message, BindingOperationInfo boi) {
    OperationInfo opInfo = boi.getOperationInfo();
    OperationType opType = boi.getExtensor(OperationType.class);
    List<ParamType> paramTypes = opType.getParam();
    MessageInfo msgInInfo = opInfo.getInput();
    String wrapNSUri = null;
    boolean wrap = false;
    if (boi.isUnwrappedCapable()) {
        wrap = true;
        if (msgInInfo != null) {
            wrapNSUri = getWrappedParamNamespace(msgInInfo);
            if (!CorbaUtils.isElementFormQualified(service, wrapNSUri)) {
                wrapNSUri = "";
            }
        }
    }
    CorbaStreamWriter writer = (CorbaStreamWriter) message.getContent(XMLStreamWriter.class);
    CorbaObjectHandler[] objs = writer.getCorbaObjects();
    int count = 0;
    int msgIndex = 0;
    ArgType returnParam = opType.getReturn();
    if (returnParam != null) {
        CorbaObjectHandler obj = objs[count++];
        QName retName = obj.getName();
        CorbaStreamable streamable = message.createStreamableObject(obj, retName);
        message.setStreamableReturn(streamable);
    }
    for (Iterator<ParamType> iter = paramTypes.iterator(); iter.hasNext(); ) {
        ParamType param = iter.next();
        QName idlType = param.getIdltype();
        QName paramName;
        CorbaObjectHandler obj = null;
        if (param.getMode().equals(ModeType.IN)) {
            if (wrap) {
                paramName = new QName(wrapNSUri, param.getName());
            } else {
                paramName = getMessageParamQName(msgInInfo, param.getName(), msgIndex);
            }
            obj = CorbaHandlerUtils.initializeObjectHandler(orb, paramName, idlType, typeMap, service);
            msgIndex++;
        } else {
            obj = objs[count++];
            paramName = obj.getName();
        }
        CorbaStreamable streamable = message.createStreamableObject(obj, paramName);
        ModeType paramMode = param.getMode();
        if (paramMode.value().equals("in")) {
            streamable.setMode(org.omg.CORBA.ARG_IN.value);
        } else if (paramMode.value().equals("inout")) {
            streamable.setMode(org.omg.CORBA.ARG_INOUT.value);
        } else if (paramMode.value().equals("out")) {
            streamable.setMode(org.omg.CORBA.ARG_OUT.value);
        }
        message.addStreamableArgument(streamable);
    }
}
Also used : BindingOperationInfo(org.apache.cxf.service.model.BindingOperationInfo) OperationInfo(org.apache.cxf.service.model.OperationInfo) ArgType(org.apache.cxf.binding.corba.wsdl.ArgType) CorbaStreamable(org.apache.cxf.binding.corba.CorbaStreamable) QName(javax.xml.namespace.QName) ParamType(org.apache.cxf.binding.corba.wsdl.ParamType) MessageInfo(org.apache.cxf.service.model.MessageInfo) CorbaStreamWriter(org.apache.cxf.binding.corba.runtime.CorbaStreamWriter) XMLStreamWriter(javax.xml.stream.XMLStreamWriter) CorbaObjectHandler(org.apache.cxf.binding.corba.types.CorbaObjectHandler) ModeType(org.apache.cxf.binding.corba.wsdl.ModeType) OperationType(org.apache.cxf.binding.corba.wsdl.OperationType)

Example 10 with CorbaStreamable

use of org.apache.cxf.binding.corba.CorbaStreamable in project cxf by apache.

the class CorbaStreamableTest method testSetStreamableAttributes.

@Test
public void testSetStreamableAttributes() {
    QName objName = new QName("object");
    QName objIdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "boolean", CorbaConstants.NP_WSDL_CORBA);
    TypeCode objTypeCode = orb.get_primitive_tc(TCKind.tk_boolean);
    CorbaPrimitiveHandler obj = new CorbaPrimitiveHandler(objName, objIdlType, objTypeCode, null);
    CorbaStreamable streamable = new CorbaStreamableImpl(obj, objName);
    streamable.setMode(org.omg.CORBA.ARG_IN.value);
    int mode = streamable.getMode();
    assertTrue(mode == org.omg.CORBA.ARG_IN.value);
}
Also used : CorbaPrimitiveHandler(org.apache.cxf.binding.corba.types.CorbaPrimitiveHandler) TypeCode(org.omg.CORBA.TypeCode) CorbaStreamable(org.apache.cxf.binding.corba.CorbaStreamable) QName(javax.xml.namespace.QName) Test(org.junit.Test)

Aggregations

CorbaStreamable (org.apache.cxf.binding.corba.CorbaStreamable)11 QName (javax.xml.namespace.QName)10 CorbaPrimitiveHandler (org.apache.cxf.binding.corba.types.CorbaPrimitiveHandler)5 Test (org.junit.Test)5 TypeCode (org.omg.CORBA.TypeCode)5 CorbaObjectHandler (org.apache.cxf.binding.corba.types.CorbaObjectHandler)4 BindingOperationInfo (org.apache.cxf.service.model.BindingOperationInfo)4 OperationInfo (org.apache.cxf.service.model.OperationInfo)4 ParamType (org.apache.cxf.binding.corba.wsdl.ParamType)3 XMLStreamWriter (javax.xml.stream.XMLStreamWriter)2 CorbaBindingException (org.apache.cxf.binding.corba.CorbaBindingException)2 CorbaFaultStreamWriter (org.apache.cxf.binding.corba.runtime.CorbaFaultStreamWriter)2 CorbaStreamWriter (org.apache.cxf.binding.corba.runtime.CorbaStreamWriter)2 ArgType (org.apache.cxf.binding.corba.wsdl.ArgType)2 ModeType (org.apache.cxf.binding.corba.wsdl.ModeType)2 OperationType (org.apache.cxf.binding.corba.wsdl.OperationType)2 MessageInfo (org.apache.cxf.service.model.MessageInfo)2 MessagePartInfo (org.apache.cxf.service.model.MessagePartInfo)2 InputStream (org.omg.CORBA.portable.InputStream)2 OutputStream (org.omg.CORBA.portable.OutputStream)2