diff --git a/pom.xml b/pom.xml
index 18c187a..1368faf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -215,29 +215,6 @@
 
     <plugins>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>apt-maven-plugin</artifactId>
-        <version>1.0-alpha-4</version>
-        <executions>
-          <execution>
-            <phase>generate-test-resources</phase>
-            <goals>
-              <goal>test-process</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <factory>org.apache.commons.digester3.annotations.processor.DigesterAnnotationProcessorFactory</factory>
-          <verbose>true</verbose>
-          <includes>
-            <include>**/annotations/rss/*.java</include>
-          </includes>
-          <outputFileEndings>
-            <outputFileEnding>.txt</outputFileEnding>
-          </outputFileEndings>
-        </configuration>
-      </plugin>
-      <plugin>
         <!--
           - A number of the pre-maven test case "suport" classes have names starting with Test.
           - This confuses the maven surefire "auto-detect test case" functionality, so we
diff --git a/src/main/java/org/apache/commons/digester3/annotations/processor/DigesterAnnotationProcessor.java b/src/main/java/org/apache/commons/digester3/annotations/processor/DigesterAnnotationProcessor.java
deleted file mode 100644
index ea8fbba..0000000
--- a/src/main/java/org/apache/commons/digester3/annotations/processor/DigesterAnnotationProcessor.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.apache.commons.digester3.annotations.processor;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.util.Collection;
-
-import com.sun.mirror.apt.AnnotationProcessor;
-import com.sun.mirror.apt.AnnotationProcessorEnvironment;
-import com.sun.mirror.apt.Messager;
-import com.sun.mirror.declaration.TypeDeclaration;
-import com.sun.mirror.util.DeclarationVisitor;
-
-/**
- * {@code org.apache.commons.digester3.annotations.rules.*} annotations processor.
- *
- * @since 3.3
- */
-@SuppressWarnings( "restriction" )
-final class DigesterAnnotationProcessor
-    implements AnnotationProcessor
-{
-
-    private final AnnotationProcessorEnvironment environment;
-
-    DigesterAnnotationProcessor( AnnotationProcessorEnvironment environment )
-    {
-        this.environment = environment;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void process()
-    {
-        Messager messager = environment.getMessager();
-        messager.printNotice( "Processing Digester annotations..." );
-
-        DeclarationVisitor visitor = new DigesterDeclarationVisitor( messager );
-
-        Collection<TypeDeclaration> declarations = environment.getTypeDeclarations();
-        for ( TypeDeclaration declaration : declarations )
-        {
-            messager.printNotice( "+---------------------------------------------------------------------------+" );
-
-            declaration.accept( visitor );
-        }
-
-        messager.printNotice( "Digester annotations processing terminated." );
-    }
-
-}
diff --git a/src/main/java/org/apache/commons/digester3/annotations/processor/DigesterAnnotationProcessorFactory.java b/src/main/java/org/apache/commons/digester3/annotations/processor/DigesterAnnotationProcessorFactory.java
deleted file mode 100644
index 7ed70ba..0000000
--- a/src/main/java/org/apache/commons/digester3/annotations/processor/DigesterAnnotationProcessorFactory.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.apache.commons.digester3.annotations.processor;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import static java.util.Collections.emptyList;
-import static java.util.Collections.singleton;
-
-import java.util.Collection;
-import java.util.Set;
-
-import com.sun.mirror.apt.AnnotationProcessor;
-import com.sun.mirror.apt.AnnotationProcessorEnvironment;
-import com.sun.mirror.apt.AnnotationProcessorFactory;
-import com.sun.mirror.apt.AnnotationProcessors;
-import com.sun.mirror.declaration.AnnotationTypeDeclaration;
-
-/**
- * {@link DigesterAnnotationProcessor} factory.
- *
- * @since 3.3
- */
-@SuppressWarnings( "restriction" )
-public final class DigesterAnnotationProcessorFactory
-    implements AnnotationProcessorFactory
-{
-
-    /**
-     * {@inheritDoc}
-     */
-    public AnnotationProcessor getProcessorFor( Set<AnnotationTypeDeclaration> declarations,
-                                                AnnotationProcessorEnvironment environment )
-    {
-        if ( declarations.isEmpty() )
-        {
-            return AnnotationProcessors.NO_OP;
-        }
-        return new DigesterAnnotationProcessor( environment );
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Collection<String> supportedAnnotationTypes()
-    {
-        return singleton( "org.apache.commons.digester3.annotations.rules.*" );
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Collection<String> supportedOptions()
-    {
-        return emptyList();
-    }
-
-}
diff --git a/src/main/java/org/apache/commons/digester3/annotations/processor/DigesterDeclarationVisitor.java b/src/main/java/org/apache/commons/digester3/annotations/processor/DigesterDeclarationVisitor.java
deleted file mode 100644
index 239ce80..0000000
--- a/src/main/java/org/apache/commons/digester3/annotations/processor/DigesterDeclarationVisitor.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package org.apache.commons.digester3.annotations.processor;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.sun.mirror.apt.Messager;
-import com.sun.mirror.declaration.AnnotationTypeDeclaration;
-import com.sun.mirror.declaration.AnnotationTypeElementDeclaration;
-import com.sun.mirror.declaration.ClassDeclaration;
-import com.sun.mirror.declaration.ConstructorDeclaration;
-import com.sun.mirror.declaration.Declaration;
-import com.sun.mirror.declaration.EnumConstantDeclaration;
-import com.sun.mirror.declaration.EnumDeclaration;
-import com.sun.mirror.declaration.ExecutableDeclaration;
-import com.sun.mirror.declaration.FieldDeclaration;
-import com.sun.mirror.declaration.InterfaceDeclaration;
-import com.sun.mirror.declaration.MemberDeclaration;
-import com.sun.mirror.declaration.MethodDeclaration;
-import com.sun.mirror.declaration.PackageDeclaration;
-import com.sun.mirror.declaration.ParameterDeclaration;
-import com.sun.mirror.declaration.TypeDeclaration;
-import com.sun.mirror.declaration.TypeParameterDeclaration;
-import com.sun.mirror.util.DeclarationVisitor;
-
-/**
- * {@code DeclarationVisitor} implementation for Digester rules handling.
- *
- * @since 3.3
- */
-@SuppressWarnings( "restriction" )
-final class DigesterDeclarationVisitor
-    implements DeclarationVisitor
-{
-
-    private final Messager messager;
-
-    DigesterDeclarationVisitor( Messager messager )
-    {
-        this.messager = messager;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitAnnotationTypeDeclaration( AnnotationTypeDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitAnnotationTypeElementDeclaration( AnnotationTypeElementDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitClassDeclaration( ClassDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitConstructorDeclaration( ConstructorDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitDeclaration( Declaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitEnumConstantDeclaration( EnumConstantDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitEnumDeclaration( EnumDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitExecutableDeclaration( ExecutableDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitFieldDeclaration( FieldDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitInterfaceDeclaration( InterfaceDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitMemberDeclaration( MemberDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitMethodDeclaration( MethodDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitPackageDeclaration( PackageDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitParameterDeclaration( ParameterDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitTypeDeclaration( TypeDeclaration declaration )
-    {
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void visitTypeParameterDeclaration( TypeParameterDeclaration declaration )
-    {
-
-    }
-
-}
diff --git a/src/main/java/org/apache/commons/digester3/annotations/processor/package-info.java b/src/main/java/org/apache/commons/digester3/annotations/processor/package-info.java
deleted file mode 100644
index e1b9d78..0000000
--- a/src/main/java/org/apache/commons/digester3/annotations/processor/package-info.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * The <code>processor</code> package contains the
- * Digester annotations rules processor implementation.
- *
- * @since 3.3
- */
-package org.apache.commons.digester3.annotations.processor;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
