package com.jonnyi.jaxrs.examples; import javax.ws.rs.core.MediaType; import javax.xml.namespace.QName; import com.sun.jersey.api.model.AbstractMethod; import com.sun.jersey.api.model.AbstractResource; import com.sun.jersey.api.model.AbstractResourceMethod; import com.sun.jersey.api.model.Parameter; import com.sun.jersey.server.wadl.WadlGenerator; import com.sun.research.ws.wadl.Application; import com.sun.research.ws.wadl.Method; import com.sun.research.ws.wadl.ObjectFactory; import com.sun.research.ws.wadl.Param; import com.sun.research.ws.wadl.ParamStyle; import com.sun.research.ws.wadl.RepresentationType; import com.sun.research.ws.wadl.Request; import com.sun.research.ws.wadl.Resource; import com.sun.research.ws.wadl.Resources; import com.sun.research.ws.wadl.Response; public class SampleQueryParamWadlGeneratorSupport implements WadlGenerator { private WadlGenerator delegate; void log( Object o ) { System.out.println( "GHETTO LOG: " + this.getClass().getSimpleName() + " - " + o); } public SampleQueryParamWadlGeneratorSupport() { log( "created instance" ); } @Override public void setWadlGeneratorDelegate(WadlGenerator delegate) { this.delegate = delegate; } @Override public void init() throws Exception { this.delegate.init(); } @Override public String getRequiredJaxbContextPath() { return this.delegate.getRequiredJaxbContextPath(); } @Override public Application createApplication() { return this.delegate.createApplication(); } @Override public Resources createResources() { return this.delegate.createResources(); } @Override public Resource createResource(AbstractResource r, String path) { return this.delegate.createResource(r, path); } @Override public Method createMethod(AbstractResource r, AbstractResourceMethod m) { return this.delegate.createMethod(r, m); } @Override public Request createRequest(AbstractResource r, AbstractResourceMethod m) { Request wadlReq = this.delegate.createRequest(r, m); log("entering createRequest"); String resourceMethodName = m.getMethod().getName(); //probably want to check for the correct resource class too in case //two of 'emm have the same method name. if( resourceMethodName.equals( "theNewWay" ) ) { log("found the method I'm lookin' for: " + m.getMethod().getName() ); ObjectFactory fac = new ObjectFactory(); Param param = fac.createParam(); param.getOtherAttributes().put(QName.valueOf("xmlns:xs"), "http://www.w3.org/2001/XMLSchema"); param.setType(QName.valueOf("xs:string")); param.setStyle(ParamStyle.QUERY); param.setName("regionCode"); wadlReq.getParam().add( param ); log( "added a request param to wadl for resource class '" +r.getResourceClass().getSimpleName() + "' and method name '" + resourceMethodName + "'" ); } else { log( resourceMethodName + " isn't the method I'm lookin' for" ); } return wadlReq; } @Override public RepresentationType createRequestRepresentation(AbstractResource r, AbstractResourceMethod m, MediaType mediaType) { return this.delegate.createRequestRepresentation(r, m, mediaType); } @Override public Response createResponse(AbstractResource r, AbstractResourceMethod m) { return this.delegate.createResponse(r, m); } @Override public Param createParam(AbstractResource r, AbstractMethod m, Parameter p) { Param param = this.delegate.createParam(r, m, p); return param; } }