Question: I am new to the FIX world. I am writing an application processing FIX messages in Java and for that I am using QuickFIX/J. I have downloaded the DataDictionary from the homepage (<http://quickfixengine.org/>). I am using the version 4.4.

In the XML-file exist groups and components. But a component can contain groups again.

What's the exact difference between them?

Answer: 
From the [FIXWiki for Components](http://fixwiki.org/fixwiki/Category:Component):

> 
> Component blocks are sets of related data fields grouped together and are referenced by the component block name in messages that they are used in. Sometimes they are referred to as "Groups".
> 
> 
> 

Component blocks are practical to be defined, and then reused in different message types. Sometimes a repeating group is just for one particular message and then it is not defined as a Component block. 

View a component block as a reusable definition of fields. Such a component block may or may not contain a repeating group of fields.

For instance take the [Parties component block](http://www.onixs.biz/fix-dictionary/4.4/compBlock_Parties.html) which is used in many different messages types (see "Used In" on that page). Easy to define once and use in many definitions of messages.
Just going to add some information since the accepted answer is missing this information (probably due to the fact that it is about five years old now).

In QuickFIX/J you are actually able to get and set components. So you can for example simply copy the `Instrument` component from one message to another.

```java
    @Test
    public void testComponent() throws Exception {
        final Instrument instrument = new Instrument();
        instrument.set(new Symbol("DELL"));
        instrument.set(new CountryOfIssue("USA"));
        instrument.set(new SecurityType(SecurityType.COMMON_STOCK));

        final quickfix.fix44.NewOrderSingle newOrderSingle = new quickfix.fix44.NewOrderSingle();
        newOrderSingle.set(instrument);

        final quickfix.fix44.ExecutionReport executionReport = new quickfix.fix44.ExecutionReport();
        executionReport.setComponent(newOrderSingle.getInstrument());

        System.out.println("NOS: " + newOrderSingle.toString().replace('\001', '|'));
        System.out.println("ER:  " + executionReport.toString().replace('\001', '|'));
    }

```

Output:

```
NOS: 8=FIX.4.4|9=28|35=D|55=DELL|167=CS|470=USA|10=233|
ER:  8=FIX.4.4|9=28|35=8|55=DELL|167=CS|470=USA|10=221|

```

Maybe this is also possible in the other QuickFIX language variants.