question

Upvotes
Accepted
3 0 0 4

RSSL_HTTP Channel type leads to HttpChannelConfig cannot be cast to SocketChannelConfig exception

I'm using EMA 3.0.0.L1 in order to connect to Electron.

I tried to switch client library to RSSL_HTTP channel type (from standard RSSL_SOCKET) and got

an exception from EMA library:

Exception in thread "main" java.lang.ClassCastException: com.thomsonreuters.ema.access.HttpChannelConfig cannot be cast to com.thomsonreuters.ema.access.SocketChannelConfig
    at com.thomsonreuters.ema.access.ChannelCallbackClient.initialize(ChannelCallbackClient.java:596)
    at com.thomsonreuters.ema.access.OmmConsumerImpl.initialize(OmmConsumerImpl.java:194)
    at com.thomsonreuters.ema.access.OmmConsumerImpl.<init>(OmmConsumerImpl.java:91)
    at com.thomsonreuters.ema.access.EmaFactory.createOmmConsumer(EmaFactory.java:158)
    at com.trgr.discorch.electron.ElectronClient.<init>(ElectronClient.java:249)
    at com.trgr.discorch.electron.ElectronClient.getInstance(ElectronClient.java:237)
    at com.trgr.discorch.electron.Application.main(Application.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

According to the code

case 2:
    ...
    connectOptions.tunnelingInfo().tunnelingType("http");
    ...
    connectOptions.unifiedNetworkInfo().interfaceName(((SocketChannelConfig)activeConfig.channelConfig).interfaceName);

we are really trying to cast HttpChannelConfig to SocketChannelConfig.

Example of EmaConfig.xml used in my client:

<ChannelGroup>
    <ChannelList>
        <Channel>
            <Name value="Channel_1"/>
            <!--<ChannelType value="ChannelType::RSSL_SOCKET"/>-->
            <ChannelType value="ChannelType::RSSL_HTTP"/>

            <!-- CompressionType is optional: defaulted to None                                            -->
            <!-- possible values: None, ZLib, LZ4                                                        -->
            <CompressionType value="CompressionType::None"/>
            <GuaranteedOutputBuffers value="5000"/>

            <!-- ConnectionPingTimeout is optional: defaulted to 30000                                    -->
            <ConnectionPingTimeout value="30000"/>
            
            <!-- TcpNodelay is optional: defaulted to 1                                                 -->
            <!-- possible values: 1 (tcp_nodelay option set), 0 (tcp_nodelay not set)                    -->
            <TcpNodelay value="1"/>
            <Host value="localhost"/>
            <Port value="14002"/>
            <XmlTraceToStdout value="1"/>
        </Channel>
    </ChannelGroup>
<ChannelList>
elektronrefinitiv-realtimeelektron-sdkrrtema-apielektron-message-apiexception
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

I have the same issue with emaj3.0.2.all.rrg from Electron Java SDK 1.0.5

Upvotes
Accepted
45.2k 103 43 60

According to the information in the EMA Java configuration guide, EMA Java doesn't support RSSL_HTTP channel type. Currently, it only supports RSSL_SOCKET.


channeltype.png (30.9 KiB)
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
45.2k 103 43 60

I got the same result. However, after commenting that line in EMA code, it works.

case com.thomsonreuters.upa.transport.ConnectionTypes.HTTP:
	{
	... 
	//connectOptions.unifiedNetworkInfo().interfaceName(((SocketChannelConfig)activeConfig.channelConfig).interfaceName);
	...
        break;
	}

The interface will be set again after the switch command.

        connectOptions.unifiedNetworkInfo().interfaceName(activeConfig.channelConfig.interfaceName);
	connectOptions.unifiedNetworkInfo().unicastServiceName("");

However, to make it work, you need to set TcpNodelay to 0.

	<TcpNodelay value="0"/>

In conclusion, this could be a bug in EMA Java so I will raise the issue to development team.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.