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;
}
}