Java Code Examples for com.sun.corba.se.impl.encoding.CodeSetComponentInfo#CodeSetContext

The following examples show how to use com.sun.corba.se.impl.encoding.CodeSetComponentInfo#CodeSetContext . 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: SocketOrChannelConnectionImpl.java    From hottub with GNU General Public License v2.0 6 votes vote down vote up
public CodeSetComponentInfo.CodeSetContext getCodeSetContext() {
    // Needs to be synchronized for the following case when the client
    // doesn't send the code set context twice, and we have two threads
    // in ServerRequestDispatcher processCodeSetContext.
    //
    // Thread A checks to see if there is a context, there is none, so
    //     it calls setCodeSetContext, getting the synch lock.
    // Thread B checks to see if there is a context.  If we didn't synch,
    //     it might decide to outlaw wchar/wstring.
    if (codeSetContext == null) {
        synchronized(this) {
            return codeSetContext;
        }
    }

    return codeSetContext;
}
 
Example 2
Source File: CDRInputObject.java    From jdk8u60 with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Override the default CDR factory behavior to get the
 * negotiated code sets from the connection.
 *
 * These are only called once per message, the first time needed.
 *
 * In the local case, there is no Connection, so use the
 * local code sets.
 */
protected CodeSetConversion.BTCConverter createCharBTCConverter() {
    CodeSetComponentInfo.CodeSetContext codesets = getCodeSets();

    // If the connection doesn't have its negotiated
    // code sets by now, fall back on the defaults defined
    // in CDRInputStream.
    if (codesets == null)
        return super.createCharBTCConverter();

    OSFCodeSetRegistry.Entry charSet
        = OSFCodeSetRegistry.lookupEntry(codesets.getCharCodeSet());

    if (charSet == null)
        throw wrapper.unknownCodeset( charSet ) ;

    return CodeSetConversion.impl().getBTCConverter(charSet, isLittleEndian());
}
 
Example 3
Source File: SocketOrChannelConnectionImpl.java    From hottub with GNU General Public License v2.0 5 votes vote down vote up
public synchronized void setCodeSetContext(CodeSetComponentInfo.CodeSetContext csc) {
    // Double check whether or not we need to do this
    if (codeSetContext == null) {

        if (OSFCodeSetRegistry.lookupEntry(csc.getCharCodeSet()) == null ||
            OSFCodeSetRegistry.lookupEntry(csc.getWCharCodeSet()) == null) {
            // If the client says it's negotiated a code set that
            // isn't a fallback and we never said we support, then
            // it has a bug.
            throw wrapper.badCodesetsFromClient() ;
        }

        codeSetContext = csc;
    }
}
 
Example 4
Source File: SocketOrChannelConnectionImpl.java    From openjdk-8-source with GNU General Public License v2.0 5 votes vote down vote up
public synchronized void setCodeSetContext(CodeSetComponentInfo.CodeSetContext csc) {
    // Double check whether or not we need to do this
    if (codeSetContext == null) {

        if (OSFCodeSetRegistry.lookupEntry(csc.getCharCodeSet()) == null ||
            OSFCodeSetRegistry.lookupEntry(csc.getWCharCodeSet()) == null) {
            // If the client says it's negotiated a code set that
            // isn't a fallback and we never said we support, then
            // it has a bug.
            throw wrapper.badCodesetsFromClient() ;
        }

        codeSetContext = csc;
    }
}
 
Example 5
Source File: CDRInputObject.java    From openjdk-jdk8u with GNU General Public License v2.0 5 votes vote down vote up
protected CodeSetConversion.BTCConverter createWCharBTCConverter() {

        CodeSetComponentInfo.CodeSetContext codesets = getCodeSets();

        // If the connection doesn't have its negotiated
        // code sets by now, we have to throw an exception.
        // See CORBA formal 00-11-03 13.9.2.6.
        if (codesets == null) {
            if (getConnection().isServer())
                throw omgWrapper.noClientWcharCodesetCtx() ;
            else
                throw omgWrapper.noServerWcharCodesetCmp() ;
        }

        OSFCodeSetRegistry.Entry wcharSet
            = OSFCodeSetRegistry.lookupEntry(codesets.getWCharCodeSet());

        if (wcharSet == null)
            throw wrapper.unknownCodeset( wcharSet ) ;

        // For GIOP 1.2 and UTF-16, use big endian if there is no byte
        // order marker.  (See issue 3405b)
        //
        // For GIOP 1.1 and UTF-16, use the byte order the stream if
        // there isn't (and there shouldn't be) a byte order marker.
        //
        // GIOP 1.0 doesn't have wchars.  If we're talking to a legacy ORB,
        // we do what our old ORBs did.
        if (wcharSet == OSFCodeSetRegistry.UTF_16) {
            if (getGIOPVersion().equals(GIOPVersion.V1_2))
                return CodeSetConversion.impl().getBTCConverter(wcharSet, false);
        }

        return CodeSetConversion.impl().getBTCConverter(wcharSet, isLittleEndian());
    }
 
Example 6
Source File: CDROutputObject.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 4 votes vote down vote up
protected CodeSetConversion.CTBConverter createWCharCTBConverter() {

        CodeSetComponentInfo.CodeSetContext codesets = getCodeSets();

        // If the connection doesn't have its negotiated
        // code sets by now, we have to throw an exception.
        // See CORBA formal 00-11-03 13.9.2.6.
        if (codesets == null) {
            if (getConnection().isServer())
                throw omgWrapper.noClientWcharCodesetCtx() ;
            else
                throw omgWrapper.noServerWcharCodesetCmp() ;
        }

        OSFCodeSetRegistry.Entry wcharSet
            = OSFCodeSetRegistry.lookupEntry(codesets.getWCharCodeSet());

        if (wcharSet == null)
            throw wrapper.unknownCodeset( wcharSet ) ;

        boolean useByteOrderMarkers
            = ((ORB)orb()).getORBData().useByteOrderMarkers();

        // With UTF-16:
        //
        // For GIOP 1.2, we can put byte order markers if we want to, and
        // use the default of big endian otherwise.  (See issue 3405b)
        //
        // For GIOP 1.1, we don't use BOMs and use the endianness of
        // the stream.
        if (wcharSet == OSFCodeSetRegistry.UTF_16) {
            if (getGIOPVersion().equals(GIOPVersion.V1_2)) {
                return CodeSetConversion.impl().getCTBConverter(wcharSet,
                                                                false,
                                                                useByteOrderMarkers);
            }

            if (getGIOPVersion().equals(GIOPVersion.V1_1)) {
                return CodeSetConversion.impl().getCTBConverter(wcharSet,
                                                                isLittleEndian(),
                                                                false);
            }
        }

        // In the normal case, let the converter system handle it
        return CodeSetConversion.impl().getCTBConverter(wcharSet,
                                                        isLittleEndian(),
                                                        useByteOrderMarkers);
    }
 
Example 7
Source File: CDROutputObject.java    From TencentKona-8 with GNU General Public License v2.0 4 votes vote down vote up
protected CodeSetConversion.CTBConverter createWCharCTBConverter() {

        CodeSetComponentInfo.CodeSetContext codesets = getCodeSets();

        // If the connection doesn't have its negotiated
        // code sets by now, we have to throw an exception.
        // See CORBA formal 00-11-03 13.9.2.6.
        if (codesets == null) {
            if (getConnection().isServer())
                throw omgWrapper.noClientWcharCodesetCtx() ;
            else
                throw omgWrapper.noServerWcharCodesetCmp() ;
        }

        OSFCodeSetRegistry.Entry wcharSet
            = OSFCodeSetRegistry.lookupEntry(codesets.getWCharCodeSet());

        if (wcharSet == null)
            throw wrapper.unknownCodeset( wcharSet ) ;

        boolean useByteOrderMarkers
            = ((ORB)orb()).getORBData().useByteOrderMarkers();

        // With UTF-16:
        //
        // For GIOP 1.2, we can put byte order markers if we want to, and
        // use the default of big endian otherwise.  (See issue 3405b)
        //
        // For GIOP 1.1, we don't use BOMs and use the endianness of
        // the stream.
        if (wcharSet == OSFCodeSetRegistry.UTF_16) {
            if (getGIOPVersion().equals(GIOPVersion.V1_2)) {
                return CodeSetConversion.impl().getCTBConverter(wcharSet,
                                                                false,
                                                                useByteOrderMarkers);
            }

            if (getGIOPVersion().equals(GIOPVersion.V1_1)) {
                return CodeSetConversion.impl().getCTBConverter(wcharSet,
                                                                isLittleEndian(),
                                                                false);
            }
        }

        // In the normal case, let the converter system handle it
        return CodeSetConversion.impl().getCTBConverter(wcharSet,
                                                        isLittleEndian(),
                                                        useByteOrderMarkers);
    }
 
Example 8
Source File: CDROutputObject.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 4 votes vote down vote up
private CodeSetComponentInfo.CodeSetContext getCodeSets() {
    if (getConnection() == null)
        return CodeSetComponentInfo.LOCAL_CODE_SETS;
    else
        return getConnection().getCodeSetContext();
}
 
Example 9
Source File: CDRInputObject.java    From openjdk-8-source with GNU General Public License v2.0 4 votes vote down vote up
private CodeSetComponentInfo.CodeSetContext getCodeSets() {
    if (getConnection() == null)
        return CodeSetComponentInfo.LOCAL_CODE_SETS;
    else
        return getConnection().getCodeSetContext();
}
 
Example 10
Source File: CorbaClientRequestDispatcherImpl.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 4 votes vote down vote up
protected void performCodeSetNegotiation(CorbaMessageMediator messageMediator)
{
    CorbaConnection conn =
        (CorbaConnection) messageMediator.getConnection();
    IOR ior =
        ((CorbaContactInfo)messageMediator.getContactInfo())
        .getEffectiveTargetIOR();
    GIOPVersion giopVersion = messageMediator.getGIOPVersion();

    // XXX This seems to be a broken double checked locking idiom: FIX IT!

    // conn.getCodeSetContext() is null when no other requests have
    // been made on this connection to trigger code set negotation.
    if (conn != null &&
        conn.getCodeSetContext() == null &&
        !giopVersion.equals(GIOPVersion.V1_0)) {

        synchronized(conn) {
            // Double checking.  Don't let any other
            // threads use this connection until the
            // code sets are straight.
            if (conn.getCodeSetContext() != null)
                return;

            // This only looks at the first code set component.  If
            // there can be multiple locations with multiple code sets,
            // this requires more work.
            IIOPProfileTemplate temp =
                (IIOPProfileTemplate)ior.getProfile().
                getTaggedProfileTemplate();
            Iterator iter = temp.iteratorById(TAG_CODE_SETS.value);
            if (!iter.hasNext()) {
                // Didn't have a code set component.  The default will
                // be to use ISO8859-1 for char data and throw an
                // exception if wchar data is used.
                return;
            }

            // Get the native and conversion code sets the
            // server specified in its IOR
            CodeSetComponentInfo serverCodeSets
                = ((CodeSetsComponent)iter.next()).getCodeSetComponentInfo();

            // Perform the negotiation between this ORB's code sets and
            // the ones from the IOR
            CodeSetComponentInfo.CodeSetContext result
                = CodeSetConversion.impl().negotiate(
                      conn.getBroker().getORBData().getCodeSetComponentInfo(),
                      serverCodeSets);

            conn.setCodeSetContext(result);
        }
    }
}
 
Example 11
Source File: CorbaClientRequestDispatcherImpl.java    From hottub with GNU General Public License v2.0 4 votes vote down vote up
protected void addCodeSetServiceContext(CorbaConnection conn,
                                      ServiceContexts ctxs,
                                      GIOPVersion giopVersion) {

    // REVISIT.  OMG issue 3318 concerning sending the code set
    // service context more than once was deemed too much for the
    // RTF.  Here's our strategy for the moment:
    //
    // Send it on every request (necessary in cases of fragmentation
    // with multithreaded clients or when the first thing on a
    // connection is a LocateRequest).  Provide an ORB property
    // to disable multiple sends.
    //
    // Note that the connection is null in the local case and no
    // service context is included.  We use the ORB provided
    // encapsulation streams.
    //
    // Also, there will be no negotiation or service context
    // in GIOP 1.0.  ISO8859-1 is used for char/string, and
    // wchar/wstring are illegal.
    //
    if (giopVersion.equals(GIOPVersion.V1_0) || conn == null)
        return;

    CodeSetComponentInfo.CodeSetContext codeSetCtx = null;

    if (conn.getBroker().getORBData().alwaysSendCodeSetServiceContext() ||
        !conn.isPostInitialContexts()) {

        // Get the negotiated code sets (if any) out of the connection
        codeSetCtx = conn.getCodeSetContext();
    }

    // Either we shouldn't send the code set service context, or
    // for some reason, the connection doesn't have its code sets.
    // Perhaps the server didn't include them in the IOR.  Uses
    // ISO8859-1 for char and makes wchar/wstring illegal.
    if (codeSetCtx == null)
        return;

    CodeSetServiceContext cssc = new CodeSetServiceContext(codeSetCtx);
    ctxs.put(cssc);
}
 
Example 12
Source File: CorbaClientRequestDispatcherImpl.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 4 votes vote down vote up
protected void addCodeSetServiceContext(CorbaConnection conn,
                                      ServiceContexts ctxs,
                                      GIOPVersion giopVersion) {

    // REVISIT.  OMG issue 3318 concerning sending the code set
    // service context more than once was deemed too much for the
    // RTF.  Here's our strategy for the moment:
    //
    // Send it on every request (necessary in cases of fragmentation
    // with multithreaded clients or when the first thing on a
    // connection is a LocateRequest).  Provide an ORB property
    // to disable multiple sends.
    //
    // Note that the connection is null in the local case and no
    // service context is included.  We use the ORB provided
    // encapsulation streams.
    //
    // Also, there will be no negotiation or service context
    // in GIOP 1.0.  ISO8859-1 is used for char/string, and
    // wchar/wstring are illegal.
    //
    if (giopVersion.equals(GIOPVersion.V1_0) || conn == null)
        return;

    CodeSetComponentInfo.CodeSetContext codeSetCtx = null;

    if (conn.getBroker().getORBData().alwaysSendCodeSetServiceContext() ||
        !conn.isPostInitialContexts()) {

        // Get the negotiated code sets (if any) out of the connection
        codeSetCtx = conn.getCodeSetContext();
    }

    // Either we shouldn't send the code set service context, or
    // for some reason, the connection doesn't have its code sets.
    // Perhaps the server didn't include them in the IOR.  Uses
    // ISO8859-1 for char and makes wchar/wstring illegal.
    if (codeSetCtx == null)
        return;

    CodeSetServiceContext cssc = new CodeSetServiceContext(codeSetCtx);
    ctxs.put(cssc);
}
 
Example 13
Source File: CDRInputObject.java    From openjdk-jdk9 with GNU General Public License v2.0 4 votes vote down vote up
private CodeSetComponentInfo.CodeSetContext getCodeSets() {
    if (getConnection() == null)
        return CodeSetComponentInfo.LOCAL_CODE_SETS;
    else
        return getConnection().getCodeSetContext();
}
 
Example 14
Source File: CodeSetServiceContext.java    From openjdk-8 with GNU General Public License v2.0 4 votes vote down vote up
public CodeSetServiceContext( CodeSetComponentInfo.CodeSetContext csc )
{
    this.csc = csc ;
}
 
Example 15
Source File: CorbaClientRequestDispatcherImpl.java    From jdk1.8-source-analysis with Apache License 2.0 4 votes vote down vote up
protected void performCodeSetNegotiation(CorbaMessageMediator messageMediator)
{
    CorbaConnection conn =
        (CorbaConnection) messageMediator.getConnection();
    IOR ior =
        ((CorbaContactInfo)messageMediator.getContactInfo())
        .getEffectiveTargetIOR();
    GIOPVersion giopVersion = messageMediator.getGIOPVersion();

    // XXX This seems to be a broken double checked locking idiom: FIX IT!

    // conn.getCodeSetContext() is null when no other requests have
    // been made on this connection to trigger code set negotation.
    if (conn != null &&
        conn.getCodeSetContext() == null &&
        !giopVersion.equals(GIOPVersion.V1_0)) {

        synchronized(conn) {
            // Double checking.  Don't let any other
            // threads use this connection until the
            // code sets are straight.
            if (conn.getCodeSetContext() != null)
                return;

            // This only looks at the first code set component.  If
            // there can be multiple locations with multiple code sets,
            // this requires more work.
            IIOPProfileTemplate temp =
                (IIOPProfileTemplate)ior.getProfile().
                getTaggedProfileTemplate();
            Iterator iter = temp.iteratorById(TAG_CODE_SETS.value);
            if (!iter.hasNext()) {
                // Didn't have a code set component.  The default will
                // be to use ISO8859-1 for char data and throw an
                // exception if wchar data is used.
                return;
            }

            // Get the native and conversion code sets the
            // server specified in its IOR
            CodeSetComponentInfo serverCodeSets
                = ((CodeSetsComponent)iter.next()).getCodeSetComponentInfo();

            // Perform the negotiation between this ORB's code sets and
            // the ones from the IOR
            CodeSetComponentInfo.CodeSetContext result
                = CodeSetConversion.impl().negotiate(
                      conn.getBroker().getORBData().getCodeSetComponentInfo(),
                      serverCodeSets);

            conn.setCodeSetContext(result);
        }
    }
}
 
Example 16
Source File: CDROutputObject.java    From openjdk-8 with GNU General Public License v2.0 4 votes vote down vote up
protected CodeSetConversion.CTBConverter createWCharCTBConverter() {

        CodeSetComponentInfo.CodeSetContext codesets = getCodeSets();

        // If the connection doesn't have its negotiated
        // code sets by now, we have to throw an exception.
        // See CORBA formal 00-11-03 13.9.2.6.
        if (codesets == null) {
            if (getConnection().isServer())
                throw omgWrapper.noClientWcharCodesetCtx() ;
            else
                throw omgWrapper.noServerWcharCodesetCmp() ;
        }

        OSFCodeSetRegistry.Entry wcharSet
            = OSFCodeSetRegistry.lookupEntry(codesets.getWCharCodeSet());

        if (wcharSet == null)
            throw wrapper.unknownCodeset( wcharSet ) ;

        boolean useByteOrderMarkers
            = ((ORB)orb()).getORBData().useByteOrderMarkers();

        // With UTF-16:
        //
        // For GIOP 1.2, we can put byte order markers if we want to, and
        // use the default of big endian otherwise.  (See issue 3405b)
        //
        // For GIOP 1.1, we don't use BOMs and use the endianness of
        // the stream.
        if (wcharSet == OSFCodeSetRegistry.UTF_16) {
            if (getGIOPVersion().equals(GIOPVersion.V1_2)) {
                return CodeSetConversion.impl().getCTBConverter(wcharSet,
                                                                false,
                                                                useByteOrderMarkers);
            }

            if (getGIOPVersion().equals(GIOPVersion.V1_1)) {
                return CodeSetConversion.impl().getCTBConverter(wcharSet,
                                                                isLittleEndian(),
                                                                false);
            }
        }

        // In the normal case, let the converter system handle it
        return CodeSetConversion.impl().getCTBConverter(wcharSet,
                                                        isLittleEndian(),
                                                        useByteOrderMarkers);
    }
 
Example 17
Source File: CorbaConnection.java    From openjdk-8-source with GNU General Public License v2.0 votes vote down vote up
public CodeSetComponentInfo.CodeSetContext getCodeSetContext(); 
Example 18
Source File: CorbaConnection.java    From hottub with GNU General Public License v2.0 votes vote down vote up
public CodeSetComponentInfo.CodeSetContext getCodeSetContext(); 
Example 19
Source File: CorbaConnection.java    From openjdk-jdk8u with GNU General Public License v2.0 votes vote down vote up
public void setCodeSetContext(CodeSetComponentInfo.CodeSetContext csc); 
Example 20
Source File: CorbaConnection.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 votes vote down vote up
public CodeSetComponentInfo.CodeSetContext getCodeSetContext();