@Override
        public void write(VariableMessageImpl obj, javolution.xml.XMLFormat.OutputElement xml)
            throws XMLStreamException {

          xml.add(obj.getElementaryMessageID(), ELEMENTARY_MESSAGE_ID, Integer.class);

          for (VariablePart vp : obj.getVariableParts()) {
            xml.add((VariablePartImpl) vp, VARIABLE_PART, VariablePartImpl.class);
          }
        }
        @Override
        public void read(
            javolution.xml.XMLFormat.InputElement xml, VariableMessageImpl variableMessage)
            throws XMLStreamException {

          variableMessage.elementaryMessageID = xml.get(ELEMENTARY_MESSAGE_ID, Integer.class);
          variableMessage.variableParts = new ArrayList<VariablePart>();
          while (xml.hasNext()) {
            VariablePartImpl vp = xml.get("variablePart", VariablePartImpl.class);
            variableMessage.variableParts.add(vp);
          }
        }
  @Test(groups = {"functional.encode", "circuitSwitchedCall.primitive"})
  public void testEncode() throws Exception {

    ArrayList<VariablePart> variableParts = new ArrayList<VariablePart>();
    VariablePartImpl vp = new VariablePartImpl(111);
    variableParts.add(vp);
    VariablePartTimeImpl time = new VariablePartTimeImpl(23, 59);
    vp = new VariablePartImpl(time);
    variableParts.add(vp);

    VariableMessageImpl elem = new VariableMessageImpl(800, variableParts);
    AsnOutputStream aos = new AsnOutputStream();
    elem.encodeAll(aos);
    assertTrue(Arrays.equals(aos.toByteArray(), this.getData1()));

    // int elementaryMessageID, ArrayList<VariablePart> variableParts
  }
  @Test(groups = {"functional.decode", "circuitSwitchedCall.primitive"})
  public void testDecode() throws Exception {

    byte[] data = this.getData1();
    AsnInputStream ais = new AsnInputStream(data);
    VariableMessageImpl elem = new VariableMessageImpl();
    int tag = ais.readTag();
    assertEquals(tag, Tag.SEQUENCE);
    elem.decodeAll(ais);
    assertEquals(elem.getElementaryMessageID(), 800);
    assertEquals(elem.getVariableParts().size(), 2);
    assertEquals((int) elem.getVariableParts().get(0).getInteger(), 111);
    assertEquals((int) elem.getVariableParts().get(1).getTime().getHour(), 23);
    assertEquals((int) elem.getVariableParts().get(1).getTime().getMinute(), 59);
  }