[CXF-6973] Allow to configure http conduits and destinations using features
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/f761e182 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/f761e182 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/f761e182 Branch: refs/heads/master-jaxrs-2.1 Commit: f761e1823ef1fc9aa051d89bf0a9172c5925cdda Parents: fe4ee94 Author: Christian Schneider <ch...@die-schneider.net> Authored: Thu Jul 21 10:11:58 2016 +0200 Committer: Christian Schneider <ch...@die-schneider.net> Committed: Thu Jul 21 10:12:12 2016 +0200 ---------------------------------------------------------------------- .../cxf/transport/http/HttpConduitConfig.java | 73 ++++++++++++++++++++ .../cxf/transport/http/HttpConduitFeature.java | 48 +++++++++++++ .../transport/http/HttpDestinationConfig.java | 37 ++++++++++ .../transport/http/HttpDestinationFeature.java | 47 +++++++++++++ 4 files changed, 205 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/f761e182/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpConduitConfig.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpConduitConfig.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpConduitConfig.java new file mode 100644 index 0000000..bf09d5b --- /dev/null +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpConduitConfig.java @@ -0,0 +1,73 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cxf.transport.http; + +import org.apache.cxf.configuration.jsse.TLSClientParameters; +import org.apache.cxf.configuration.security.AuthorizationPolicy; +import org.apache.cxf.configuration.security.ProxyAuthorizationPolicy; +import org.apache.cxf.transport.http.auth.HttpAuthSupplier; +import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; + +/** + * Holds http conduit configs for the HttpConduitFeature + */ +public class HttpConduitConfig { + private TLSClientParameters tlsClientParameters; + private HTTPClientPolicy clientPolicy; + private HttpAuthSupplier authSupplier; + private ProxyAuthorizationPolicy proxyAuthorizationPolicy; + private AuthorizationPolicy authorizationPolicy; + + public void setTlsClientParameters(TLSClientParameters tlsClientParameters) { + this.tlsClientParameters = tlsClientParameters; + } + public HTTPClientPolicy getClientPolicy() { + return clientPolicy; + } + public void setClientPolicy(HTTPClientPolicy clientPolicy) { + this.clientPolicy = clientPolicy; + } + public void setAuthSupplier(HttpAuthSupplier authSupplier) { + this.authSupplier = authSupplier; + } + public void setProxyAuthorizationPolicy(ProxyAuthorizationPolicy proxyAuthorizationPolicy) { + this.proxyAuthorizationPolicy = proxyAuthorizationPolicy; + } + public void setAuthorizationPolicy(AuthorizationPolicy authorizationPolicy) { + this.authorizationPolicy = authorizationPolicy; + } + + public void apply(HTTPConduit conduit) { + if (tlsClientParameters != null) { + conduit.setTlsClientParameters(tlsClientParameters); + } + if (clientPolicy != null) { + conduit.setClient(clientPolicy); + } + if (authSupplier != null) { + conduit.setAuthSupplier(authSupplier); + } + if (proxyAuthorizationPolicy != null) { + conduit.setProxyAuthorization(proxyAuthorizationPolicy); + } + if (authorizationPolicy != null) { + conduit.setAuthorization(authorizationPolicy); + } + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/f761e182/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpConduitFeature.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpConduitFeature.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpConduitFeature.java new file mode 100644 index 0000000..73c297b --- /dev/null +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpConduitFeature.java @@ -0,0 +1,48 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cxf.transport.http; + +import org.apache.cxf.Bus; +import org.apache.cxf.endpoint.Client; +import org.apache.cxf.feature.AbstractFeature; +import org.apache.cxf.transport.Conduit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Programmatically configure a http conduit. This can also be used as a DOSGi + * intent. + */ +public class HttpConduitFeature extends AbstractFeature { + static final Logger LOG = LoggerFactory.getLogger(HttpConduitFeature.class); + private HttpConduitConfig conduitConfig; + + @Override + public void initialize(Client client, Bus bus) { + Conduit conduit = client.getConduit(); + if (conduitConfig != null && conduit instanceof HTTPConduit) { + conduitConfig.apply((HTTPConduit)conduit); + } + } + + public void setConduitConfig(HttpConduitConfig conduitConfig) { + this.conduitConfig = conduitConfig; + } + +} http://git-wip-us.apache.org/repos/asf/cxf/blob/f761e182/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpDestinationConfig.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpDestinationConfig.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpDestinationConfig.java new file mode 100644 index 0000000..200053b --- /dev/null +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpDestinationConfig.java @@ -0,0 +1,37 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cxf.transport.http; + +import org.apache.cxf.transports.http.configuration.HTTPServerPolicy; + +/** + * Holds configuration data for a http destination + */ +public class HttpDestinationConfig { + + private HTTPServerPolicy serverPolicy; + + public void apply(AbstractHTTPDestination destination) { + destination.setServer(serverPolicy); + } + + public void setServerPolicy(HTTPServerPolicy serverPolicy) { + this.serverPolicy = serverPolicy; + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/f761e182/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpDestinationFeature.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpDestinationFeature.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpDestinationFeature.java new file mode 100644 index 0000000..a90194f --- /dev/null +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpDestinationFeature.java @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cxf.transport.http; + +import org.apache.cxf.Bus; +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.feature.AbstractFeature; +import org.apache.cxf.transport.Destination; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Programmatically configure a http destination. This can also be used as a DOSGi + * intent. + */ +public class HttpDestinationFeature extends AbstractFeature { + static final Logger LOG = LoggerFactory.getLogger(HttpDestinationFeature.class); + private HttpDestinationConfig destinationConfig; + + @Override + public void initialize(Server server, Bus bus) { + Destination destination = server.getDestination(); + if (destinationConfig != null && destination instanceof AbstractHTTPDestination) { + destinationConfig.apply((AbstractHTTPDestination)destination); + } + } + + public void setDestinationConfig(HttpDestinationConfig destinationConfig) { + this.destinationConfig = destinationConfig; + } +}