/** * 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. */ package org.apache.cxf.jaxrs; import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.UUID; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.Consumes; import javax.ws.rs.CookieParam; import javax.ws.rs.DefaultValue; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.MatrixParam; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.container.ResourceInfo; import javax.ws.rs.core.Application; import javax.ws.rs.core.Context; import javax.ws.rs.core.Cookie; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.PathSegment; import javax.ws.rs.core.Request; import javax.ws.rs.core.SecurityContext; import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.ContextResolver; import javax.ws.rs.ext.Providers; import javax.xml.bind.JAXBContext; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.cxf.jaxrs.impl.PathSegmentImpl; public class Customer extends AbstractCustomer implements CustomerInfo { public interface CustomerContext { String get(); } public interface CustomerBeanInterface { } @XmlRootElement(name = "CustomerBean") public static class CustomerBean implements CustomerBeanInterface { private String a; private Long b; private boolean cb; private List<String> c; private CustomerBean d; private Map<String, List<String>> g; //CHECKSTYLE:OFF public List<CustomerBean> e; //CHECKSTYLE:ON public void setA(String aString) { this.a = aString; } public void setB(Long bLong) { this.b = bLong; } public void setC(List<String> cStringList) { this.c = cStringList; } public void setD(CustomerBean dCustomerBean) { this.d = dCustomerBean; } public String getA() { return a; } public Long getB() { return b; } public List<String> getC() { return c; } public CustomerBean getD() { return d; } public void setG(Map<String, List<String>> gg) { this.g = gg; } public Map<String, List<String>> getG() { return g; } public boolean isCb() { return cb; } public void setCb(boolean cb) { this.cb = cb; } } @Context private ContextResolver<JAXBContext> cr; private UriInfo uriInfo; @Context private CustomerContext customerContext; @Context private HttpHeaders headers; @Context private ResourceInfo resourceInfo; @Context private Request request; @Context private SecurityContext sContext; @Context private Providers bodyWorkers; @Context private Application application1; private Application application2; private int applicationInjections; @Context private HttpServletRequest servletRequest; @Context private HttpServletResponse servletResponse; @Context private ServletContext servletContext; @Context private HttpServletRequest servletRequest2; @Context private HttpServletResponse servletResponse2; @Context private ServletContext servletContext2; private ServletContext servletContext3; @Context private UriInfo uriInfo2; private String queryParam; @DefaultValue("bQuery") @QueryParam("b") private String b; private String name; private boolean postConstuctCalled; private boolean preDestroyCalled; public Customer() { } public Customer(@Context UriInfo info) { uriInfo = info; } public Customer(@Context UriInfo info, @QueryParam("a") String queryParam) { uriInfo = info; this.queryParam = queryParam; } @PostConstruct public void postConstruct() { postConstuctCalled = true; } public boolean isPostConstuctCalled() { return postConstuctCalled; } @PreDestroy public void preDestroy() { preDestroyCalled = true; } public boolean isPreDestroyCalled() { return preDestroyCalled; } public String getName() { return name; } public void setName(String n) { name = n; } public String getB() { return b; } public void testQueryBean(@QueryParam("") CustomerBean cb) { } public void testLocaleParam(@QueryParam("p1") Locale l) { } public void testGenericObjectParam(@QueryParam("p1") Query<String> query) { } public void testXmlAdapter(@QueryParam("a") @XmlJavaTypeAdapter(CustomerBeanAdapter.class) CustomerBean cb) { } public void testXmlAdapter2(@QueryParam("a") @XmlJavaTypeAdapter(CustomerBeanAdapter2.class) CustomerBean cb) { } public void testXmlAdapter3(@QueryParam("") @XmlJavaTypeAdapter(CustomerBeanAdapter3.class) CustomerBeanInterface cb) { } public void testPathBean(@PathParam("") CustomerBean cb) { } public void testFormBean(@FormParam("") CustomerBean cb) { } public void testMatrixBean(@MatrixParam("") CustomerBean cb) { } public Application getApplication1() { return application1; } public Application getApplication2() { if (applicationInjections > 1) { throw new RuntimeException(); } return application2; } @Context public void setApplication(Application app) { applicationInjections++; application2 = app; } public UriInfo getUriInfo() { return uriInfo; } public UriInfo getUriInfo2() { return uriInfo2; } @Context public void setTestUriInfo(UriInfo ui) { uriInfo = ui; } public void setUriInfoContext(UriInfo ui) { } @Context public void setServletContext(ServletContext sc) { servletContext3 = sc; } public ServletContext getThreadLocalServletContext() { return servletContext3; } @QueryParam("a_value") public void setA(String a) { queryParam = a; } public String getQueryParam() { return queryParam; } public HttpHeaders getHeaders() { return headers; } public ResourceInfo getResourceInfo() { return resourceInfo; } public Request getRequest() { return request; } public Providers getBodyWorkers() { return bodyWorkers; } public SecurityContext getSecurityContext() { return sContext; } public HttpServletRequest getServletRequest() { return servletRequest2; } public HttpServletResponse getServletResponse() { return servletResponse2; } public ServletContext getServletContext() { return servletContext2; } public HttpServletRequest getServletRequestResource() { return servletRequest; } public HttpServletResponse getServletResponseResource() { return servletResponse; } public ServletContext getServletContextResource() { return servletContext; } public ContextResolver<JAXBContext> getContextResolver() { return cr; } @Produces("text/xml") @Consumes("text/xml") @GET public void test() { // complete } @Produces("text/xml") public void getItAsXML() { // complete } @Produces("text/plain") public void getItPlain() { // complete } @Produces("text/xml") public void testQuery(@QueryParam("query") String queryString, @QueryParam("query") int queryInt, @QueryParam("query2") String query2, @QueryParam("query3") String query3) { // complete } @Produces("text/xml") public void testQueryIntegerArray(@QueryParam("query") Integer[] query) { // complete } @Produces("text/xml") public void testQueryIntArray(@QueryParam("query") int[] query) { // complete } @Produces("text/xml") public void testQueryAsList( @DefaultValue("default") @QueryParam("query") List<String> queryString, @QueryParam("query2") List<String> queryString2, @QueryParam("query3") List<Integer> queryString3, @QueryParam("query3") Integer[] queryString3Array, @QueryParam("query4") List<String> queryString4, @QueryParam("query5") List<String> queryString5, @QueryParam("query3") List<MyType<Integer>> queryString6) { // complete } public static class MyType<T> { private T t; public MyType(T t) { this.t = t; } public T get() { return t; } } @Produces("text/xml") public void testPathSegment(@PathParam("ps") PathSegment ps, @PathParam("ps") String path) { // complete } @Produces("text/xml") public void testMultipleQuery(@QueryParam("query") String queryString, @QueryParam("query2") String queryString2, @QueryParam("query3") Long queryString3, @QueryParam("query4") boolean queryBoolean4, @QueryParam("query5") char queryChar5, @QueryParam("query6") String queryString6) { // complete } @Produces("text/xml") public void testMatrixParam(@MatrixParam("p1") String mp1, @MatrixParam("p2") String mp2, @MatrixParam("p3") String mp3, @MatrixParam("p4") String mp4, @MatrixParam("p4") List<String> mp4List, @MatrixParam("p5") String mp5) { // complete } public void testCustomerParam(@QueryParam("p1") Customer c, @QueryParam("p2") Customer[] c2, @QueryParam("p3") Customer2 c3) { // complete } public void testCustomerParam2(@QueryParam("p1") String[] p) { // complete } public void testFromStringParam(@QueryParam("p1") UUID uuid, @QueryParam("p2") CustomerGender gender, @QueryParam("p3") CustomerGender gender2) { // complete } public void testFromValueParam(@QueryParam("p1") Timezone tzone) { // complete } // CHECKSTYLE:OFF public void testWrongType(@QueryParam("p1") HashMap<?, ?> map) { // complete } // CHECKSTYLE:ON public void testWrongType2(@QueryParam("p1") CustomerGender g) { // complete } public void testFormParam(@FormParam("p1") String fp1, @FormParam("p2") List<String> fp2) { // complete } @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public void testMultivaluedMapAndFormParam(MultivaluedMap<String, String> params, @FormParam("p1") String fp1, @FormParam("p2") List<String> fp2) { // complete } public void testCookieParam(@CookieParam("c1") String c1, @CookieParam("c1") Set<Cookie> c11, @CookieParam("c2") @DefaultValue("c2Value") String c2, @CookieParam("c2") @DefaultValue("c2Value") Set<String> c22) { // complete } public void testMultipleCookieParam(@CookieParam("c1") String c1, @CookieParam("c2") String c2, @CookieParam("c3") Cookie c3) { // complete } public void testParams(@Context UriInfo info, @Context HttpHeaders hs, @Context Request r, @Context SecurityContext s, @Context Providers workers, @HeaderParam("Foo") String h, @HeaderParam("Foo") List<String> l) { // complete } public void testServletParams(@Context HttpServletRequest req, @Context HttpServletResponse res, @Context ServletContext context, @Context ServletConfig config) { // complete } @Path("{id1}/{id2}") public void testConversion(@PathParam("id1") PathSegmentImpl id1, @PathParam("id2") SimpleFactory f) { // complete } public void testContextResolvers(@Context ContextResolver<JAXBContext> resolver) { // complete } public CustomerContext getCustomerContext() { return customerContext; } public static class CustomerBeanAdapter extends XmlAdapter<String, CustomerBean> { @Override public CustomerBean unmarshal(String value) throws Exception { CustomerBean bean = new CustomerBean(); bean.setA(value); return bean; } @Override public String marshal(CustomerBean v) throws Exception { // TODO Auto-generated method stub return null; } } public static final class ABean { private String value; private ABean(String value) { this.value = value; } public String getValue() { return value; } public static ABean fromString(String value) { return new ABean(value); } } public static class CustomerBeanAdapter2 extends XmlAdapter<ABean, CustomerBean> { @Override public CustomerBean unmarshal(ABean value) throws Exception { CustomerBean bean = new CustomerBean(); bean.setA(value.getValue()); return bean; } @Override public ABean marshal(CustomerBean v) throws Exception { // TODO Auto-generated method stub return null; } } public class CustomerBeanAdapter3 extends XmlAdapter<CustomerBean, CustomerBeanInterface> { public CustomerBean marshal(CustomerBeanInterface v) throws Exception { return null; } public CustomerBeanInterface unmarshal(CustomerBean v) throws Exception { return v; } } public static class Query<T> implements Serializable { private static final long serialVersionUID = -1600323678121423761L; private T entity; public Query(T entity) { this.entity = entity; } public T getEntity() { return entity; } } };