[ 
https://issues.apache.org/jira/browse/WSS-702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17762034#comment-17762034
 ] 

Daniel Kulp commented on WSS-702:
---------------------------------

Can you create a simple maven project or unit test that shows this? I've tried 
to reproduce it in CXF and was not able to. I updated several of the system 
tests to point the clients at ports that have nothing running as well as non 
existing endpoints on ports that do exist (404's) and the tests properly failed 
as expected, but didn't hang.   As an example of one change I tried: (but I 
tried similar changes in many of the various ws-security tests)
{noformat}
diff --git 
a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java
 
b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java
index 016b798b8d..9a57300d71 100644
--- 
a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java
+++ 
b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/security/WSSecurityClientTest.java
@@ -136,6 +136,8 @@ public class WSSecurityClientTest extends 
AbstractBusClientServerTestBase {

         return Arrays.asList(new TestParam[] {new TestParam(PORT, false),
                                               new TestParam(STAX_PORT, true),
+                                              new TestParam("2345", false),
+                                              new TestParam("2345", true),
         });
     }
{noformat}

> Process hangs when a signature is added and server not reachable
> ----------------------------------------------------------------
>
>                 Key: WSS-702
>                 URL: https://issues.apache.org/jira/browse/WSS-702
>             Project: WSS4J
>          Issue Type: Bug
>    Affects Versions: 3.0.1
>         Environment: Linux Debian
> JDK 17
> Apache CXF 4.0.2
> WSS4j 3.0.1 (and also 3.0.0)
>            Reporter: Cedric Tabin
>            Assignee: Colm O hEigeartaigh
>            Priority: Major
>
> Hello,
> We are using wss4j with the Apache CXF library to connect to a SOAP web 
> service. The latter has some security-enabled methods which involves 
> signature and encryption.
> When writing the unit tests related to this, we hit a strange problem: if the 
> signature is enabled (through `WSS4JOutInterceptor`), then the process hangs 
> indefinitely during marshalling without any exception regardless of any 
> timeout set in the configuration (although a "Connection refused" exception 
> should have been thrown right away since we are pointing to localhost:1234 
> but this is the case for any host).
> The main problem is if there is any connection issue on the client side and 
> the server is unreachable, the process will wait forever.
> Here is the code snipped involved:
> {code:java}
> final ClientImpl client = (ClientImpl) ClientProxy.getClient(port);
> //url points to localhost:1234 on which nothing is listening => connection 
> should be refused immediately
> client.getRequestContext().put(Message.ENDPOINT_ADDRESS, url);
> client.setThreadLocalRequestContext(true);
> client.setSynchronousTimeout(10000);
> final HTTPConduit httpConduit = (HTTPConduit) client.getConduit();
> HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
> httpClientPolicy.setReceiveTimeout(1200000);
> httpClientPolicy.setAllowChunking(true);
> httpClientPolicy.setMaxRetransmits(0);
> httpConduit.setClient(httpClientPolicy);
> TLSClientParameters tlsClientParameters = new TLSClientParameters();
> tlsClientParameters.setSecureSocketProtocol("TLSv1.3");
> tlsClientParameters.setDisableCNCheck(true);
> httpConduit.setTlsClientParameters(tlsClientParameters);
> {    
>     WSEncryptionPart sigTimestamp = new WSEncryptionPart("Timestamp", 
> WSConstants.WSU_NS, "");   
>     WSEncryptionPart sigBody = new WSEncryptionPart("Body", 
> WSConstants.URI_SOAP11_ENV, "");       
>     SignatureActionToken erpSignature = new SignatureActionToken();
>     erpSignature.setUser(getSignatureUser());      
>     erpSignature.setCryptoProperties(getOutSecurityPropFile());    
>     erpSignature.setKeyIdentifierId(WSConstants.BST_DIRECT_REFERENCE);   
>     erpSignature.setSignatureAlgorithm(WSConstants.RSA_SHA256);   
>     erpSignature.setDigestAlgorithm(WSConstants.SHA256);    
>     erpSignature.setParts(Arrays.asList(sigTimestamp, sigBody));
>     List<HandlerAction> actions = new ArrayList<>();    
>     actions.add(new HandlerAction(WSConstants.TS, null));    
>     actions.add(new HandlerAction(WSConstants.SIGN, erpSignature));    
>     Map<String, Object> properties = getOutSecurityProperties();
>     properties.put(WSHandlerConstants.HANDLER_ACTIONS, actions);    
>     ExtensibleWSS4JOutInterceptor wss4JOutInterceptor = new 
> ExtensibleWSS4JOutInterceptor(properties, getAfterSignatureCallbacks());    
>     wss4JOutInterceptor.setId("WSS4JOutSignatureInterceptor");         
>     //if this line is commented => the process fails directly (which is 
> correct) because nothing is listening at the endpoint    
>    client.getOutInterceptors().add(wss4JOutInterceptor);
> }
> String operation = jaxbElement.getName().getLocalPart();
> Object[] object = client.invoke(operation, jaxbElement.getValue());
> return object[0];
> {code}
> If the `wss4JOutInterceptor` is not added, the the process immediately fails 
> (which is expected).
> {noformat}
> org.apache.cxf.interceptor.Fault: Could not send Message.
> at 
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:67)
> at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
> at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:528)
> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:439)
> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:354)
> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:312)
> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:332)
> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:318)
>  Caused by: java.net.ConnectException: ConnectException invoking 
> [https://localhost:1234/Invalid:] Connection refused
> at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>  Method)
> at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
> at 
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> at 
> java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
> at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
> Caused by: java.net.ConnectException
> at 
> java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1055)
> at 
> java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)
> at 
> java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)
> at 
> java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)
> at 
> java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
> at 
> java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
> at 
> java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
> at 
> java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
> at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> at java.base/java.lang.Thread.run(Thread.java:833)
> Caused by: java.nio.channels.ClosedChannelException
> at 
> java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)
> at 
> java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)
> at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)
> at 
> java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)
> at 
> java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
> at 
> java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)
> {noformat}
> If any help, here is the stacktrace where the process hangs forever:
> {noformat}
>  at java.lang.Object.wait(Object.java)
>  at java.io.PipedInputStream.awaitSpace(PipedInputStream.java:273)
>  at java.io.PipedInputStream.receive(PipedInputStream.java:231)
>  at java.io.PipedOutputStream.write(PipedOutputStream.java:150)
>  at 
> org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:51)
>  at 
> org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.output.UTF8XmlOutput.write(UTF8XmlOutput.java:386)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.output.Encoded.write(Encoded.java:137)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.output.UTF8XmlOutput.writePrefix(UTF8XmlOutput.java:205)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.output.UTF8XmlOutput.writeName(UTF8XmlOutput.java:209)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.output.UTF8XmlOutput.beginStartTag(UTF8XmlOutput.java:138)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.output.ForkXmlOutput.beginStartTag(ForkXmlOutput.java:48)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.leafElement(XMLSerializer.java:288)
>  at 
> org.glassfish.jaxb.runtime.v2.model.impl.RuntimeBuiltinLeafInfoImpl$StringImplImpl.writeLeafElement(RuntimeBuiltinLeafInfoImpl.java:1115)
>  at 
> org.glassfish.jaxb.runtime.v2.model.impl.RuntimeBuiltinLeafInfoImpl$StringImplImpl.writeLeafElement(RuntimeBuiltinLeafInfoImpl.java:1092)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.writeLeafElement(TransducedAccessor.java:224)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:94)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:334)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:659)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:128)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:334)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:659)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:128)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:334)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:659)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:38)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:132)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:122)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:334)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:659)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:128)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:334)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:659)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:128)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:334)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:659)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:128)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:334)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:659)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:128)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:125)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:93)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:316)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:324)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:38)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:456)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:265)
>  at 
> org.glassfish.jaxb.runtime.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:197)
>  at 
> jakarta.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:86)
>  at 
> org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder.java:642)
>  at 
> org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:244)
>  at org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:238)
>  at 
> org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:118)
>  at 
> org.apache.cxf.wsdl.interceptors.BareOutInterceptor.handleMessage(BareOutInterceptor.java:68)
>  at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>  at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:528)
>  at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:439)
>  at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:354)
>  at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:312)
>  at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:332)
>  at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:318)
> {noformat}
> Any workaround is welcome.
> Thanks & best regards.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ws.apache.org
For additional commands, e-mail: dev-h...@ws.apache.org

Reply via email to