Repository: cxf
Updated Branches:
  refs/heads/3.0.x-fixes 164762235 -> 67f8c947e


[CXF-6590] Fix memory leak with fault responses that don't have a relatesTo 
header


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/80c3ac62
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/80c3ac62
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/80c3ac62

Branch: refs/heads/3.0.x-fixes
Commit: 80c3ac62fd401aa293a839a4725f017bfb78325f
Parents: 1647622
Author: Daniel Kulp <[email protected]>
Authored: Wed Sep 16 12:58:14 2015 -0400
Committer: Daniel Kulp <[email protected]>
Committed: Wed Sep 16 14:14:56 2015 -0400

----------------------------------------------------------------------
 .../apache/cxf/ws/addressing/soap/MAPCodec.java | 25 ++++++++++++++------
 1 file changed, 18 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/80c3ac62/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
----------------------------------------------------------------------
diff --git 
a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java 
b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
index a324593..c546edf 100644
--- a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
+++ b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
@@ -842,14 +842,25 @@ public class MAPCodec extends AbstractSoapInterceptor {
                     }
                 }
             }
-        } else if (maps == null && isRequestor(message)) {
-            Message m = message.getExchange().getOutMessage();
-            maps = ContextUtils.retrieveMAPs(m, false, true, false);
-            if (maps != null) {
-                Exchange ex = 
uncorrelatedExchanges.get(maps.getMessageID().getValue());
-                if (ex == message.getExchange()) {
+        } else if (isRequestor(message)) {
+            if (maps == null) {
+                Message m = message.getExchange().getOutMessage();
+                maps = ContextUtils.retrieveMAPs(m, false, true, false);
+                if (maps != null) {
+                    Exchange ex = 
uncorrelatedExchanges.get(maps.getMessageID().getValue());
+                    if (ex == message.getExchange()) {
+                        
uncorrelatedExchanges.remove(maps.getMessageID().getValue());
+                        LOG.log(Level.WARNING, 
"RESPONSE_NOT_USING_WSADDRESSING");
+                    }
+                }
+            } else if (maps.getRelatesTo() == null
+                && maps.getAction() != null
+                && 
Names.WSA_DEFAULT_FAULT_ACTION.equals(maps.getAction().getValue())) {
+                //there is an Action header that points to a fault and no 
relatesTo.  Use the out map for the ID
+                Message m = message.getExchange().getOutMessage();
+                maps = ContextUtils.retrieveMAPs(m, false, true, false);
+                if (maps != null) {
                     
uncorrelatedExchanges.remove(maps.getMessageID().getValue());
-                    LOG.log(Level.WARNING, "RESPONSE_NOT_USING_WSADDRESSING");
                 }
             }
         }

Reply via email to