Java Code Examples for com.sun.corba.se.spi.protocol.CorbaMessageMediator#getBroker()

The following examples show how to use com.sun.corba.se.spi.protocol.CorbaMessageMediator#getBroker() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: CorbaClientRequestDispatcherImpl.java    From openjdk-jdk8u with GNU General Public License v2.0 5 votes vote down vote up
protected void addServiceContexts(CorbaMessageMediator messageMediator)
{
    ORB orb = (ORB)messageMediator.getBroker();
    CorbaConnection c = (CorbaConnection) messageMediator.getConnection();
    GIOPVersion giopVersion = messageMediator.getGIOPVersion();

    ServiceContexts contexts = messageMediator.getRequestServiceContexts();

    addCodeSetServiceContext(c, contexts, giopVersion);

    // Add the RMI-IIOP max stream format version
    // service context to every request.  Once we have GIOP 1.3,
    // we could skip it since we now support version 2, but
    // probably safer to always send it.
    contexts.put(MaxStreamFormatVersionServiceContext.singleton);

    // ORBVersion servicecontext needs to be sent
    ORBVersionServiceContext ovsc = new ORBVersionServiceContext(
                    ORBVersionFactory.getORBVersion() ) ;
    contexts.put( ovsc ) ;

    // NOTE : We only want to send the runtime context the first time
    if ((c != null) && !c.isPostInitialContexts()) {
        // Do not do c.setPostInitialContexts() here.
        // If a client interceptor send_request does a ForwardRequest
        // which ends up using the same connection then the service
        // context would not be sent.
        SendingContextServiceContext scsc =
            new SendingContextServiceContext( orb.getFVDCodeBaseIOR() ) ; //d11638
        contexts.put( scsc ) ;
    }
}
 
Example 2
Source File: SpecialMethod.java    From JDKSourceCode1.8 with MIT License 5 votes vote down vote up
public CorbaMessageMediator invoke(java.lang.Object servant,
                                   CorbaMessageMediator request,
                                   byte[] objectId,
                                   ObjectAdapter objectAdapter)
{
    if ((servant == null) || (servant instanceof NullServant)) {
        ORB orb = (ORB)request.getBroker() ;
        ORBUtilSystemException wrapper = ORBUtilSystemException.get( orb,
            CORBALogDomains.OA_INVOCATION ) ;

        return request.getProtocolHandler().createSystemExceptionResponse(
            request, wrapper.badSkeleton(), null);
    }

    String[] ids = objectAdapter.getInterfaces( servant, objectId );
    String clientId =
        ((InputStream)request.getInputObject()).read_string();
    boolean answer = false;
    for(int i = 0; i < ids.length; i++)
        if (ids[i].equals(clientId)) {
            answer = true;
            break;
        }

    CorbaMessageMediator response =
        request.getProtocolHandler().createResponse(request, null);
    ((OutputStream)response.getOutputObject()).write_boolean(answer);
    return response;
}
 
Example 3
Source File: CorbaMessageMediatorImpl.java    From openjdk-jdk8u with GNU General Public License v2.0 5 votes vote down vote up
private void beginRequest(CorbaMessageMediator messageMediator)
{
    ORB orb = (ORB) messageMediator.getBroker();
    if (orb.subcontractDebugFlag) {
        dprint(".handleRequest->:");
    }
    connection.serverRequestProcessingBegins();
}
 
Example 4
Source File: CorbaMessageMediatorImpl.java    From openjdk-jdk8u with GNU General Public License v2.0 5 votes vote down vote up
private void endRequest(CorbaMessageMediator messageMediator)
{
    ORB orb = (ORB) messageMediator.getBroker();
    if (orb.subcontractDebugFlag) {
        dprint(".handleRequest<-: " + opAndId(messageMediator));
    }

    // release NIO ByteBuffers to ByteBufferPool

    try {
        OutputObject outputObj = messageMediator.getOutputObject();
        if (outputObj != null) {
            outputObj.close();
        }
        InputObject inputObj = messageMediator.getInputObject();
        if (inputObj != null) {
            inputObj.close();
        }
    } catch (IOException ex) {
        // Given what close() does, this catch shouldn't ever happen.
        // See CDRInput/OutputObject.close() for more info.
        // It also won't result in a Corba error if an IOException happens.
        if (orb.subcontractDebugFlag) {
            dprint(".endRequest: IOException:" + ex.getMessage(), ex);
        }
    } finally {
        ((CorbaConnection)messageMediator.getConnection()).serverRequestProcessingEnds();
    }
}
 
Example 5
Source File: CorbaMessageMediatorImpl.java    From openjdk-8-source with GNU General Public License v2.0 5 votes vote down vote up
private void endRequest(CorbaMessageMediator messageMediator)
{
    ORB orb = (ORB) messageMediator.getBroker();
    if (orb.subcontractDebugFlag) {
        dprint(".handleRequest<-: " + opAndId(messageMediator));
    }

    // release NIO ByteBuffers to ByteBufferPool

    try {
        OutputObject outputObj = messageMediator.getOutputObject();
        if (outputObj != null) {
            outputObj.close();
        }
        InputObject inputObj = messageMediator.getInputObject();
        if (inputObj != null) {
            inputObj.close();
        }
    } catch (IOException ex) {
        // Given what close() does, this catch shouldn't ever happen.
        // See CDRInput/OutputObject.close() for more info.
        // It also won't result in a Corba error if an IOException happens.
        if (orb.subcontractDebugFlag) {
            dprint(".endRequest: IOException:" + ex.getMessage(), ex);
        }
    } finally {
        ((CorbaConnection)messageMediator.getConnection()).serverRequestProcessingEnds();
    }
}
 
Example 6
Source File: CorbaMessageMediatorImpl.java    From TencentKona-8 with GNU General Public License v2.0 5 votes vote down vote up
private void beginRequest(CorbaMessageMediator messageMediator)
{
    ORB orb = (ORB) messageMediator.getBroker();
    if (orb.subcontractDebugFlag) {
        dprint(".handleRequest->:");
    }
    connection.serverRequestProcessingBegins();
}
 
Example 7
Source File: CorbaClientRequestDispatcherImpl.java    From openjdk-jdk9 with GNU General Public License v2.0 5 votes vote down vote up
protected void addServiceContexts(CorbaMessageMediator messageMediator)
{
    ORB orb = (ORB)messageMediator.getBroker();
    CorbaConnection c = (CorbaConnection) messageMediator.getConnection();
    GIOPVersion giopVersion = messageMediator.getGIOPVersion();

    ServiceContexts contexts = messageMediator.getRequestServiceContexts();

    addCodeSetServiceContext(c, contexts, giopVersion);

    // Add the RMI-IIOP max stream format version
    // service context to every request.  Once we have GIOP 1.3,
    // we could skip it since we now support version 2, but
    // probably safer to always send it.
    contexts.put(MaxStreamFormatVersionServiceContext.singleton);

    // ORBVersion servicecontext needs to be sent
    ORBVersionServiceContext ovsc = new ORBVersionServiceContext(
                    ORBVersionFactory.getORBVersion() ) ;
    contexts.put( ovsc ) ;

    // NOTE : We only want to send the runtime context the first time
    if ((c != null) && !c.isPostInitialContexts()) {
        // Do not do c.setPostInitialContexts() here.
        // If a client interceptor send_request does a ForwardRequest
        // which ends up using the same connection then the service
        // context would not be sent.
        SendingContextServiceContext scsc =
            new SendingContextServiceContext( orb.getFVDCodeBaseIOR() ) ; //d11638
        contexts.put( scsc ) ;
    }
}
 
Example 8
Source File: CorbaMessageMediatorImpl.java    From JDKSourceCode1.8 with MIT License 5 votes vote down vote up
public void handleThrowableDuringServerDispatch(
    CorbaMessageMediator messageMediator,
    Throwable throwable,
    CompletionStatus completionStatus)
{
    if (((ORB)messageMediator.getBroker()).subcontractDebugFlag) {
        dprint(".handleThrowableDuringServerDispatch: "
               + opAndId(messageMediator) + ": "
               + throwable);
    }

    // If we haven't unmarshaled the header, we probably don't
    // have enough information to even send back a reply.

    // REVISIT
    // Cannot do this check.  When target addressing disposition does
    // not match (during header unmarshaling) it throws an exception
    // to be handled here.
    /*
    if (! ((CDRInputObject)messageMediator.getInputObject())
        .unmarshaledHeader()) {
        return;
    }
    */
    handleThrowableDuringServerDispatch(messageMediator,
                                        throwable,
                                        completionStatus,
                                        1);
}
 
Example 9
Source File: SpecialMethod.java    From TencentKona-8 with GNU General Public License v2.0 5 votes vote down vote up
public CorbaMessageMediator invoke(java.lang.Object servant,
                                   CorbaMessageMediator request,
                                   byte[] objectId,
                                   ObjectAdapter objectAdapter)
{
    if ((servant == null) || (servant instanceof NullServant)) {
        ORB orb = (ORB)request.getBroker() ;
        ORBUtilSystemException wrapper = ORBUtilSystemException.get( orb,
            CORBALogDomains.OA_INVOCATION ) ;

        return request.getProtocolHandler().createSystemExceptionResponse(
            request, wrapper.badSkeleton(), null);
    }

    String[] ids = objectAdapter.getInterfaces( servant, objectId );
    String clientId =
        ((InputStream)request.getInputObject()).read_string();
    boolean answer = false;
    for(int i = 0; i < ids.length; i++)
        if (ids[i].equals(clientId)) {
            answer = true;
            break;
        }

    CorbaMessageMediator response =
        request.getProtocolHandler().createResponse(request, null);
    ((OutputStream)response.getOutputObject()).write_boolean(answer);
    return response;
}
 
Example 10
Source File: CorbaMessageMediatorImpl.java    From JDKSourceCode1.8 with MIT License 5 votes vote down vote up
private void endRequest(CorbaMessageMediator messageMediator)
{
    ORB orb = (ORB) messageMediator.getBroker();
    if (orb.subcontractDebugFlag) {
        dprint(".handleRequest<-: " + opAndId(messageMediator));
    }

    // release NIO ByteBuffers to ByteBufferPool

    try {
        OutputObject outputObj = messageMediator.getOutputObject();
        if (outputObj != null) {
            outputObj.close();
        }
        InputObject inputObj = messageMediator.getInputObject();
        if (inputObj != null) {
            inputObj.close();
        }
    } catch (IOException ex) {
        // Given what close() does, this catch shouldn't ever happen.
        // See CDRInput/OutputObject.close() for more info.
        // It also won't result in a Corba error if an IOException happens.
        if (orb.subcontractDebugFlag) {
            dprint(".endRequest: IOException:" + ex.getMessage(), ex);
        }
    } finally {
        ((CorbaConnection)messageMediator.getConnection()).serverRequestProcessingEnds();
    }
}
 
Example 11
Source File: CorbaMessageMediatorImpl.java    From hottub with GNU General Public License v2.0 5 votes vote down vote up
private void beginRequest(CorbaMessageMediator messageMediator)
{
    ORB orb = (ORB) messageMediator.getBroker();
    if (orb.subcontractDebugFlag) {
        dprint(".handleRequest->:");
    }
    connection.serverRequestProcessingBegins();
}
 
Example 12
Source File: CorbaMessageMediatorImpl.java    From jdk8u60 with GNU General Public License v2.0 4 votes vote down vote up
protected CorbaMessageMediator createResponseHelper(
    CorbaMessageMediator messageMediator, ReplyMessage reply, IOR ior)
{
    // REVISIT - these should be invoked from subcontract.
    runServantPostInvoke(messageMediator);
    runInterceptors(messageMediator, reply);
    runRemoveThreadInfo(messageMediator);

    if (((ORB)messageMediator.getBroker()).subcontractDebugFlag) {
        dprint(".createResponseHelper: "
               + opAndId(messageMediator) + ": "
               + reply);
    }

    messageMediator.setReplyHeader(reply);

    OutputObject replyOutputObject;
    // REVISIT = do not use null.
    //
    if (messageMediator.getConnection() == null) {
        replyOutputObject =
            sun.corba.OutputStreamFactory.newCDROutputObject(orb,
                        messageMediator, messageMediator.getReplyHeader(),
                        messageMediator.getStreamFormatVersion(),
                        BufferManagerFactory.GROW);
    } else {
        replyOutputObject = messageMediator.getConnection().getAcceptor()
         .createOutputObject(messageMediator.getBroker(), messageMediator);
    }
    messageMediator.setOutputObject(replyOutputObject);
    messageMediator.getOutputObject().setMessageMediator(messageMediator);

    reply.write((OutputStream) messageMediator.getOutputObject());
    if (reply.getIOR() != null) {
        reply.getIOR().write((OutputStream) messageMediator.getOutputObject());
    }
    // REVISIT - not necessary?
    //messageMediator.this.replyIOR = reply.getIOR();

    // NOTE: The mediator holds onto output object so return value
    // not really necessary.
    return messageMediator;
}
 
Example 13
Source File: CorbaMessageMediatorImpl.java    From TencentKona-8 with GNU General Public License v2.0 4 votes vote down vote up
protected void handleThrowableDuringServerDispatch(
    CorbaMessageMediator messageMediator,
    Throwable throwable,
    CompletionStatus completionStatus,
    int iteration)
{
    if (iteration > 10) {
        if (((ORB)messageMediator.getBroker()).subcontractDebugFlag) {
            dprint(".handleThrowableDuringServerDispatch: "
                   + opAndId(messageMediator)
                   + ": cannot handle: "
                   + throwable);
        }

        // REVISIT - should we close connection?
        RuntimeException rte =
            new RuntimeException("handleThrowableDuringServerDispatch: " +
                                 "cannot create response.");
        rte.initCause(throwable);
        throw rte;
    }

    try {
        if (throwable instanceof ForwardException) {
            ForwardException fex = (ForwardException)throwable ;
            createLocationForward( messageMediator, fex.getIOR(), null ) ;
            return;
        }

        if (throwable instanceof AddressingDispositionException) {
            handleAddressingDisposition(
                messageMediator,
                (AddressingDispositionException)throwable);
            return;
        }

        // Else.

        SystemException sex =
            convertThrowableToSystemException(throwable, completionStatus);

        createSystemExceptionResponse(messageMediator, sex, null);
        return;

    } catch (Throwable throwable2) {

        // User code (e.g., postinvoke, interceptors) may change
        // the exception, so we end up back here.
        // Report the changed exception.

        handleThrowableDuringServerDispatch(messageMediator,
                                            throwable2,
                                            completionStatus,
                                            iteration + 1);
        return;
    }
}
 
Example 14
Source File: CorbaMessageMediatorImpl.java    From hottub with GNU General Public License v2.0 4 votes vote down vote up
protected CorbaMessageMediator createResponseHelper(
    CorbaMessageMediator messageMediator, ReplyMessage reply, IOR ior)
{
    // REVISIT - these should be invoked from subcontract.
    runServantPostInvoke(messageMediator);
    runInterceptors(messageMediator, reply);
    runRemoveThreadInfo(messageMediator);

    if (((ORB)messageMediator.getBroker()).subcontractDebugFlag) {
        dprint(".createResponseHelper: "
               + opAndId(messageMediator) + ": "
               + reply);
    }

    messageMediator.setReplyHeader(reply);

    OutputObject replyOutputObject;
    // REVISIT = do not use null.
    //
    if (messageMediator.getConnection() == null) {
        replyOutputObject =
            sun.corba.OutputStreamFactory.newCDROutputObject(orb,
                        messageMediator, messageMediator.getReplyHeader(),
                        messageMediator.getStreamFormatVersion(),
                        BufferManagerFactory.GROW);
    } else {
        replyOutputObject = messageMediator.getConnection().getAcceptor()
         .createOutputObject(messageMediator.getBroker(), messageMediator);
    }
    messageMediator.setOutputObject(replyOutputObject);
    messageMediator.getOutputObject().setMessageMediator(messageMediator);

    reply.write((OutputStream) messageMediator.getOutputObject());
    if (reply.getIOR() != null) {
        reply.getIOR().write((OutputStream) messageMediator.getOutputObject());
    }
    // REVISIT - not necessary?
    //messageMediator.this.replyIOR = reply.getIOR();

    // NOTE: The mediator holds onto output object so return value
    // not really necessary.
    return messageMediator;
}
 
Example 15
Source File: CorbaMessageMediatorImpl.java    From openjdk-jdk8u with GNU General Public License v2.0 4 votes vote down vote up
protected CorbaMessageMediator createResponseHelper(
    CorbaMessageMediator messageMediator, ReplyMessage reply, IOR ior)
{
    // REVISIT - these should be invoked from subcontract.
    runServantPostInvoke(messageMediator);
    runInterceptors(messageMediator, reply);
    runRemoveThreadInfo(messageMediator);

    if (((ORB)messageMediator.getBroker()).subcontractDebugFlag) {
        dprint(".createResponseHelper: "
               + opAndId(messageMediator) + ": "
               + reply);
    }

    messageMediator.setReplyHeader(reply);

    OutputObject replyOutputObject;
    // REVISIT = do not use null.
    //
    if (messageMediator.getConnection() == null) {
        replyOutputObject =
            sun.corba.OutputStreamFactory.newCDROutputObject(orb,
                        messageMediator, messageMediator.getReplyHeader(),
                        messageMediator.getStreamFormatVersion(),
                        BufferManagerFactory.GROW);
    } else {
        replyOutputObject = messageMediator.getConnection().getAcceptor()
         .createOutputObject(messageMediator.getBroker(), messageMediator);
    }
    messageMediator.setOutputObject(replyOutputObject);
    messageMediator.getOutputObject().setMessageMediator(messageMediator);

    reply.write((OutputStream) messageMediator.getOutputObject());
    if (reply.getIOR() != null) {
        reply.getIOR().write((OutputStream) messageMediator.getOutputObject());
    }
    // REVISIT - not necessary?
    //messageMediator.this.replyIOR = reply.getIOR();

    // NOTE: The mediator holds onto output object so return value
    // not really necessary.
    return messageMediator;
}
 
Example 16
Source File: CorbaMessageMediatorImpl.java    From openjdk-jdk9 with GNU General Public License v2.0 4 votes vote down vote up
public CorbaMessageMediator createSystemExceptionResponse(
    CorbaMessageMediator messageMediator,
    SystemException ex,
    ServiceContexts svc)
{
    if (messageMediator.getConnection() != null) {
        // It is possible that fragments of response have already been
        // sent.  Then an error may occur (e.g. marshaling error like
        // non serializable object).  In that case it is too late
        // to send the exception.  We just return the existing fragmented
        // stream here.  This will cause an incomplete last fragment
        // to be sent.  Then the other side will get a marshaling error
        // when attempting to unmarshal.

        // REVISIT: Impl - make interface method to do the following.
        CorbaMessageMediatorImpl mediator = (CorbaMessageMediatorImpl)
            ((CorbaConnection)messageMediator.getConnection())
            .serverRequestMapGet(messageMediator.getRequestId());

        OutputObject existingOutputObject = null;
        if (mediator != null) {
            existingOutputObject = mediator.getOutputObject();
        }

        // REVISIT: need to think about messageMediator containing correct
        // pointer to output object.
        if (existingOutputObject != null &&
            mediator.sentFragment() &&
            ! mediator.sentFullMessage())
        {
            return mediator;
        }
    }

    // Only do this if interceptors have been initialized on this request
    // and have not completed their lifecycle (otherwise the info stack
    // may be empty or have a different request's entry on top).
    if (messageMediator.executePIInResponseConstructor()) {
        // REVISIT: not necessary in framework now?
        // Inform Portable Interceptors of the SystemException.  This is
        // required to be done here because the ending interception point
        // is called in the when creating the response below
        // but we do not currently write the SystemException into the
        // response until after the ending point is called.
        ((ORB)messageMediator.getBroker()).getPIHandler().setServerPIInfo( ex );
    }

    if (((ORB)messageMediator.getBroker()).subcontractDebugFlag &&
        ex != null)
    {
        dprint(".createSystemExceptionResponse: "
               + opAndId(messageMediator),
               ex);
    }

    ServiceContexts serviceContexts =
        getServiceContextsForReply(messageMediator, svc);

    // NOTE: We MUST add the service context before creating
    // the response since service contexts are written to the
    // stream when the response object is created.

    addExceptionDetailMessage(messageMediator, ex, serviceContexts);

    CorbaMessageMediator response =
        createResponseHelper(messageMediator, serviceContexts, false);

    // NOTE: From here on, it is too late to add more service contexts.
    // They have already been serialized to the stream (and maybe fragments
    // sent).

    ORBUtility.writeSystemException(
        ex, (OutputStream)response.getOutputObject());

    return response;
}
 
Example 17
Source File: CorbaMessageMediatorImpl.java    From openjdk-8-source with GNU General Public License v2.0 4 votes vote down vote up
public CorbaMessageMediator createSystemExceptionResponse(
    CorbaMessageMediator messageMediator,
    SystemException ex,
    ServiceContexts svc)
{
    if (messageMediator.getConnection() != null) {
        // It is possible that fragments of response have already been
        // sent.  Then an error may occur (e.g. marshaling error like
        // non serializable object).  In that case it is too late
        // to send the exception.  We just return the existing fragmented
        // stream here.  This will cause an incomplete last fragment
        // to be sent.  Then the other side will get a marshaling error
        // when attempting to unmarshal.

        // REVISIT: Impl - make interface method to do the following.
        CorbaMessageMediatorImpl mediator = (CorbaMessageMediatorImpl)
            ((CorbaConnection)messageMediator.getConnection())
            .serverRequestMapGet(messageMediator.getRequestId());

        OutputObject existingOutputObject = null;
        if (mediator != null) {
            existingOutputObject = mediator.getOutputObject();
        }

        // REVISIT: need to think about messageMediator containing correct
        // pointer to output object.
        if (existingOutputObject != null &&
            mediator.sentFragment() &&
            ! mediator.sentFullMessage())
        {
            return mediator;
        }
    }

    // Only do this if interceptors have been initialized on this request
    // and have not completed their lifecycle (otherwise the info stack
    // may be empty or have a different request's entry on top).
    if (messageMediator.executePIInResponseConstructor()) {
        // REVISIT: not necessary in framework now?
        // Inform Portable Interceptors of the SystemException.  This is
        // required to be done here because the ending interception point
        // is called in the when creating the response below
        // but we do not currently write the SystemException into the
        // response until after the ending point is called.
        ((ORB)messageMediator.getBroker()).getPIHandler().setServerPIInfo( ex );
    }

    if (((ORB)messageMediator.getBroker()).subcontractDebugFlag &&
        ex != null)
    {
        dprint(".createSystemExceptionResponse: "
               + opAndId(messageMediator),
               ex);
    }

    ServiceContexts serviceContexts =
        getServiceContextsForReply(messageMediator, svc);

    // NOTE: We MUST add the service context before creating
    // the response since service contexts are written to the
    // stream when the response object is created.

    addExceptionDetailMessage(messageMediator, ex, serviceContexts);

    CorbaMessageMediator response =
        createResponseHelper(messageMediator, serviceContexts, false);

    // NOTE: From here on, it is too late to add more service contexts.
    // They have already been serialized to the stream (and maybe fragments
    // sent).

    ORBUtility.writeSystemException(
        ex, (OutputStream)response.getOutputObject());

    return response;
}
 
Example 18
Source File: CorbaMessageMediatorImpl.java    From TencentKona-8 with GNU General Public License v2.0 4 votes vote down vote up
public CorbaMessageMediator createSystemExceptionResponse(
    CorbaMessageMediator messageMediator,
    SystemException ex,
    ServiceContexts svc)
{
    if (messageMediator.getConnection() != null) {
        // It is possible that fragments of response have already been
        // sent.  Then an error may occur (e.g. marshaling error like
        // non serializable object).  In that case it is too late
        // to send the exception.  We just return the existing fragmented
        // stream here.  This will cause an incomplete last fragment
        // to be sent.  Then the other side will get a marshaling error
        // when attempting to unmarshal.

        // REVISIT: Impl - make interface method to do the following.
        CorbaMessageMediatorImpl mediator = (CorbaMessageMediatorImpl)
            ((CorbaConnection)messageMediator.getConnection())
            .serverRequestMapGet(messageMediator.getRequestId());

        OutputObject existingOutputObject = null;
        if (mediator != null) {
            existingOutputObject = mediator.getOutputObject();
        }

        // REVISIT: need to think about messageMediator containing correct
        // pointer to output object.
        if (existingOutputObject != null &&
            mediator.sentFragment() &&
            ! mediator.sentFullMessage())
        {
            return mediator;
        }
    }

    // Only do this if interceptors have been initialized on this request
    // and have not completed their lifecycle (otherwise the info stack
    // may be empty or have a different request's entry on top).
    if (messageMediator.executePIInResponseConstructor()) {
        // REVISIT: not necessary in framework now?
        // Inform Portable Interceptors of the SystemException.  This is
        // required to be done here because the ending interception point
        // is called in the when creating the response below
        // but we do not currently write the SystemException into the
        // response until after the ending point is called.
        ((ORB)messageMediator.getBroker()).getPIHandler().setServerPIInfo( ex );
    }

    if (((ORB)messageMediator.getBroker()).subcontractDebugFlag &&
        ex != null)
    {
        dprint(".createSystemExceptionResponse: "
               + opAndId(messageMediator),
               ex);
    }

    ServiceContexts serviceContexts =
        getServiceContextsForReply(messageMediator, svc);

    // NOTE: We MUST add the service context before creating
    // the response since service contexts are written to the
    // stream when the response object is created.

    addExceptionDetailMessage(messageMediator, ex, serviceContexts);

    CorbaMessageMediator response =
        createResponseHelper(messageMediator, serviceContexts, false);

    // NOTE: From here on, it is too late to add more service contexts.
    // They have already been serialized to the stream (and maybe fragments
    // sent).

    ORBUtility.writeSystemException(
        ex, (OutputStream)response.getOutputObject());

    return response;
}
 
Example 19
Source File: CorbaMessageMediatorImpl.java    From openjdk-jdk8u with GNU General Public License v2.0 4 votes vote down vote up
public CorbaMessageMediator createSystemExceptionResponse(
    CorbaMessageMediator messageMediator,
    SystemException ex,
    ServiceContexts svc)
{
    if (messageMediator.getConnection() != null) {
        // It is possible that fragments of response have already been
        // sent.  Then an error may occur (e.g. marshaling error like
        // non serializable object).  In that case it is too late
        // to send the exception.  We just return the existing fragmented
        // stream here.  This will cause an incomplete last fragment
        // to be sent.  Then the other side will get a marshaling error
        // when attempting to unmarshal.

        // REVISIT: Impl - make interface method to do the following.
        CorbaMessageMediatorImpl mediator = (CorbaMessageMediatorImpl)
            ((CorbaConnection)messageMediator.getConnection())
            .serverRequestMapGet(messageMediator.getRequestId());

        OutputObject existingOutputObject = null;
        if (mediator != null) {
            existingOutputObject = mediator.getOutputObject();
        }

        // REVISIT: need to think about messageMediator containing correct
        // pointer to output object.
        if (existingOutputObject != null &&
            mediator.sentFragment() &&
            ! mediator.sentFullMessage())
        {
            return mediator;
        }
    }

    // Only do this if interceptors have been initialized on this request
    // and have not completed their lifecycle (otherwise the info stack
    // may be empty or have a different request's entry on top).
    if (messageMediator.executePIInResponseConstructor()) {
        // REVISIT: not necessary in framework now?
        // Inform Portable Interceptors of the SystemException.  This is
        // required to be done here because the ending interception point
        // is called in the when creating the response below
        // but we do not currently write the SystemException into the
        // response until after the ending point is called.
        ((ORB)messageMediator.getBroker()).getPIHandler().setServerPIInfo( ex );
    }

    if (((ORB)messageMediator.getBroker()).subcontractDebugFlag &&
        ex != null)
    {
        dprint(".createSystemExceptionResponse: "
               + opAndId(messageMediator),
               ex);
    }

    ServiceContexts serviceContexts =
        getServiceContextsForReply(messageMediator, svc);

    // NOTE: We MUST add the service context before creating
    // the response since service contexts are written to the
    // stream when the response object is created.

    addExceptionDetailMessage(messageMediator, ex, serviceContexts);

    CorbaMessageMediator response =
        createResponseHelper(messageMediator, serviceContexts, false);

    // NOTE: From here on, it is too late to add more service contexts.
    // They have already been serialized to the stream (and maybe fragments
    // sent).

    ORBUtility.writeSystemException(
        ex, (OutputStream)response.getOutputObject());

    return response;
}
 
Example 20
Source File: CorbaClientRequestDispatcherImpl.java    From openjdk-8-source with GNU General Public License v2.0 4 votes vote down vote up
protected void continueOrThrowSystemOrRemarshal(
    CorbaMessageMediator messageMediator, Exception exception)
    throws
        SystemException, RemarshalException
{

    ORB orb = (ORB) messageMediator.getBroker();

    if( exception == null ) {

        // do nothing.

    } else if( exception instanceof RemarshalException ) {

        // REVISIT - unify with PI handling
        orb.getInvocationInfo().setIsRetryInvocation(true);

        // NOTE - We must unregister the waiter NOW for this request
        // since the retry will result in a new request id.  Therefore
        // the old request id would be lost and we would have a memory
        // leak in the responseWaitingRoom.
        unregisterWaiter(orb);

        if (orb.subcontractDebugFlag) {
            dprint(".continueOrThrowSystemOrRemarshal: "
                   + opAndId(messageMediator)
                   + ": throwing Remarshal");
        }

        throw (RemarshalException)exception;

    } else {

        if (orb.subcontractDebugFlag) {
            dprint(".continueOrThrowSystemOrRemarshal: "
                   + opAndId(messageMediator)
                   + ": throwing sex:"
                   + exception);
        }

        throw (SystemException)exception;
    }
}