Hi Jérôme, > Does it make more sense now?
Yes :) I added the support of multi-value & multi-style parameters (see the attached Services.java). If you load the attached webapp, then try http://localhost:8080/my-webapp/restlet/service/0;service=hihi?service=foo You get this: 0;service=hihi hihi foo Knowing the route is "/service/{service}", this means the "hihi" value is returned via the matrix form, _but_ the template value also contains it. Is it normal? Regards, -- Vincent Ricard
sample.tgz
Description: GNU Unix tar archive
package com.mycompany.app; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.restlet.Context; import org.restlet.data.Form; import org.restlet.data.MediaType; import org.restlet.data.Parameter; import org.restlet.data.Reference; import org.restlet.data.Request; import org.restlet.data.Response; import org.restlet.ext.wadl.ParameterInfo; import org.restlet.ext.wadl.ParameterStyle; import org.restlet.ext.wadl.RequestInfo; import org.restlet.ext.wadl.WadlResource; import org.restlet.resource.Representation; import org.restlet.resource.StringRepresentation; import org.restlet.resource.Variant; import org.restlet.util.Series; import com.noelios.restlet.http.HttpConstants; public class Services extends WadlResource { public Services(Context context, Request request, Response response) { super(context, request, response); this.getVariants().add(new Variant(MediaType.TEXT_PLAIN)); } @Override public Representation represent(@SuppressWarnings("unused") Variant variant) { Representation rep = new StringRepresentation(getService(), MediaType.TEXT_PLAIN); return rep; } private String getService() { String s = ""; for (Parameter parameter : getParams(getRequestInfo(), "service")) { s += " " + parameter.getValue(); } return s; } /* -- */ protected RequestInfo getRequestInfo() { RequestInfo requestInfo = new RequestInfo(); requestInfo.getParameters().add(new ParameterInfo("service", false, "string", ParameterStyle.TEMPLATE, "some doc")); requestInfo.getParameters().add(new ParameterInfo("service", false, "string", ParameterStyle.MATRIX, "some doc")); requestInfo.getParameters().add(new ParameterInfo("service", false, "string", ParameterStyle.QUERY, "some doc")); return requestInfo; } /* -- */ protected String getParam(RequestInfo requestInfo, String parameterName) { return getParams(requestInfo, parameterName).getFirstValue(parameterName); } protected Form getParams(RequestInfo requestInfo, String parameterName) { List<Parameter> params = new ArrayList<Parameter>(); for (ParameterInfo parameter : requestInfo.getParameters()) { if (parameterName.equals(parameter.getName())) { addParams(parameter, params); } } return new Form(params); } private void addParams(ParameterInfo parameterInfo, List<Parameter> params) { if (parameterInfo.getFixed() != null) { params.add(new Parameter(parameterInfo.getName(), parameterInfo.getFixed())); return; } if (ParameterStyle.HEADER.equals(parameterInfo.getStyle())) { params.addAll(getParamsFromForm(getHeader(), parameterInfo.getName())); } else if (ParameterStyle.TEMPLATE.equals(parameterInfo.getStyle())) { Object parameter = getRequest().getAttributes().get(parameterInfo.getName()); if (parameter != null) { params.add(new Parameter(parameterInfo.getName(), "#" + Reference.decode((String) parameter) + "#")); } } else if (ParameterStyle.MATRIX.equals(parameterInfo.getStyle())) { params.addAll(getParamsFromForm(getMatrix(), parameterInfo.getName())); } else if (ParameterStyle.QUERY.equals(parameterInfo.getStyle())) { params.addAll(getParamsFromForm(getQuery(), parameterInfo.getName())); } else if (ParameterStyle.PLAIN.equals(parameterInfo.getStyle())) { // not yet implemented } if (params.isEmpty() && parameterInfo.getDefaultValue() != null) { params.add(new Parameter(parameterInfo.getName(), parameterInfo.getDefaultValue())); } } private List<Parameter> getParamsFromForm(Form pForm, String pName) { List<Parameter> params = pForm.subList(pName); if (params == null) { params = Collections.emptyList(); } return params; } @SuppressWarnings("unchecked") protected Form getHeader() { Form form = null; Series<Parameter> headers = (Series<Parameter>) getRequest().getAttributes().get(HttpConstants.ATTRIBUTE_HEADERS); if (headers != null) { form = new Form(headers); } return form; } }