I'd like to create a restful endpoint, in the fashion described here 
https://tomee.apache.org/tomee-8.0/examples/simple-rest.html, in a programmatic 
way that is idiomatic to TomEE.

For example, instead of annotating a method like this below, to bind the method 
to an http endpoint, I'd like to be able to programmatically create the 
binding....

    @PUT
    @Path("orders/invoice/{id}")
    @Produces({MediaType.APPLICATION_XML})
    @Lock(LockType.READ)
    public Response DoSomething()
{         ...     }
 

Is such a thing possible ?

How do I tie into the underlying objects TomEE manages so that I can "register" 
a new http endpoint in the same sort of fashion as I do above via annotations ?


-----------------------package com.bigfancy;


@Startup
@Singleton
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Lock(LockType.READ)
public class PublicAPI {
    private static final Logger LOG = LogManager.getLogger(PublicAPI.class);
    private static final Marker GMARKER = MarkerManager.getMarker("public-api");

    @Context UriInfo uriInfo;
    @Context HttpHeaders httpHeaders;
    @Context Request request;
    @Context SecurityContext securityContext;
    @Context Providers providers;
    @Context HttpServletRequest httpServletRequest;
    @Resource SessionContext sessionContext;




    public PublicAPI() {
        super();
        LOG.info("constructing public api");
    }


    @PostConstruct
    public void init() {
        // instead of defining the orders(..) method below....
        // programmatically create the binding here...
    }

    @Destroy
    public void destroy() {
        LOG.info("destroying public api");
    }

    @POST
    @Path("orders/invoice/{id}")
    @Consumes({MediaType.WILDCARD})
    @Produces({MediaType.WILDCARD})
    public Response orders(
          @HeaderParam("xyz")
          @Required(true)
          final String xyz
    )
    {
        return null
    }
}

Reply via email to