title: QuickFIX/J Get fields and groups for customized data dictionary
body: <p><strong>How can I get fields and groups using QuickFIX/J for customized data dictionary?</strong></p>
  <p>I receive market data transmitted in customized MarketDataSnapshotFullRefresh (type W) FIX messages. As I understood, I can't use the crack method for this. I'm not quite familiar with Java and QuickFIX/J, but when I use QuickFIX/n and Python, I can define classes for fields and groups like that:</p>
  <pre><code>class CustomField(fix.StringField):
      tag_number = *SomeTagNumber*
  
      def __init__(self, data=None):
          args = (self.tag_number,) if data is None else (self.tag_number, data)
          super(CustomField, self).__init__(*args)
  
      def getValue(self, message: object) -&gt; str:
          try:
              if message.getField(self.tag_number):
                  return message.getField(self.tag_number)
          except fix.FieldNotFound:  
              return None
          else: raise
  
  class CustomGroupField(fix.StringField):
      tag_number = *SomeTagNumber*
  
      def __init__(self, data=None):
          args = (self.tag_number,) if data is None else (self.tag_number, data)
          super(CustomGroupField, self).__init__(*args)
  
      def getValue(self, message: object) -&gt; str:
          try:
              if message.getField(self.tag_number):
                  return message.getField(self.tag_number)
          except fix.FieldNotFound:  
              return None
          else: raise
  
  class XXXGroup(fix.Group):
      def __init__(self):
          order = fix.IntArray(4)
          order[0] = No_XXX_UMD_Entries.tag_number    # This is the NoGroup field
          order[1] = XXX_UMD_Entry_ID.tag_number      # This is the field in the repeating group
          order[2] = CustomGroupField.tag_number
          order[3] = 0
          # fix.Group.__init__(self, order[0], order[1], order)
          args = (order[0], order[1], order)
          super(XXXGroup, self).__init__(*args)
  
      def getValue(self, field: object) -&gt; str:
          try:
             if group.getField(tag_number):
                  return group.getField(tag_number)
          except fix.FieldNotFound:  
              return None
          else: raise
  </code></pre>
  <p>And then I can get value inside the <strong>fromApp(self, message, sessionID)</strong> method like this:</p>
  <pre><code># Get value of the field
  some_custom_field = CustomField().getValue(message)
  
  # Get value in the group
  group = XXXGroup()
      for idx in range(1, no_entries+1):
          message.getGroup(idx,group)
          custom_gr_field = group.getValue(CustomGroupField)
  </code></pre>
  <p>How can I achieve the same logic in Java using QuickFIX/J? Or maybe there is a better way to work with a custom data dictionary in Java? Maybe you can refer to some examples?</p>