I achived maxlength through ComponentPlugin.
I don't like to extend controls.
Did not yet decided which way is better.

Code:
public class MaxLengthComponentPlugin implements ComponentPlugin<ValueBaseField<?>> {
    int maxLength = -1;
    public MaxLengthComponentPlugin(int maxLength) {
        this.maxLength = maxLength;
    }
    @Override
    public void initPlugin(final ValueBaseField<?> component) {
        if (component.isRendered() && maxLength > 0) {
            getInputEl(component).setAttribute("maxLength", "" + maxLength);
        }
        component.addAttachHandler(new AttachEvent.Handler() {
            @Override
            public void onAttachOrDetach(AttachEvent arg0) {
                if(maxLength > 0) {
                    getInputEl(component).setAttribute("maxLength", "" + maxLength);
                }
            }
        });
    }
    protected XElement getInputEl(ValueBaseField<?> component) {
        return XElement.as(component.getCell().getInputElement(component.getElement()));
    }
}