if( se == exception ) {
// exception = null is to maintain symmetry with
// GenericPOAClientSC.
exception = null;
continueOrThrowSystemOrRemarshal(messageMediator,
new RemarshalException());
throw wrapper.statementNotReachable1() ;
} else {
// Otherwise, throw the exception PI wants thrown.
continueOrThrowSystemOrRemarshal(messageMediator,
exception);
throw wrapper.statementNotReachable2() ;
}
}
// No retry, so see if was unknown.
ServiceContexts contexts =
messageMediator.getReplyServiceContexts();
if (contexts != null) {
UEInfoServiceContext usc =
(UEInfoServiceContext)
contexts.get(UEInfoServiceContext.SERVICE_CONTEXT_ID);
if (usc != null) {
Throwable unknown = usc.getUE() ;
UnknownException ue = new UnknownException(unknown);
// Invoke Portable Interceptors with receive_exception:
exception = orb.getPIHandler().invokeClientPIEndingPoint(
ReplyMessage.SYSTEM_EXCEPTION, ue );
continueOrThrowSystemOrRemarshal(messageMediator, exception);
throw wrapper.statementNotReachable3() ;
}
}
// It was not a comm failure nor unknown.
// This is the general case.
// Invoke Portable Interceptors with receive_exception:
exception = orb.getPIHandler().invokeClientPIEndingPoint(
ReplyMessage.SYSTEM_EXCEPTION, se );
continueOrThrowSystemOrRemarshal(messageMediator, exception);
// Note: We should never need to execute this line, but
// we should assert in case exception is null somehow.
throw wrapper.statementNotReachable4() ;
} else if (messageMediator.isUserExceptionReply()) {
if (orb.subcontractDebugFlag) {
dprint(".processResponse: " + opAndId(messageMediator)
+ ": received user exception");
}
getContactInfoListIterator(orb)
.reportSuccess(messageMediator.getContactInfo());
String exceptionRepoId = peekUserExceptionId(inputObject);
Exception newException = null;
if (messageMediator.isDIIRequest()) {
exception = messageMediator.unmarshalDIIUserException(
exceptionRepoId, (InputStream)inputObject);
newException = orb.getPIHandler().invokeClientPIEndingPoint(
ReplyMessage.USER_EXCEPTION, exception );
messageMediator.setDIIException(newException);
} else {
ApplicationException appException =
new ApplicationException(
exceptionRepoId,
(org.omg.CORBA.portable.InputStream)inputObject);
exception = appException;
newException = orb.getPIHandler().invokeClientPIEndingPoint(
ReplyMessage.USER_EXCEPTION, appException );
}
if (newException != exception) {
continueOrThrowSystemOrRemarshal(messageMediator,newException);
}
if (newException instanceof ApplicationException) {
throw (ApplicationException)newException;
}
// For DII:
// This return will be ignored - already unmarshaled above.
return inputObject;
} else if (messageMediator.isLocationForwardReply()) {
if (orb.subcontractDebugFlag) {
dprint(".processResponse: " + opAndId(messageMediator)
+ ": received location forward");
}
// NOTE: Expects iterator to update target IOR
getContactInfoListIterator(orb).reportRedirect(
(CorbaContactInfo)messageMediator.getContactInfo(),
messageMediator.getForwardedIOR());
// Invoke Portable Interceptors with receive_other:
Exception newException = orb.getPIHandler().invokeClientPIEndingPoint(
ReplyMessage.LOCATION_FORWARD, null );
if( !(newException instanceof RemarshalException) ) {
exception = newException;
}
// If PI did not change exception, throw Remarshal, else
// throw the exception PI wants thrown.
// KMC: GenericPOAClientSC did not check exception != null
if( exception != null ) {
continueOrThrowSystemOrRemarshal(messageMediator, exception);
}
continueOrThrowSystemOrRemarshal(messageMediator,
new RemarshalException());
throw wrapper.statementNotReachable5() ;
} else if (messageMediator.isDifferentAddrDispositionRequestedReply()){
if (orb.subcontractDebugFlag) {
dprint(".processResponse: " + opAndId(messageMediator)
+ ": received different addressing dispostion request");
}
// Set the desired target addressing disposition.
getContactInfoListIterator(orb).reportAddrDispositionRetry(
(CorbaContactInfo)messageMediator.getContactInfo(),
messageMediator.getAddrDispositionReply());
// Invoke Portable Interceptors with receive_other:
Exception newException = orb.getPIHandler().invokeClientPIEndingPoint(
ReplyMessage.NEEDS_ADDRESSING_MODE, null);
// For consistency with corresponding code in GenericPOAClientSC:
if( !(newException instanceof RemarshalException) ) {
exception = newException;
}
// If PI did not change exception, throw Remarshal, else
// throw the exception PI wants thrown.
// KMC: GenericPOAClientSC did not include exception != null check
if( exception != null ) {
continueOrThrowSystemOrRemarshal(messageMediator, exception);
}
continueOrThrowSystemOrRemarshal(messageMediator,
new RemarshalException());
throw wrapper.statementNotReachable6() ;
} else /* normal response */ {
if (orb.subcontractDebugFlag) {
dprint(".processResponse: " + opAndId(messageMediator)