Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-9642

restlet consumer request not propagating headers

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.16.2
    • Fix Version/s: 2.17.2, 2.18.0
    • Component/s: camel-restlet
    • Labels:
      None
    • Estimated Complexity:
      Unknown

      Description

      Headers are not getting propagating from restlet consumers. The code is setting them incorrectly inside DefaultRestletBinding.java -> populateRestletRequestFromExchange

      This is the code that works (based on latest from github):

       for (Map.Entry<String, Object> entry : exchange.getIn().getHeaders().entrySet()) {
                  String key = entry.getKey();
                  Object value = entry.getValue();
                  if (!headerFilterStrategy.applyFilterToCamelHeaders(key, value, exchange)) {
                      // put the org.restlet headers in attributes
                  	if (key.startsWith("org.restlet.")) {
                          if(key.equals("org.restlet.http.headers")){
                              //Check if existing headers already exist we don't want to wipe the headers that are already in there.
                          	Series<Header> headers = (Series)request.getAttributes().get("org.restlet.http.headers");
          	               	if(headers != null){ //If headers exists add them to the existing ones
          	               		Series<Header> newHeaders = (Series)value;
          	               		for(Header h: newHeaders){
                                      headers.set(key, value.toString());                    	
          	               		}
          	               	}
          	               	else{
                                  request.getAttributes().put(key, value);
          	               	}
                          }
                          else{
                              request.getAttributes().put(key, value);
                          }
                          	
                      }
                      // Use forms only for PUT, POST and x-www-form-urlencoded
                  	else if (form != null) {
                          // put the user stuff in the form
                          if (value instanceof Collection) {
                              for (Object v : (Collection<?>) value) {
                                  form.add(key, v.toString());
                              }
                          } else {
                              form.add(key, value.toString());
                          }
                      }else {
                          // For non-form put all the headers in attributes header
                      	Series<Header> headers = (Series)request.getAttributes().get("org.restlet.http.headers");
      	               	if(headers == null){
      	               		headers = new Series<Header>(Header.class);
      	               		request.getAttributes().put("org.restlet.http.headers", headers);
      	               	}
                          headers.set(key, value.toString());
                      }
      
                      LOG.debug("Populate Restlet request from exchange header: {} value: {}", key, value);
                  }
              }
      

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                davsclaus Claus Ibsen
                Reporter:
                jmandawg Jay mann
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: