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

restlet consumer request not propagating headers

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.16.2
    • 2.17.2, 2.18.0
    • camel-restlet
    • None
    • 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

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

              Dates

                Created:
                Updated:
                Resolved: