question

Upvotes
Accepted
3 0 1 0

PostMsg has not have container type of RSSL_DT_MSG Error when contributing using RFA to a TREP TRCC service


Using RFA Java.

Here is an except from the code;

----

ConsumerEncoder requestEncoder = new ConsumerEncoder();

OMMEncoder _postOMMEncoder = requestEncoder.pool.acquireEncoder();
OMMMsg _postOMMMsg = requestEncoder.pool.acquireMsg();

----

_postOMMMsg.setMsgModelType(RDMMsgTypes.MARKET_PRICE);
_postOMMMsg.setMsgType(OMMMsg.MsgType.POST);
_postOMMMsg.setId(ID_COUNTER.incrementAndGet());
_postOMMMsg.setSeqNum(SEQ_NUMBER_COUNTER.incrementAndGet());
_postOMMMsg.setIndicationFlags(OMMMsg.Indication.POST_INIT | OMMMsg.Indication.POST_COMPLETE | OMMMsg.Indication.NEED_ACK);
_postOMMMsg.setAttribInfo(module, ric, RDMInstrument.NameType.RIC);
_postOMMEncoder.initialize(OMMTypes.MSG, 10000);
_postOMMEncoder.encodeMsgInit(_postOMMMsg, OMMTypes.NO_DATA, OMMTypes.FIELD_LIST);

----

Here we populate fields and value, for example

FidDef fiddef = dictionary.getFidDef("FIELD");

_postOMMEncoder.encodeFieldEntryInit(fid, fiddef.getOMMType());
_postOMMEncoder.encodeString("VALUE", fiddef.getOMMType());

----

Handle handle = getRDMLoginHandle();
OMMMsg sendMessage = (OMMMsg) _postOMMEncoder.getEncodedObject();
int submitStatus = submitMsg(handle, sendMessage, null);

requestEncoder.pool.releaseMsg(_postOMMMsg);
requestEncoder.pool.releaseEncoder(_postOMMEncoder);

----


Message Sent:

Msg Type: MsgType.POST
Msg Model Type: MARKET_PRICE
Indication Flags: POST_INIT | POST_COMPLETE | NEED_ACK
Hint Flags: HAS_ATTRIB_INFO | HAS_SEQ_NUM | HAS_ID
SeqNum: 1
Id: 1
Publisher Address: 0x0
Publisher Id: 0
AttribInfo
ServiceName: TRCC
Name: FABTEST123=FABU
NameType: 1 (RIC)
Payload: 8 bytes
FIELD_LIST
FIELD_ENTRY 393/PRIMACT_1: 0.85


Error Received;

State: UNSPECIFIED, NO_CHANGE, NACK_DENIED_BY_SRC, "PostMsg has not have container type of RSSL_DT_MSG"


treprfarfa-api
icon clock
10 |1500

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

Upvotes
Accepted
20.3k 73 10 20

Hi @chigozirim.kawa1

We have been working on this offline so I just wanted to confirm the changes required to resolve this issue - for the benefit of others.

The code the client was using was originally for posting to an ATS and therefore a few changes had to be made in order to work with TRCC

  • The nested payload message contained inside the outer Post Msg was changed from a Refresh Msg to an Update Msg
  • The X_RIC_NAME field required for ATS was removed
  • The RIC code for the instrument was added to an AttribInfo for the nested Update message (as well as the outer Post Msg)
  • The Sequence number used with ATS had to be removed for TRCC


icon clock
10 |1500

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

Upvote
20.3k 73 10 20

Hi @chigozirim.kawa1

It would appear the developer is only encoding a FieldList into the PostMsg.

For TRCC my understanding is that you need to encode a nested msg i.e. a Refresh, Update or Status Msg in the outer PostMsg .

If you refer to the RFA Java example in the Examples\com\reuters\rfa\example\omm\postingConsumer folder of the RFA Java SDK - you will note that it can operate different modes - based on the payload type specified in the config.

If you specify update_msg, refresh_msg or status_msg in the config, then in the

PostItemManager.doPost() method it calls the createPayloadOMMMsg() method and then encodes the resultant message as the payload for the outer PostMsg.


icon clock
10 |1500

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

Click below to post an Idea Post Idea