Hi all, 
I'm creating a RESTful web service, but I don't understand how to manage 
multiple parameters in the exchange message. My idea is that if multiple 
parameters are passed to the service, I can find some sort of hashmap, indexed 
by parameter name, in the body of the message created by the REST endpoint, but 
this doesn't happen.
Reading from the source code, method 
org.apache.camel.component.cxf.jaxrs.DefaultCxfRsBinding.populateExchangeFromCxfRsRequest(...),
 I see that a "Object[] paramArray" (that has only parameters values and not 
names) is saved in the message body with "camelMessage.setBody(new 
MessageContentsList(paramArray))".

Am I missing something or multiple parameters are really passed as *positional* 
parameter of an Object[] array?
I'm using Camel 2.7.1 with the following definition (I've pasted only the 
relevant portion)

@Provider
@Produces("application/json")
public class DocumentListRest  {

  @GET
  @Path("/document/{userId}/{documentId}")
  public Document getDocument(@PathParam("userId") long userId, 
@PathParam("documentId") long documentId) {
    return null;  // Is it ok if I return null?
  }
}


my Spring configuration is:

[...]

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-http.xml" />

<cxf:rsServer id="rsServer" address="/" 
serviceClass="xxx.yyy.impl.DocumentListRest" />

<camelContext id="camel" trace="true" 
xmlns="http://camel.apache.org/schema/spring";>
  <route>
    <from uri="cxfrs:bean:rsServer" />
    <choice>
      <when>
        <simple>${in.header.operationName} == 'getDocument'</simple>
  [...]
  </route>
</camelContext>

Tracing gave me the follwing output:

(route1) from(cxfrs://bean:rsServer) --> choice <<< Pattern:InOut, 
Headers:{CamelAcceptContentType=*/*, Content-Type=null, Accept=*/*, 
CamelHttpUri=/server/document/23/234, CamelHttpMethod=GET, 
connection=Keep-Alive, CamelCxfRsResponseClass=class xxx.yyy.bean.Document, 
CamelCxfRsOperationResourceInfoStack=[org.apache.cxf.jaxrs.model.MethodInvocationInfo@3b48a8e6],
 CamelHttpPath=document/23/234, user-agent=Wget/1.12 (linux-gnu), 
operationName=getDocument, CamelCxfRsResponseGenericType=class 
xxx.yyy.bean.Document, host=localhost:8080}, 
BodyType:org.apache.cxf.message.MessageContentsList, Body:23


Thanks, 
Marco

Reply via email to