You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by aj...@apache.org on 2007/04/17 20:38:24 UTC
svn commit: r529704 - in /incubator/cxf/trunk/rt/bindings/coloc/src:
main/java/org/apache/cxf/binding/coloc/
test/java/org/apache/cxf/binding/coloc/
Author: ajaypaibir
Date: Tue Apr 17 11:38:22 2007
New Revision: 529704
URL: http://svn.apache.org/viewvc?view=rev&rev=529704
Log:
Updated coloc binding to check for same OperationInfo and Class instance of parts on sender/receiver end.
Modified:
incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java
incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocOutInterceptor.java
incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java
incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocOutInterceptorTest.java
incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocUtilTest.java
Modified: incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java?view=diff&rev=529704&r1=529703&r2=529704
==============================================================================
--- incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java (original)
+++ incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocMessageObserver.java Tue Apr 17 11:38:22 2007
@@ -59,6 +59,10 @@
Message inMsg = endpoint.getBinding().createMessage();
MessageImpl.copyContent(m, inMsg);
+ //Copy Request Context to Server inBound Message
+ //TODO a Context Filter Strategy required.
+ inMsg.putAll(m);
+
inMsg.put(COLOCATED, Boolean.TRUE);
inMsg.put(Message.REQUESTOR_ROLE, Boolean.FALSE);
inMsg.put(Message.INBOUND_MESSAGE, Boolean.TRUE);
Modified: incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocOutInterceptor.java?view=diff&rev=529704&r1=529703&r2=529704
==============================================================================
--- incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocOutInterceptor.java Tue Apr 17 11:38:22 2007
@@ -45,6 +45,7 @@
import org.apache.cxf.service.Service;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.EndpointInfo;
+//import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.transport.MessageObserver;
public class ColocOutInterceptor extends AbstractPhaseInterceptor<Message> {
@@ -120,6 +121,11 @@
Message m = getInBoundMessage(ex);
Message inMsg = ep.getBinding().createMessage();
MessageImpl.copyContent(m, inMsg);
+
+ //Copy Response Context to Client inBound Message
+ //TODO a Context Filter Strategy required.
+ inMsg.putAll(m);
+
inMsg.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
inMsg.put(Message.INBOUND_MESSAGE, Boolean.TRUE);
inMsg.setExchange(ex);
@@ -153,7 +159,7 @@
protected void setMessageObserver(MessageObserver observer) {
colocObserver = observer;
}
-
+
protected Server isColocated(List<Server> servers, Endpoint endpoint, BindingOperationInfo boi) {
if (servers != null) {
Service senderService = endpoint.getService();
@@ -163,15 +169,24 @@
Service receiverService = receiverEndpoint.getService();
EndpointInfo receiverEI = receiverEndpoint.getEndpointInfo();
if (receiverService.getName().equals(senderService.getName())
- && receiverEI.getName().equals(senderEI.getName())
- && receiverEI.getBinding().getOperation(boi.getName()) != null) {
- return s;
- //TODO Do a Strict check on the SEI Method from the implementor.
+ && receiverEI.getName().equals(senderEI.getName())) {
+ //Check For Operation Match.
+ BindingOperationInfo receiverOI = receiverEI.getBinding().getOperation(boi.getName());
+ if (receiverOI != null
+ && isSameOperationInfo(boi, receiverOI)) {
+ return s;
+ }
}
}
}
return null;
+ }
+
+ protected boolean isSameOperationInfo(BindingOperationInfo sender,
+ BindingOperationInfo receiver) {
+ return ColocUtil.isSameOperationInfo(sender.getOperationInfo(),
+ receiver.getOperationInfo());
}
public void setExchangeProperties(Exchange exchange, Endpoint ep) {
Modified: incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java?view=diff&rev=529704&r1=529703&r2=529704
==============================================================================
--- incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java (original)
+++ incubator/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java Tue Apr 17 11:38:22 2007
@@ -18,6 +18,8 @@
*/
package org.apache.cxf.binding.coloc;
+import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.logging.Level;
@@ -30,6 +32,10 @@
import org.apache.cxf.message.Exchange;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.phase.PhaseInterceptorChain;
+import org.apache.cxf.service.model.FaultInfo;
+import org.apache.cxf.service.model.MessageInfo;
+import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.service.model.OperationInfo;
public final class ColocUtil {
//private static final ResourceBundle BUNDLE = BundleUtils.getBundle(ColocInInterceptor.class);
@@ -106,4 +112,69 @@
return chain;
}
+ public static boolean isSameOperationInfo(OperationInfo oi1, OperationInfo oi2) {
+ return oi1.getName().equals(oi2.getName())
+ && isSameMessageInfo(oi1.getInput(), oi2.getInput())
+ && isSameMessageInfo(oi1.getOutput(), oi2.getOutput())
+ && isSameFaultInfo(oi1.getFaults(), oi2.getFaults());
+ }
+
+ public static boolean isSameMessageInfo(MessageInfo mi1, MessageInfo mi2) {
+ if ((mi1 == null && mi2 != null)
+ || (mi1 != null && mi2 == null)) {
+ return false;
+ }
+
+ if (mi1 != null && mi2 != null) {
+ List<MessagePartInfo> mpil1 = mi1.getMessageParts();
+ List<MessagePartInfo> mpil2 = mi2.getMessageParts();
+ if (mpil1.size() != mpil2.size()) {
+ return false;
+ }
+ int idx = 0;
+ for (MessagePartInfo mpi1 : mpil1) {
+ MessagePartInfo mpi2 = mi2.getMessagePartByIndex(idx);
+ if (!mpi1.getTypeClass().equals(mpi2.getTypeClass())) {
+ return false;
+ }
+ ++idx;
+ }
+ }
+ return true;
+ }
+
+ public static boolean isSameFaultInfo(Collection<FaultInfo> fil1,
+ Collection<FaultInfo> fil2) {
+ if ((fil1 == null && fil2 != null)
+ || (fil1 != null && fil2 == null)) {
+ return false;
+ }
+
+ if (fil1 != null && fil2 != null) {
+ if (fil1.size() != fil2.size()) {
+ return false;
+ }
+ for (FaultInfo fi1 : fil1) {
+ Iterator<FaultInfo> iter = fil2.iterator();
+ Class<?> fiClass1 = fi1.getProperty(Class.class.getName(),
+ Class.class);
+ boolean match = false;
+ while (iter.hasNext()) {
+ FaultInfo fi2 = iter.next();
+ Class<?> fiClass2 = fi2.getProperty(Class.class.getName(),
+ Class.class);
+ //Sender/Receiver Service Model not same for faults wr.t message names.
+ //So Compare Exception Class Instance.
+ if (fiClass1.equals(fiClass2)) {
+ match = true;
+ break;
+ }
+ }
+ if (!match) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
}
Modified: incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocOutInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocOutInterceptorTest.java?view=diff&rev=529704&r1=529703&r2=529704
==============================================================================
--- incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocOutInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocOutInterceptorTest.java Tue Apr 17 11:38:22 2007
@@ -372,6 +372,7 @@
}
private void verifyIsColocatedWithSameOperation() {
+ colocOut = new TestColocOutInterceptor1();
//Funtion Param
Server s1 = control.createMock(Server.class);
List<Server> list = new ArrayList<Server>();
@@ -421,6 +422,10 @@
public void invokeInboundChain(Exchange exchange, Endpoint ep) {
//No Op
- }
+ }
+
+ protected boolean isSameOperationInfo(BindingOperationInfo s, BindingOperationInfo r) {
+ return true;
+ }
}
}
Modified: incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocUtilTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocUtilTest.java?view=diff&rev=529704&r1=529703&r2=529704
==============================================================================
--- incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocUtilTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/coloc/src/test/java/org/apache/cxf/binding/coloc/ColocUtilTest.java Tue Apr 17 11:38:22 2007
@@ -22,6 +22,8 @@
import java.util.Iterator;
import java.util.List;
+import javax.xml.namespace.QName;
+
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.endpoint.Endpoint;
@@ -34,6 +36,14 @@
import org.apache.cxf.phase.PhaseManager;
import org.apache.cxf.phase.PhaseManagerImpl;
import org.apache.cxf.service.Service;
+import org.apache.cxf.service.model.FaultInfo;
+import org.apache.cxf.service.model.MessageInfo;
+import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.service.model.OperationInfo;
+import org.apache.headers.coloc.types.FaultDetailT;
+import org.apache.headers.coloc.types.InHeaderT;
+import org.apache.headers.coloc.types.OutHeaderT;
+import org.apache.headers.rpc_lit.PingMeFault;
import org.easymock.classextension.EasyMock;
import org.easymock.classextension.IMocksControl;
@@ -151,6 +161,70 @@
false,
iter.hasNext());
assertNotNull("OutFaultObserver should be set", chain.getFaultObserver());
+ }
+
+ @Test
+ public void testIsSameFaultInfo() {
+ OperationInfo oi = control.createMock(OperationInfo.class);
+
+ boolean match = ColocUtil.isSameFaultInfo(null, null);
+ assertEquals("Should return true", true, match);
+ List<FaultInfo> fil1 = new ArrayList<FaultInfo>();
+ match = ColocUtil.isSameFaultInfo(fil1, null);
+ assertEquals("Should not find a match", false, match);
+ match = ColocUtil.isSameFaultInfo(null, fil1);
+ assertEquals("Should not find a match", false, match);
+
+ List<FaultInfo> fil2 = new ArrayList<FaultInfo>();
+ match = ColocUtil.isSameFaultInfo(fil1, fil2);
+
+ QName fn1 = new QName("A", "B");
+ QName fn2 = new QName("C", "D");
+
+ FaultInfo fi1 = new FaultInfo(fn1, null, oi);
+ fi1.setProperty(Class.class.getName(), PingMeFault.class);
+ fil1.add(fi1);
+ FaultInfo fi2 = new FaultInfo(fn2, null, oi);
+ fi2.setProperty(Class.class.getName(), FaultDetailT.class);
+ match = ColocUtil.isSameFaultInfo(fil1, fil2);
+ assertEquals("Should not find a match", false, match);
+
+ FaultInfo fi3 = new FaultInfo(fn2, null, oi);
+ fi3.setProperty(Class.class.getName(), PingMeFault.class);
+ fil2.add(fi3);
+ match = ColocUtil.isSameFaultInfo(fil1, fil2);
+ assertEquals("Should find a match", true, match);
+ }
+
+ @Test
+ public void testIsSameMessageInfo() {
+ OperationInfo oi = control.createMock(OperationInfo.class);
+ boolean match = ColocUtil.isSameMessageInfo(null, null);
+ assertEquals("Should return true", true, match);
+ QName mn1 = new QName("A", "B");
+ QName mn2 = new QName("C", "D");
+
+ MessageInfo mi1 = new MessageInfo(oi, mn1);
+ MessageInfo mi2 = new MessageInfo(oi, mn2);
+ match = ColocUtil.isSameMessageInfo(mi1, null);
+ assertEquals("Should not find a match", false, match);
+ match = ColocUtil.isSameMessageInfo(null, mi2);
+ assertEquals("Should not find a match", false, match);
+
+ MessagePartInfo mpi = new MessagePartInfo(new QName("", "B"), null);
+ mpi.setTypeClass(InHeaderT.class);
+ mi1.addMessagePart(mpi);
+
+ mpi = new MessagePartInfo(new QName("", "D"), null);
+ mpi.setTypeClass(OutHeaderT.class);
+ mi2.addMessagePart(mpi);
+
+ match = ColocUtil.isSameMessageInfo(mi1, mi2);
+ assertEquals("Should not find a match", false, match);
+
+ mpi.setTypeClass(InHeaderT.class);
+ match = ColocUtil.isSameMessageInfo(mi1, mi2);
+ assertEquals("Should find a match", true, match);
}
}