public void write(Object obj, MessagePartInfo part, Element output) {
    AegisType type = databinding.getType(part);

    if (type == null) {
      throw new Fault(new Message("NO_MESSAGE_FOR_PART", LOG));
    }

    Context context = new Context(databinding.getAegisContext());

    context.setAttachments(attachments);
    type = TypeUtil.getWriteType(databinding.getAegisContext(), obj, type);
    try {
      W3CDOMStreamWriter domWriter = new W3CDOMStreamWriter(output);
      ElementWriter writer = new ElementWriter(domWriter);
      MessageWriter w2 = writer.getElementWriter(part.getConcreteName());
      if (type.isNillable() && type.isWriteOuter() && obj == null) {
        w2.writeXsiNil();
        w2.close();
        return;
      }

      type.writeObject(obj, w2, context);
      w2.close();
    } catch (DatabindingException e) {
      throw new RuntimeException(e);
    }
  }
  public Object read(MessagePartInfo part, XMLStreamReader input) {
    try {
      AegisType type = part.getProperty("org.apache.cxf.aegis.outerType", AegisType.class);
      if (type == null) {
        type = databinding.getType(part);
        return reader.read(input, type);
      } else {
        ArrayType arrayType = (ArrayType) type;
        return reader.readFlatArray(input, arrayType, part.getConcreteName());
      }

    } catch (Exception e) {
      throw new Fault(e);
    }
  }
 public Object read(QName name, XMLStreamReader input, Class typeClass) {
   MessagePartInfo info = databinding.getPartFromClass(typeClass);
   return info == null ? read(input) : read(info, input);
 }
 public XMLStreamDataReader(AegisDatabinding databinding, Bus bus) {
   this.databinding = databinding;
   reader = new AegisXMLStreamDataReader(databinding.getAegisContext());
 }