@Override
  public void addOperationOutputExtension(TypedXmlWriter output, JavaMethod method) {
    if (!enabled) return;

    Action a = method.getSEIMethod().getAnnotation(Action.class);
    if (a != null && !a.output().equals("")) {
      addAttribute(output, a.output());
    }
  }
  @Override
  public void addOperationFaultExtension(
      TypedXmlWriter fault, JavaMethod method, CheckedException ce) {
    if (!enabled) return;

    Action a = method.getSEIMethod().getAnnotation(Action.class);
    Class[] exs = method.getSEIMethod().getExceptionTypes();

    if (exs == null) return;

    if (a != null && a.fault() != null) {
      for (FaultAction fa : a.fault()) {
        if (fa.className().getName().equals(ce.getExceptionClass().getName())) {
          if (fa.value().equals("")) return;

          addAttribute(fault, fa.value());
          return;
        }
      }
    }
  }
  @Override
  public void addOperationInputExtension(TypedXmlWriter input, JavaMethod method) {
    if (!enabled) return;

    Action a = method.getSEIMethod().getAnnotation(Action.class);
    if (a != null && !a.input().equals("")) {
      addAttribute(input, a.input());
    } else {
      if (method.getBinding().getSOAPAction().equals("")) {
        // hack: generate default action for interop with .Net3.0 when soapAction is non-empty
        String defaultAction = getDefaultAction(method);
        addAttribute(input, defaultAction);
      }
    }
  }