[
https://issues.apache.org/jira/browse/CXF-9132?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17950163#comment-17950163
]
Andriy Redko commented on CXF-9132:
-----------------------------------
[~cantos] this is by design: SSL URL change for this specific conduit forces
client recreation. Since the only way to acquire client reference is through
the acquire, the release must be called as well. There are no inconsistencies
here.
> HttpClientHTTPConduit releases the client while there are connection(s) still
> using it
> --------------------------------------------------------------------------------------
>
> Key: CXF-9132
> URL: https://issues.apache.org/jira/browse/CXF-9132
> Project: CXF
> Issue Type: Bug
> Components: Transports
> Affects Versions: 4.1.0, 4.0.5, 4.0.6, 4.0.7, 4.1.1
> Environment: JDK 21
> CXF 4.0.5/4.0.6/4.0.7/4.1.0/4.1.1
> Reporter: Cantos Song
> Priority: Major
> Attachments: 438528865-8f282ba8-c4de-4451-b2ca-a8f76c79b643.png,
> TestCxf.java, image-2025-04-29-17-49-06-378.png,
> image-2025-04-29-17-49-16-376.png, image-2025-05-07-11-25-24-799.png,
> image-2025-05-08-09-27-38-409.png, image-2025-05-08-09-27-59-002.png,
> image-2025-05-08-09-28-05-723.png
>
>
> [https://github.com/apache/cxf/pull/1777/files]
> When I used version 4.0.4 without any issues, all subsequent versions had
> problems.
> If the address is modified, it will be released multiple times.
>
> throw java.io.IOException: shutdownNow
> throw java.io.IOException: closed
>
> !image-2025-04-29-17-49-16-376.png!
> !image-2025-04-29-17-49-06-378.png!
> import jakarta.jws.WebMethod;
> import jakarta.jws.WebParam;
> import jakarta.jws.WebResult;
> import org.apache.commons.lang3.RandomUtils;
> import org.apache.cxf.binding.soap.SoapMessage;
> import org.apache.cxf.interceptor.Fault;
> import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
> import org.apache.cxf.phase.AbstractPhaseInterceptor;
> import org.apache.cxf.phase.Phase;
> import java.util.ArrayList;
> import java.util.List;
> public class TestCxf {
> public static void main(String[] args) throws InterruptedException {
> HTNGOutboundWebService byAddress = getByAddress();
> int i = 0;
> while (i <= 300) {
> Thread.ofVirtual().start(new Runnable() {
> @Override
> public void run() {
> try
> { byAddress.ratePlanSubmitRequest(""); }
> catch (Exception e) {
> if (!e.getCause().toString().contains("HTTP response"))
> { e.printStackTrace(); }
> }
> }
> } );
> i++;
> }
> Thread.sleep(100000);
> }
> public static class HTNGHeaderOutInterceptor1 extends
> AbstractPhaseInterceptor<SoapMessage> {
> static List<String> address = new ArrayList();
> public HTNGHeaderOutInterceptor1()
> { super(Phase.PREPARE_SEND); address.add("https://www.baidu.com");
> address.add("https://www.tencent.com"); }
> @Override
> public void handleMessage(SoapMessage message) throws Fault
> { int i1 = RandomUtils.secure().randomInt(0, 2);
> message.put(org.apache.cxf.message.Message.ENDPOINT_ADDRESS,
> address.get(i1)); }
> }
> public static HTNGOutboundWebService getByAddress()
> { JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
> jaxWsProxyFactoryBean.setServiceClass(HTNGOutboundWebService.class);
> jaxWsProxyFactoryBean.getOutInterceptors().add(new
> HTNGHeaderOutInterceptor1()); HTNGOutboundWebService soap =
> (HTNGOutboundWebService) jaxWsProxyFactoryBean.create(); return soap; }
> public interface HTNGOutboundWebService
> { @WebMethod(operationName = "RatePlan_SubmitRequest", action =
> "http://htng.org/PWSWG/2010/12/RatePlan_SubmitRequest") @WebResult(name =
> "OTA_HotelRatePlanNotifRS", targetNamespace =
> "http://www.opentravel.org/OTA/2003/05", partName =
> "OTA_HotelRatePlanNotifRS") public void ratePlanSubmitRequest(
> @WebParam(partName = "OTA_HotelRatePlanNotifRQ", name =
> "OTA_HotelRatePlanNotifRQ", targetNamespace =
> "http://www.opentravel.org/OTA/2003/05") String aa ); }
> }
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)