Author: ay
Date: Thu Oct 25 11:57:34 2012
New Revision: 1402114

URL: http://svn.apache.org/viewvc?rev=1402114&view=rev
Log:
Merged revisions 1402092 via  svn merge from
https://svn.apache.org/repos/asf/cxf/branches/2.6.x-fixes

........
  r1402092 | ay | 2012-10-25 12:47:43 +0200 (Thu, 25 Oct 2012) | 9 lines
  
  Merged revisions 1402084 via  svn merge from
  https://svn.apache.org/repos/asf/cxf/trunk
  
  ........
    r1402084 | ay | 2012-10-25 12:29:56 +0200 (Thu, 25 Oct 2012) | 1 line
    
    [CXF-4601] invlaid WS-RM messages to a robust WS-RM endpoint may lead to NPE
  ........
  
........

Modified:
    cxf/branches/2.5.x-fixes/   (props changed)
    
cxf/branches/2.5.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java
    
cxf/branches/2.5.x-fixes/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java

Propchange: cxf/branches/2.5.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: 
cxf/branches/2.5.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java?rev=1402114&r1=1402113&r2=1402114&view=diff
==============================================================================
--- 
cxf/branches/2.5.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java
 (original)
+++ 
cxf/branches/2.5.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java
 Thu Oct 25 11:57:34 2012
@@ -47,6 +47,9 @@ public class RMInInterceptor extends Abs
     @Override
     public void handleFault(Message message) {
         message.put(MAPAggregator.class.getName(), true);
+        if (null == RMContextUtils.getProtocolVariation(message)) {
+            return;
+        }
         if 
(MessageUtils.isTrue(message.get(RMMessageConstants.DELIVERING_ROBUST_ONEWAY))) 
{
             // revert the delivering entry from the destination sequence
             try {

Modified: 
cxf/branches/2.5.x-fixes/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java?rev=1402114&r1=1402113&r2=1402114&view=diff
==============================================================================
--- 
cxf/branches/2.5.x-fixes/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java
 (original)
+++ 
cxf/branches/2.5.x-fixes/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java
 Thu Oct 25 11:57:34 2012
@@ -283,7 +283,89 @@ public class RMInInterceptorTest extends
         control.replay(); 
         // TODO
     }
+
+    @Test
+    public void testProcessInvalidMessage() throws SequenceFault, RMException {
+        interceptor = new RMInInterceptor();
+        
+        Message message = control.createMock(Message.class);
+        Exchange exchange = control.createMock(Exchange.class);
+        org.apache.cxf.transport.Destination destination = 
+            control.createMock(org.apache.cxf.transport.Destination.class);
+        EasyMock.expect(message.getExchange()).andReturn(exchange).anyTimes();
+        
EasyMock.expect(exchange.getDestination()).andReturn(destination).anyTimes();
+        EasyMock.expect(exchange.getOutMessage()).andReturn(null).anyTimes();
+        
EasyMock.expect(exchange.getOutFaultMessage()).andReturn(null).anyTimes();
+        control.replay();
+
+        try {
+            interceptor.handle(message);
+            fail("must reject the invalid rm message");
+        } catch (Exception e) {
+            assertTrue(e instanceof RMException);
+            // verify a partial error text match to exclude an unexpected 
exception
+            // (see WSA_REQUIRED_EXC in Messages.properties)
+            final String text = "WS-Addressing is required";
+            assertTrue(e.getMessage() != null 
+                && e.getMessage().indexOf(text) >= 0);
+        }
+        
+        control.reset();
+        EasyMock.expect(message.getExchange()).andReturn(exchange).anyTimes();
+        AddressingPropertiesImpl maps = 
control.createMock(AddressingPropertiesImpl.class);
+        
EasyMock.expect(maps.getNamespaceURI()).andReturn(Names200408.WSA_NAMESPACE_NAME).anyTimes();
+        
EasyMock.expect(message.get(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND)).andReturn(maps);
+        AttributedURIType actionURI = 
control.createMock(AttributedURIType.class);
+        EasyMock.expect(maps.getAction()).andReturn(actionURI).times(2);
+        EasyMock.expect(actionURI.getValue()).andReturn("foo");
+        
EasyMock.expect(message.get(RMMessageConstants.RM_PROPERTIES_INBOUND)).andReturn(rmps);
+        
EasyMock.expect(exchange.getDestination()).andReturn(destination).anyTimes();
+        EasyMock.expect(exchange.getOutMessage()).andReturn(null).anyTimes();
+        
EasyMock.expect(exchange.getOutFaultMessage()).andReturn(null).anyTimes();
+
+        control.replay();
+        
+        try {
+            interceptor.handle(message);
+            fail("must reject the invalid rm message");
+        } catch (Exception e) {
+            System.out.println(e);
+            assertTrue(e instanceof RMException);
+            // verify a partial error text match to exclude an unexpected 
exception
+            // (see WSRM_REQUIRED_EXC in Messages.properties)
+            final String text = "WS-ReliableMessaging is required";
+            assertTrue(e.getMessage() != null 
+                && e.getMessage().indexOf(text) >= 0);
+        }
+    }
     
+    @Test
+    public void testProcessInvalidMessageOnFault() throws SequenceFault, 
RMException {
+        interceptor = new RMInInterceptor();
+        
+        Message message = control.createMock(Message.class);
+        Exchange exchange = control.createMock(Exchange.class);
+        EasyMock.expect(message.getExchange()).andReturn(exchange).anyTimes();
+        control.replay();
+        
+        try {
+            interceptor.handleFault(message);
+        } catch (Exception e) {
+            fail("unexpected exception thrown from handleFault: " + e);
+        }
+        
+        control.reset();
+        EasyMock.expect(message.getExchange()).andReturn(exchange).anyTimes();
+        
EasyMock.expect(message.get(RMMessageConstants.DELIVERING_ROBUST_ONEWAY)).andReturn(true).anyTimes();
+        control.replay();
+        
+        try {
+            interceptor.handleFault(message);
+        } catch (Exception e) {
+            fail("unexpected exception thrown from handleFault: " + e);
+        }
+    }
+
     private Message setupInboundMessage(String action, boolean serverSide) 
throws RMException {
         Message message = control.createMock(Message.class);
         Exchange exchange = control.createMock(Exchange.class);


Reply via email to