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