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

Colm O hEigeartaigh commented on CXF-7748:
------------------------------------------

Do you have a test-case to reproduce the problem? I tried with a pure CXF 
client making a one-way call and it seems to work OK:

https://gitbox.apache.org/repos/asf?p=cxf.git;a=commit;h=c78b022fc859105f62a4fac3c8ba788177d7e0dc

 

> WS-Addressing for One Way + Signature fails
> -------------------------------------------
>
>                 Key: CXF-7748
>                 URL: https://issues.apache.org/jira/browse/CXF-7748
>             Project: CXF
>          Issue Type: Bug
>          Components: WS-* Components
>    Affects Versions: 3.1.14
>            Reporter: Joerg Kessler
>            Priority: Major
>
> I am using CXF together in Apache Camel. I want to enable WS-Adressing for 
> the provider including signing these headers by WS-Security if requested . 
> This should especially work for One Way requests. When I set up this scenario 
> (Camel-CXF to Camel-CXF including Signature) I get the error
> org.apache.cxf.interceptor.Fault: No configured signature username detected
> The call stack is
> 2018 06 01 
> 06:57:37#+00#WARN#org.apache.cxf.phase.PhaseInterceptorChain##P1369096596#http-bio-8041-exec-5#na#wda71513f#jkt01ifl#web#w7e2e2211#na#na#na#na#Interceptor
>  for 
> \{http://xi.com/xiveri/source_runtime}JKCXF_TEST_IN\#\{http://xi.com/xiveri/source_runtime}JKCXF_TEST_IN
>  has thrown exception, unwinding noworg.apache.cxf.interceptor.Fault: No 
> configured signature username detected at 
> org.apache.cxf.ws.security.wss4j.policyhandlers.AsymmetricBindingHandler.doSignBeforeEncrypt(AsymmetricBindingHandler.java:232)
>  at 
> org.apache.cxf.ws.security.wss4j.policyhandlers.AsymmetricBindingHandler.handleBinding(AsymmetricBindingHandler.java:114)
>  at 
> org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JOutInterceptor$PolicyBasedWSS4JOutInterceptorInternal.handleMessageInternal(PolicyBasedWSS4JOutInterceptor.java:190)
>  at 
> org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JOutInterceptor$PolicyBasedWSS4JOutInterceptorInternal.handleMessage(PolicyBasedWSS4JOutInterceptor.java:109)
>  at 
> org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JOutInterceptor$PolicyBasedWSS4JOutInterceptorInternal.handleMessage(PolicyBasedWSS4JOutInterceptor.java:96)
>  at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>  at 
> org.apache.cxf.ws.addressing.impl.InternalContextUtils.rebaseResponse(InternalContextUtils.java:280)
>  at 
> org.apache.cxf.ws.addressing.impl.MAPAggregatorImpl.mediate(MAPAggregatorImpl.java:469)
>  at 
> org.apache.cxf.ws.addressing.impl.MAPAggregatorImpl.handleMessage(MAPAggregatorImpl.java:142)
>  at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>  at 
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>  at 
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)
>  at 
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
>  at 
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
>  at 
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
>  at 
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:189)
>  at 
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:303)
>  at 
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:222)
>  at javax.servlet.http.HttpServlet.service(HttpServlet.java:755) at 
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:278)
>  at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
>  at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>  at 
> com.sap.esb.security.cloud.authentication.CloudAuthenticationFilter.doFilter(CloudAuthenticationFilter.java:92)
>  at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>  at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>  at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>  at 
> com.sap.core.communication.server.CertValidatorFilter.doFilter(CertValidatorFilter.java:331)
>  at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>  at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>  at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
>  at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
>  at 
> org.eclipse.virgo.web.enterprise.security.valve.OpenEjbSecurityInitializationValve.invoke(OpenEjbSecurityInitializationValve.java:44)
>  at 
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
>  at 
> com.sap.core.jpaas.security.auth.service.lib.AbstractAuthenticator.invoke(AbstractAuthenticator.java:170)
>  at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
> at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) 
> at 
> com.sap.core.tenant.valve.TenantValidationValve.invokeNextValve(TenantValidationValve.java:182)
>  at 
> com.sap.core.tenant.valve.TenantValidationValve.invoke(TenantValidationValve.java:97)
>  at 
> com.sap.js.statistics.tomcat.valve.RequestTracingValve.callNextValve(RequestTracingValve.java:82)
>  at 
> com.sap.js.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:49)
>  at 
> com.sap.core.js.monitoring.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:27)
>  at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
> at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>  at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) 
> at 
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
>  at 
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
>  at 
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
>  at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
>  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)
>  at 
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>  at java.lang.Thread.run(Thread.java:807) Caused by: 
> org.apache.cxf.ws.policy.PolicyException: No configured signature username 
> detected at 
> org.apache.cxf.ws.security.wss4j.policyhandlers.AbstractCommonBindingHandler.unassertPolicy(AbstractCommonBindingHandler.java:92)
>  at 
> org.apache.cxf.ws.security.wss4j.policyhandlers.AbstractBindingBuilder.getSignatureBuilder(AbstractBindingBuilder.java:1831)
>  at 
> org.apache.cxf.ws.security.wss4j.policyhandlers.AsymmetricBindingHandler.doSignature(AsymmetricBindingHandler.java:711)
>  at 
> org.apache.cxf.ws.security.wss4j.policyhandlers.AsymmetricBindingHandler.doSignBeforeEncrypt(AsymmetricBindingHandler.java:188)
>  ... 52 common frames omitted
>  
> As you can see from the call stack the error occurs in MAPAggregatorImpl in a 
> code line
> InternalContextUtils.rebaseResponse(maps.getReplyTo(),
>  maps,
>  message);
> OneWay messages do not have a response. Therefore I think this code should 
> never be called in this case. The code seems to be meant for decoupled 
> endpoints which is not the case in my scenario. I have replaced the lines 
> 467-473
> i if (isOneway
>  || !ContextUtils.isGenericAddress(maps.getReplyTo())) {
>  InternalContextUtils.rebaseResponse(maps.getReplyTo(),
>  maps,
>  message);
>  } 
>  if (!isOneway) {
> by the lines 
> if (isOneway
>  && !ContextUtils.isGenericAddress(maps.getReplyTo())) {
>  InternalContextUtils.rebaseResponse(maps.getReplyTo(),
>  maps,
>  message);
>  } 
>  if (!isOneway) {
>  if(!ContextUtils.isGenericAddress(maps.getReplyTo())){
>  InternalContextUtils.rebaseResponse(maps.getReplyTo(),
>  maps,
>  message); 
>  }
> This ensures that the rebaseResponse method is only called for OneWay 
> messages if decoupled endpoints are used. After that change the test method 
> testResponderInboundNoMessageIdOneWay() fails because it is executed for non 
> decoupled scenario where there should be no inbound response message. So this 
> test should be executed for the decoupled use case:
>  @Test()
>  public void testResponderInboundNoMessageIdOneWay() throws Exception {
>  SetupMessageArgs args = new SetupMessageArgs();
>  args.requestor = false;
>  args.outbound = false;
>  args.oneway = true;
>  args.usingAddressing = false;
>  args.mapsInContext = false;
>  args.decoupled = true;
>  args.zeroLengthAction = true;
>  args.fault = false;
>  args.noMessageId = true;
>  
>  Message message = setUpMessage(args);
>  aggregator.setAllowDuplicates(false);
>  aggregator.mediate(message, true);
>  control.verify();
>  verifyMessage(message, false, false, false /*check*/);
>  } 
> Since the code is unchanged in CXF 3.2.4 I expect this problem to be present 
> also there.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to