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>

Best Answer

  • 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.

    image

Answers

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

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

  • 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.