The ContentBasedRouter actually extends ContentBasedWiretap. Just change the name of the class in the CBR quickstart and you'll have yourself a CBW. The sole difference is that ContentBasedRouter.process(Message) returns null.
The difference between the two classes goes back to before we had the ability to specify the mep as part of the service.
Part of the contract when processing actions within the pipeline is that any action returning null causes the pipeline to terminate at that point.
As all routers imply a transfer of control to another service (as opposed to a wiretap which takes a copy of the message) this was previously enforced by returning null from the action. Now that we have the mep it can also be handled by specifying the service as OneWay, although this generally requires more care.