Author: dkulp Date: Fri Feb 17 15:31:23 2012 New Revision: 1245613 URL: http://svn.apache.org/viewvc?rev=1245613&view=rev Log: Merged revisions 1241648 via svn merge from https://svn.us.apache.org/repos/asf/cxf/branches/2.4.x-fixes
........ r1241648 | dkulp | 2012-02-07 16:47:08 -0500 (Tue, 07 Feb 2012) | 11 lines Merged revisions 1241645 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.5.x-fixes ........ r1241645 | dkulp | 2012-02-07 16:42:30 -0500 (Tue, 07 Feb 2012) | 3 lines [CXF-3916] If a response message doesn't have a RelatesTo header, do some additional checking to see if it should be marked a partial response or not. ........ ........ Modified: cxf/branches/2.3.x-fixes/ (props changed) cxf/branches/2.3.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java Propchange: cxf/branches/2.3.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.3.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java?rev=1245613&r1=1245612&r2=1245613&view=diff ============================================================================== --- cxf/branches/2.3.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java (original) +++ cxf/branches/2.3.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java Fri Feb 17 15:31:23 2012 @@ -621,6 +621,18 @@ public class MAPAggregator extends Abstr Names.HEADER_REQUIRED_NAME)); } } + if (MessageUtils.isPartialResponse(message)) { + // marked as a partial response, let's see if it really is + MessageInfo min = message.get(MessageInfo.class); + MessageInfo mout = message.getExchange().getOutMessage().get(MessageInfo.class); + if (min != null && mout != null + && min.getOperation() == mout.getOperation() + && message.getContent(List.class) != null) { + // the in and out messages are on the same operation + // and we were able to get a response for it. + message.remove(Message.PARTIAL_RESPONSE_MESSAGE); + } + } } return continueProcessing; } Modified: cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java?rev=1245613&r1=1245612&r2=1245613&view=diff ============================================================================== --- cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java (original) +++ cxf/branches/2.3.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java Fri Feb 17 15:31:23 2012 @@ -22,10 +22,21 @@ package org.apache.cxf.systest.ws.addr_f import java.io.ByteArrayOutputStream; import java.net.URL; import java.util.Map; +import java.util.List; + import javax.xml.ws.BindingProvider; import javax.xml.ws.soap.SOAPFaultException; + +import org.apache.cxf.binding.soap.SoapMessage; +import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor; +import org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor; +import org.apache.cxf.endpoint.Client; import org.apache.cxf.feature.LoggingFeature; +import org.apache.cxf.frontend.ClientProxy; +import org.apache.cxf.headers.Header; +import org.apache.cxf.interceptor.Fault; +import org.apache.cxf.phase.Phase; import org.apache.cxf.systest.ws.AbstractWSATestBase; import org.apache.cxf.systest.ws.addr_fromjava.client.AddNumberImpl; import org.apache.cxf.systest.ws.addr_fromjava.client.AddNumberImplService; @@ -192,4 +203,43 @@ public class WSAFromJavaTest extends Abs long end = System.currentTimeMillis(); assertTrue((end - start) < 50000); } + + static class RemoveRelatesToHeaderInterceptor extends AbstractSoapInterceptor { + public RemoveRelatesToHeaderInterceptor() { + super(Phase.READ); + addAfter(ReadHeadersInterceptor.class.getName()); + } + @Override + public void handleMessage(SoapMessage message) throws Fault { + List<Header> headers = message.getHeaders(); + Header h2 = null; + for (Header h : headers) { + if ("RelatesTo".equals(h.getName().getLocalPart())) { + h2 = h; + } + } + headers.remove(h2); + } + } + + @Test + public void testNoRelatesToHeader() throws Exception { + new LoggingFeature().initialize(this.getBus()); + AddNumberImpl port = getPort(); + + Client c = ClientProxy.getClient(port); + c.getInInterceptors().add(new RemoveRelatesToHeaderInterceptor()); + + + long start = System.currentTimeMillis(); + port.addNumbers(1, 2); + try { + port.addNumbers3(-1, -1); + } catch (Exception ex) { + //ignore, expected + } + long end = System.currentTimeMillis(); + assertTrue((end - start) < 50000); + } + } \ No newline at end of file
