Las URL REST y no RESTful juntas no funcionan

Todos mis intentos de obtener un ejemplo funcional de ambas, configuración puramente relajante junto con al menos una URL no tranquila fallaron.

Tengo esta página como guía:https://cwiki.apache.org/confluence/display/WW/REST+Plugin

Tengo un modeloReceipt con unos pocos campos de prueba.

La solución REST pura funciona como se esperaba, por lo que al hacer esto:

<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="true"/>

<constant name="struts.mapper.class" value="rest" />

<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="controllers"/>

funciona bien con estos resultados:

receipt.json => muestra la lista de todos los recibos

receipt/1.json => muestra el recibo con id = 1

Pero si trato de mezclar URL relajantes con URL no relajantes, (de la misma manera que me dicen en el artículo wiki) de esta manera:

<constant name="struts.action.extension" value="xhtml,,xml,json,action"/>
<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper" />
<constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts"/>

<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="controllers"/>

explota con esto:

Struts has detected an unhandled exception:

Messages:   
com.immaculate.receipto.controllers.ReceiptController.execute()
File:   java/lang/Class.java
Line number:    1,778

Estoy confundido. ¿Por qué está buscando execute ()? execute () debería ser un método presente en las acciones. No le estoy dando una acción, le estoy dando un controlador como antes.

¿Cómo puedo solucionar esto?

Aquí esta laReceiptController:

public class ReceiptController implements ModelDriven<Object> {

    private ReceiptManager receiptManager = new ReceiptManager();
    private String id;
    private Receipt model = new Receipt();
    private Collection list;


    public Object getModel(){
        if(list==null){
            return model;
        } else {
            return list;
        }
    }

    public HttpHeaders create() {
        receiptManager.save(model);
        return new DefaultHttpHeaders("show");
    }


    public HttpHeaders show() {
        model = receiptManager.find(id);
        return new DefaultHttpHeaders("show");
    }

    public HttpHeaders destroy() {
        model = receiptManager.destroy(id);
        return new DefaultHttpHeaders("show");
    }


    public HttpHeaders index() {
        list = receiptManager.list();
        return new DefaultHttpHeaders("show");
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

Obviamente estoy haciendo algo mal aquí. ¿Necesito saber algo más además de lo que se explica aquí?

Además, ¿cómo leo esto? :

<constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts"/>

¿Esto significa que todo comienza con/rest se asignará a mi controlador de reposo puro que, a su vez, se asignará a mi recibo y cualquier cosa sin el/rest prefijo se asignará a las asignaciones de puntales predeterminados? o voy por completo en la dirección equivocada aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta