@Override
		public void generateCode(String propertyName, MethodVisitor mv, CodeFlow cf) {
			String descriptor = cf.lastDescriptor();

			if (descriptor == null) {
				cf.loadTarget(mv);
			}
			if (descriptor == null || !messageClassDescriptor.equals(descriptor.substring(1))) {
				mv.visitTypeInsn(CHECKCAST, messageClassDescriptor);
			}

			mv.visitMethodInsn(INVOKEINTERFACE, messageClassDescriptor, "getHeaders",
					"()L" + messageHeadersClassDescriptor + ";", true);

			if (TIMESTAMP.equals(propertyName)) {
				mv.visitMethodInsn(INVOKEVIRTUAL, messageHeadersClassDescriptor, "getTimestamp",
						"()Ljava/lang/Long;", false);
			} else {
				mv.visitLdcInsn(propertyName);
				mv.visitMethodInsn(INVOKEVIRTUAL, messageHeadersClassDescriptor, "get",
						"(Ljava/lang/Object;)Ljava/lang/Object;", false);
			}

			if (typeDescriptor != null) {
				CodeFlow.insertCheckCast(mv, typeDescriptor);
			}

		}
A {@link PropertyAccessor} reading values from a backing {@link Message} used by a
partition key. In a way this is similar than {@link MapAccessor} for header but also
adds 'payload' and 'headers' to be resolved. Having 'payload' or 'headers' keywords
in headers is not possible to access via this accessor.

@author Janne Valkealahti
spring-xd-hadoop/src/main/java/org/springframework/xd/integration/hadoop/expression/MessagePartitionKeyPropertyAccessor.java