synchronized protected void processReply()

in yoko-core/src/main/java/org/apache/yoko/orb/OB/GIOPConnection.java [481:589]


    synchronized protected void processReply(GIOPIncomingMessage msg) {
        if ((properties_ & Property.ClientEnabled) == 0) {
            processException(State.Error, new COMM_FAILURE(
                    MinorCodes
                            .describeCommFailure(MinorCodes.MinorWrongMessage),
                    MinorCodes.MinorWrongMessage,
                    CompletionStatus.COMPLETED_MAYBE), false);
            return;
        }

        int reqId;
        org.omg.GIOP.ReplyStatusType_1_2Holder status = new org.omg.GIOP.ReplyStatusType_1_2Holder();
        org.omg.IOP.ServiceContextListHolder scl = new org.omg.IOP.ServiceContextListHolder();

        try {
            reqId = msg.readReplyHeader(status, scl);
        } catch (SystemException ex) {
            processException(State.Error, ex, false);
            return;
        }

        Downcall down = messageQueue_.findAndRemovePending(reqId);
        if (down == null) {
            //
            // Request id is unknown
            //
            processException(State.Error, new COMM_FAILURE(
                    MinorCodes
                            .describeCommFailure(MinorCodes.MinorUnknownReqId)
                            + ": " + reqId, MinorCodes.MinorUnknownReqId,
                    CompletionStatus.COMPLETED_MAYBE), false);
            return;
        }

        down.setReplySCL(scl.value);
        org.apache.yoko.orb.CORBA.InputStream in = msg.input();

        //
        // read in the peer's sendig context runtime object
        //
        assignSendingContextRuntime(in, scl.value);

        orbInstance_.getLogger().debug("Processing reply for reqId=" + reqId + " status=" + status.value.value());

        switch (status.value.value()) {
            case ReplyStatusType_1_2._NO_EXCEPTION:
                down.setNoException(in);
                break;

            case ReplyStatusType_1_2._USER_EXCEPTION:
                down.setUserException(in);
                break;

            case ReplyStatusType_1_2._SYSTEM_EXCEPTION: {
                try {
                    SystemException ex = Util.unmarshalSystemException(in);
                    ex = convertToUnknownExceptionIfAppropriate(ex, in, scl.value);
                    down.setSystemException(ex);
                } catch (SystemException ex) {
                    processException(State.Error, ex, false);
                }

                break;
            }

            case ReplyStatusType_1_2._LOCATION_FORWARD: {
                try {
                    IOR ior = IORHelper.read(in);
                    down.setLocationForward(ior, false);
                } catch (SystemException ex) {
                    processException(State.Error, ex, false);
                }

                break;
            }

            case ReplyStatusType_1_2._LOCATION_FORWARD_PERM: {
                try {
                    IOR ior = IORHelper.read(in);
                    down.setLocationForward(ior, true);
                    break;
                } catch (SystemException ex) {
                    processException(State.Error, ex, false);
                }
            }

            case ReplyStatusType_1_2._NEEDS_ADDRESSING_MODE:
                //
                // TODO: implement
                //
                processException(
                        State.Error,
                        new NO_IMPLEMENT(
                                MinorCodes.describeNoImplement(MinorCodes.MinorNotSupportedByLocalObject),
                                MinorCodes.MinorNotSupportedByLocalObject,
                                CompletionStatus.COMPLETED_NO), false);
                break;

            default:
                processException(
                        State.Error,
                        new COMM_FAILURE(
                                MinorCodes.describeCommFailure(MinorCodes.MinorUnknownReplyMessage),
                                MinorCodes.MinorUnknownReplyMessage,
                                CompletionStatus.COMPLETED_MAYBE),
                        false);
                break;
        }
    }