You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Amit Patel (JIRA)" <ji...@apache.org> on 2012/09/07 00:28:09 UTC

[jira] [Updated] (CAMEL-5575) Add new HttpEndpoint Option "httpHeaderFilterStrategy" on Http4 component

     [ https://issues.apache.org/jira/browse/CAMEL-5575?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Amit Patel updated CAMEL-5575:
------------------------------

    Attachment: HttpComponent.java
    
> Add new HttpEndpoint Option "httpHeaderFilterStrategy" on Http4 component
> -------------------------------------------------------------------------
>
>                 Key: CAMEL-5575
>                 URL: https://issues.apache.org/jira/browse/CAMEL-5575
>             Project: Camel
>          Issue Type: New Feature
>          Components: camel-http
>            Reporter: Amit Patel
>            Priority: Critical
>             Fix For: 2.10.1
>
>         Attachments: HttpComponent.java
>
>
> Our third-party application accepts Date as Http header, but HttpHeaderFilterStrategy.java filters the date. To support out third-party application I want new feature to add Custom http filter on a Http4 Endpoint.
> I made the following changes on HttpComponent createEndpoint method  to support custom http filter as opetion qq on Http4 Endpoint.
>   
>   @Override
>     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
>         String addressUri = uri;
>         if (!uri.startsWith("http4:") && !uri.startsWith("https4:")) {
>             addressUri = remaining;
>         }
>         Map<String, Object> httpClientParameters = new HashMap<String, Object>(parameters);
>         // http client can be configured from URI options
>         HttpParams clientParams = configureHttpParams(parameters);
>         // validate that we could resolve all httpClient. parameters as this component is lenient
>         validateParameters(uri, parameters, "httpClient.");
>         
>         HttpBinding httpBinding = resolveAndRemoveReferenceParameter(parameters, "httpBindingRef", HttpBinding.class);
>         if (httpBinding == null) {
>             httpBinding = resolveAndRemoveReferenceParameter(parameters, "httpBinding", HttpBinding.class);
>         }
>         
>         HttpHeaderFilterStrategy httpHeaderFilterStrategy = resolveAndRemoveReferenceParameter(
>                                                                                                parameters, "httpHeaderFilterStrategy",
>                                                                                                HttpHeaderFilterStrategy.class);
>         if (httpHeaderFilterStrategy == null) {
> 			httpHeaderFilterStrategy = resolveAndRemoveReferenceParameter(
>                                                                           parameters, "httpHeaderFilterStrategy",
>                                                                           HttpHeaderFilterStrategy.class);
>         }
>        
>         HttpClientConfigurer httpClientConfigurer = resolveAndRemoveReferenceParameter(parameters, "httpClientConfigurerRef", HttpClientConfigurer.class);
>         if (httpClientConfigurer == null) {
>             httpClientConfigurer = resolveAndRemoveReferenceParameter(parameters, "httpClientConfigurer", HttpClientConfigurer.class);
>         }
>         HttpContext httpContext = resolveAndRemoveReferenceParameter(parameters, "httpContextRef", HttpContext.class);
>         if (httpContext == null) {
>             httpContext = resolveAndRemoveReferenceParameter(parameters, "httpContext", HttpContext.class);
>         }
>         X509HostnameVerifier x509HostnameVerifier = resolveAndRemoveReferenceParameter(parameters, "x509HostnameVerifier", X509HostnameVerifier.class);
>         if (x509HostnameVerifier == null) {
>             x509HostnameVerifier = getX509HostnameVerifier();
>         }
>         
>         SSLContextParameters sslContextParameters = resolveAndRemoveReferenceParameter(parameters, "sslContextParametersRef", SSLContextParameters.class);
>         if (sslContextParameters == null) {
>             sslContextParameters = getSslContextParameters();
>         }
>         
>         boolean secure = HttpHelper.isSecureConnection(uri);
>         // create the configurer to use for this endpoint
>         HttpClientConfigurer configurer = createHttpClientConfigurer(parameters, secure);
>         URI endpointUri = URISupport.createRemainingURI(new URI(addressUri), httpClientParameters);
>         // create the endpoint and set the http uri to be null
>         HttpEndpoint endpoint = new HttpEndpoint(endpointUri.toString(), this, clientParams, clientConnectionManager, configurer);
>         // configure the endpoint
>         setProperties(endpoint, parameters);
>         // The httpUri should be start with http or https
>         String httpUriAddress = addressUri;
>         if (addressUri.startsWith("http4")) {
>             httpUriAddress = "http" + addressUri.substring(5);
>         }
>         if (addressUri.startsWith("https4")) {
>             httpUriAddress = "https" + addressUri.substring(6);
>         }
>         // restructure uri to be based on the parameters left as we dont want to include the Camel internal options
>         // build up the http uri
>         URI httpUri = URISupport.createRemainingURI(new URI(httpUriAddress), parameters);
>         // validate http uri that end-user did not duplicate the http part that can be a common error
>         String part = httpUri.getSchemeSpecificPart();
>         if (part != null) {
>             part = part.toLowerCase();
>             if (part.startsWith("//http//") || part.startsWith("//https//") || part.startsWith("//http://") || part.startsWith("//https://")) {
>                 throw new ResolveEndpointFailedException(uri,
>                         "The uri part is not configured correctly. You have duplicated the http(s) protocol.");
>             }
>         }
>         endpoint.setHttpUri(httpUri);
>         
>         if (httpHeaderFilterStrategy != null) {
> 			endpoint.setHeaderFilterStrategy(httpHeaderFilterStrategy);
> 		} else {
> 			setEndpointHeaderFilterStrategy(endpoint);
>       }
>         
>         endpoint.setBinding(getHttpBinding());
>         if (httpBinding != null) {
>             endpoint.setHttpBinding(httpBinding);
>         }
>         if (httpClientConfigurer != null) {
>             endpoint.setHttpClientConfigurer(httpClientConfigurer);
>         }
>         endpoint.setHttpContext(getHttpContext());
>         if (httpContext != null) {
>             endpoint.setHttpContext(httpContext);
>         }
>         // register port on schema registry
>         int port = getPort(httpUri);
>         registerPort(secure, x509HostnameVerifier, port, sslContextParameters);
>         return endpoint;
>     }
>    
>     private static int getPort(URI uri) {
>         int port = uri.getPort();
>         if (port < 0) {
>             if ("http4".equals(uri.getScheme()) || "http".equals(uri.getScheme())) {
>                 port = 80;
>             } else if ("https4".equals(uri.getScheme()) || "https".equals(uri.getScheme())) {
>                 port = 443;
>             } else {
>                 throw new IllegalArgumentException("Unknown scheme, cannot determine port number for uri: " + uri);
>             }
>         }
>         return port;
>     }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira