You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ay...@apache.org on 2013/02/28 22:53:07 UTC
svn commit: r1451375 - in /cxf/trunk:
rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/
rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/
rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/
systests/ws-rm/src/test/java/org/apache/cxf/systest/ws/rm/
Author: ay
Date: Thu Feb 28 21:53:07 2013
New Revision: 1451375
URL: http://svn.apache.org/r1451375
Log:
[CXF-4863] TerminateSequenceResponse must be returned to WS-RM 1.1 TermianteSequence
Modified:
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10AImpl.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10Impl.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder11Impl.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RM11Constants.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ServantTest.java
cxf/trunk/systests/ws-rm/src/test/java/org/apache/cxf/systest/ws/rm/ProtocolVariationsTest.java
Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder.java Thu Feb 28 21:53:07 2013
@@ -82,6 +82,13 @@ public interface EncoderDecoder {
Class<?> getTerminateSequenceType();
/**
+ * Get the class used for the TerminateSequenceResponseType.
+ *
+ * @return class
+ */
+ Class<?> getTerminateSequenceResponseType();
+
+ /**
* Builds an element containing WS-RM headers. This adds the appropriate WS-RM and WS-A namespace
* declarations to the element, and then adds any WS-RM headers set in the supplied properties as child
* elements.
Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10AImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10AImpl.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10AImpl.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10AImpl.java Thu Feb 28 21:53:07 2013
@@ -86,6 +86,10 @@ public final class EncoderDecoder10AImpl
return org.apache.cxf.ws.rm.v200502wsa15.TerminateSequenceType.class;
}
+ public Class<?> getTerminateSequenceResponseType() {
+ return null;
+ }
+
private static JAXBContext getContext() throws JAXBException {
synchronized (EncoderDecoder10AImpl.class) {
if (jaxbContext == null) {
Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10Impl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10Impl.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10Impl.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder10Impl.java Thu Feb 28 21:53:07 2013
@@ -86,6 +86,10 @@ public final class EncoderDecoder10Impl
return org.apache.cxf.ws.rm.v200502.TerminateSequenceType.class;
}
+ public Class<?> getTerminateSequenceResponseType() {
+ return null;
+ }
+
private static JAXBContext getContext() throws JAXBException {
synchronized (EncoderDecoder10Impl.class) {
if (jaxbContext == null) {
Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder11Impl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder11Impl.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder11Impl.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/EncoderDecoder11Impl.java Thu Feb 28 21:53:07 2013
@@ -87,6 +87,10 @@ public final class EncoderDecoder11Impl
return org.apache.cxf.ws.rm.v200702.TerminateSequenceType.class;
}
+ public Class<?> getTerminateSequenceResponseType() {
+ return org.apache.cxf.ws.rm.v200702.TerminateSequenceResponseType.class;
+ }
+
private static JAXBContext getContext() throws JAXBException {
synchronized (EncoderDecoder11Impl.class) {
if (jaxbContext == null) {
Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java Thu Feb 28 21:53:07 2013
@@ -95,6 +95,7 @@ public class Proxy {
TerminateSequenceType ts = new TerminateSequenceType();
ts.setIdentifier(ss.getIdentifier());
+ ts.setLastMsgNumber(ss.getCurrentMessageNr());
EncoderDecoder codec = protocol.getCodec();
invoke(oi, protocol, new Object[] {codec.convertToSend(ts)}, null);
}
Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RM11Constants.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RM11Constants.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RM11Constants.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RM11Constants.java Thu Feb 28 21:53:07 2013
@@ -64,6 +64,9 @@ public final class RM11Constants extends
public static final QName TERMINATE_SEQUENCE_QNAME =
new QName(NAMESPACE_URI, "TerminateSequence");
+ public static final QName TERMINATE_SEQUENCE_RESPONSE_QNAME =
+ new QName(NAMESPACE_URI, "TerminateSequenceResponse");
+
public static final QName TERMINATE_SEQUENCE_ANONYMOUS_QNAME =
new QName(NAMESPACE_URI, "TerminateSequenceAnonymous");
@@ -181,6 +184,10 @@ public final class RM11Constants extends
return TERMINATE_SEQUENCE_ACTION;
}
+ public String getTerminateSequenceResponseAction() {
+ return TERMINATE_SEQUENCE_RESPONSE_ACTION;
+ }
+
public String getCloseSequenceAction() {
return CLOSE_SEQUENCE_ACTION;
}
@@ -223,6 +230,10 @@ public final class RM11Constants extends
return TERMINATE_SEQUENCE_QNAME;
}
+ public QName getTerminateSequenceResponseOperationName() {
+ return TERMINATE_SEQUENCE_RESPONSE_QNAME;
+ }
+
public QName getTerminateSequenceAnonymousOperationName() {
return TERMINATE_SEQUENCE_ANONYMOUS_QNAME;
}
Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java Thu Feb 28 21:53:07 2013
@@ -83,6 +83,7 @@ public class RMEndpoint {
private static final String CREATE_PART_NAME = "create";
private static final String CREATE_RESPONSE_PART_NAME = "createResponse";
private static final String TERMINATE_PART_NAME = "terminate";
+ private static final String TERMINATE_RESPONSE_PART_NAME = "terminateResponse";
private static Schema rmSchema;
@@ -481,6 +482,7 @@ public class RMEndpoint {
RMConstants consts = protocol.getConstants();
operationInfo = ii.addOperation(consts.getTerminateSequenceOperationName());
+
messageInfo = operationInfo.createMessage(consts.getTerminateSequenceOperationName(),
MessageInfo.Type.INPUT);
operationInfo.setInput(messageInfo.getName().getLocalPart(), messageInfo);
@@ -488,6 +490,17 @@ public class RMEndpoint {
partInfo.setElementQName(consts.getTerminateSequenceOperationName());
partInfo.setElement(true);
partInfo.setTypeClass(protocol.getCodec().getTerminateSequenceType());
+ if (RM11Constants.NAMESPACE_URI.equals(protocol.getWSRMNamespace())) {
+ messageInfo = operationInfo.createMessage(
+ RM11Constants.INSTANCE.getTerminateSequenceResponseOperationName(),
+ MessageInfo.Type.OUTPUT);
+ operationInfo.setOutput(messageInfo.getName().getLocalPart(), messageInfo);
+ partInfo = messageInfo.addMessagePart(TERMINATE_RESPONSE_PART_NAME);
+ partInfo.setElementQName(RM11Constants.INSTANCE.getTerminateSequenceResponseOperationName());
+ partInfo.setElement(true);
+ partInfo.setTypeClass(protocol.getCodec().getTerminateSequenceResponseType());
+ partInfo.setIndex(0);
+ }
// for the TerminateSequence operation to an anonymous endpoint
operationInfo = ii.addOperation(consts.getTerminateSequenceAnonymousOperationName());
@@ -560,7 +573,13 @@ public class RMEndpoint {
boi = bi.buildOperation(consts.getTerminateSequenceOperationName(),
consts.getTerminateSequenceOperationName().getLocalPart(), null);
- addAction(boi, consts.getTerminateSequenceAction());
+
+ if (RM11Constants.NAMESPACE_URI.equals(protocol.getWSRMNamespace())) {
+ addAction(boi, consts.getTerminateSequenceAction(),
+ RM11Constants.INSTANCE.getTerminateSequenceResponseAction());
+ } else {
+ addAction(boi, consts.getTerminateSequenceAction());
+ }
bi.addOperation(boi);
boi = bi.buildOperation(consts.getTerminateSequenceAnonymousOperationName(),
Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java Thu Feb 28 21:53:07 2013
@@ -34,6 +34,7 @@ import org.apache.cxf.message.Message;
import org.apache.cxf.service.invoker.Invoker;
import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.ws.addressing.AddressingProperties;
+import org.apache.cxf.ws.addressing.ContextUtils;
import org.apache.cxf.ws.rm.manager.DestinationPolicyType;
import org.apache.cxf.ws.rm.v200702.AcceptType;
import org.apache.cxf.ws.rm.v200702.CreateSequenceResponseType;
@@ -41,6 +42,7 @@ import org.apache.cxf.ws.rm.v200702.Crea
import org.apache.cxf.ws.rm.v200702.Expires;
import org.apache.cxf.ws.rm.v200702.Identifier;
import org.apache.cxf.ws.rm.v200702.OfferType;
+import org.apache.cxf.ws.rm.v200702.TerminateSequenceResponseType;
import org.apache.cxf.ws.rm.v200702.TerminateSequenceType;
/**
@@ -84,7 +86,10 @@ public class Servant implements Invoker
createSequenceResponse(createResponse, protocol);
} else if (RM10Constants.INSTANCE.getTerminateSequenceOperationName().equals(oi.getName())
|| RM11Constants.INSTANCE.getTerminateSequenceOperationName().equals(oi.getName())) {
- terminateSequence(exchange.getInMessage());
+ Object tsr = terminateSequence(exchange.getInMessage());
+ if (tsr != null) {
+ return Collections.singletonList(tsr);
+ }
}
return null;
@@ -196,7 +201,7 @@ public class Servant implements Invoker
}
}
- public void terminateSequence(Message message) {
+ public Object terminateSequence(Message message) {
LOG.fine("Terminating sequence");
final ProtocolVariation protocol = RMContextUtils.getProtocolVariation(message);
@@ -212,7 +217,7 @@ public class Servant implements Invoker
if (null == terminatedSeq) {
// TODO
LOG.severe("No such sequence.");
- return;
+ return null;
}
destination.removeSequence(terminatedSeq);
@@ -246,7 +251,23 @@ public class Servant implements Invoker
break;
}
}
-
+ TerminateSequenceResponseType terminateResponse = null;
+ if (RM11Constants.NAMESPACE_URI.equals(protocol.getWSRMNamespace())) {
+ AddressingProperties maps = RMContextUtils.retrieveMAPs(message, false, false);
+ Message outMessage = message.getExchange().getOutMessage();
+
+ if (null == outMessage) {
+ // outMessage may be null e.g. if ReplyTo is not set for TS
+ outMessage = ContextUtils.createMessage(message.getExchange());
+ message.getExchange().setOutMessage(outMessage);
+ }
+ if (null != outMessage) {
+ RMContextUtils.storeMAPs(maps, outMessage, false, false);
+ }
+ terminateResponse = new TerminateSequenceResponseType();
+ terminateResponse.setIdentifier(sid);
+ }
+ return terminateResponse;
}
Object getParameter(Message message) {
Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java Thu Feb 28 21:53:07 2013
@@ -412,6 +412,10 @@ public class RMSoapInterceptor extends A
boi = bi.getOperation(consts.getSequenceAckOperationName());
} else if (consts.getTerminateSequenceAction().equals(action)) {
boi = bi.getOperation(consts.getTerminateSequenceOperationName());
+ } else if (RM11Constants.INSTANCE.getTerminateSequenceResponseAction().equals(action)) {
+ //TODO add server-side TSR handling
+ boi = bi.getOperation(RM11Constants.INSTANCE.getTerminateSequenceOperationName());
+ isOneway = false;
} else if (consts.getCloseSequenceAction().equals(action)) {
boi = bi.getOperation(consts.getCloseSequenceOperationName());
}
@@ -427,7 +431,8 @@ public class RMSoapInterceptor extends A
// server originated oneway RM protocol messages.
//
- if (!consts.getCreateSequenceResponseAction().equals(action)) {
+ if (!consts.getCreateSequenceResponseAction().equals(action)
+ && !RM11Constants.INSTANCE.getTerminateSequenceResponseAction().equals(action)) {
LOG.fine("Changing requestor role from " + message.get(Message.REQUESTOR_ROLE)
+ " to false");
Object originalRequestorRole = message.get(Message.REQUESTOR_ROLE);
Modified: cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ServantTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ServantTest.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ServantTest.java (original)
+++ cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ServantTest.java Thu Feb 28 21:53:07 2013
@@ -38,7 +38,10 @@ import org.apache.cxf.ws.rm.manager.Dest
import org.apache.cxf.ws.rm.v200502.CreateSequenceResponseType;
import org.apache.cxf.ws.rm.v200502.CreateSequenceType;
import org.apache.cxf.ws.rm.v200502.Expires;
+import org.apache.cxf.ws.rm.v200502.Identifier;
import org.apache.cxf.ws.rm.v200502.OfferType;
+import org.apache.cxf.ws.rm.v200502.TerminateSequenceType;
+import org.apache.cxf.ws.rm.v200702.TerminateSequenceResponseType;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
@@ -213,4 +216,91 @@ public class ServantTest extends Assert
return message;
}
+
+ @Test
+ public void testTerminateSequence() throws SequenceFault {
+ RMEndpoint rme = control.createMock(RMEndpoint.class);
+ RMManager manager = new RMManager();
+ Destination destination = new Destination(rme);
+ Source source = new Source(rme);
+ DestinationSequence seq = control.createMock(DestinationSequence.class);
+ org.apache.cxf.ws.rm.v200702.Identifier sid = new org.apache.cxf.ws.rm.v200702.Identifier();
+ sid.setValue("123");
+ EasyMock.expect(seq.getIdentifier()).andReturn(sid).anyTimes();
+
+ EasyMock.expect(rme.getDestination()).andReturn(destination).anyTimes();
+ EasyMock.expect(rme.getManager()).andReturn(manager).anyTimes();
+ EasyMock.expect(rme.getSource()).andReturn(source).anyTimes();
+
+ control.replay();
+
+ Servant servant = new Servant(rme);
+
+ destination.addSequence(seq, false);
+ verifyTerminateSequenceDefault(servant, manager, "123", ProtocolVariation.RM10WSA200408);
+
+ destination.addSequence(seq, false);
+ verifyTerminateSequenceDefault(servant, manager, "123", ProtocolVariation.RM11WSA200508);
+ }
+
+ private static Message createTestTerminateSequenceMessage(String sidstr, ProtocolVariation protocol) {
+ Message message = new MessageImpl();
+ Exchange exchange = new ExchangeImpl();
+ exchange.setInMessage(message);
+
+ message.put(Message.REQUESTOR_ROLE, Boolean.FALSE);
+
+ AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
+ String msgId = "urn:uuid:12345-" + Math.random();
+ AttributedURIType id = ContextUtils.getAttributedURI(msgId);
+ maps.setMessageID(id);
+
+ maps.setAction(ContextUtils.getAttributedURI(RM10Constants.INSTANCE.getTerminateSequenceAction()));
+ maps.setTo(ContextUtils.getAttributedURI(SERVICE_URL));
+
+ maps.setReplyTo(RMUtils.createReference(DECOUPLED_URL));
+
+ message.put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND, maps);
+
+ TerminateSequenceType ts = new TerminateSequenceType();
+ Identifier sid = new Identifier();
+ sid.setValue(sidstr);
+ ts.setIdentifier(sid);
+ Object tst = ProtocolVariation.RM10WSA200408.getWSRMNamespace().equals(protocol.getWSRMNamespace())
+ ? ts : ProtocolVariation.RM10WSA200408.getCodec().convertReceivedTerminateSequence(ts);
+ MessageContentsList contents = new MessageContentsList();
+ contents.add(tst);
+ message.setContent(List.class, contents);
+
+ RMContextUtils.setProtocolVariation(message, protocol);
+
+ return message;
+ }
+
+ private void verifyTerminateSequenceDefault(Servant servant, RMManager manager,
+ String sidstr, ProtocolVariation protocol) throws SequenceFault {
+ DestinationPolicyType dp = RMMANGER_FACTORY.createDestinationPolicyType();
+ AcksPolicyType ap = RMMANGER_FACTORY.createAcksPolicyType();
+ dp.setAcksPolicy(ap);
+
+ manager.setDestinationPolicy(dp);
+
+ Message message = createTestTerminateSequenceMessage(sidstr, protocol);
+
+ Object tsr = servant.terminateSequence(message);
+
+ if (ProtocolVariation.RM10WSA200408.getWSRMNamespace().equals(protocol.getWSRMNamespace())) {
+ // rm 1.0
+ assertNull(tsr);
+ } else {
+ // rm 1.1
+ assertTrue(tsr instanceof TerminateSequenceResponseType);
+ org.apache.cxf.ws.rm.v200702.Identifier sid = ((TerminateSequenceResponseType)tsr).getIdentifier();
+ assertNotNull(sid);
+ assertEquals(sidstr, sid.getValue());
+ }
+
+ }
+
+
}
Modified: cxf/trunk/systests/ws-rm/src/test/java/org/apache/cxf/systest/ws/rm/ProtocolVariationsTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-rm/src/test/java/org/apache/cxf/systest/ws/rm/ProtocolVariationsTest.java?rev=1451375&r1=1451374&r2=1451375&view=diff
==============================================================================
--- cxf/trunk/systests/ws-rm/src/test/java/org/apache/cxf/systest/ws/rm/ProtocolVariationsTest.java (original)
+++ cxf/trunk/systests/ws-rm/src/test/java/org/apache/cxf/systest/ws/rm/ProtocolVariationsTest.java Thu Feb 28 21:53:07 2013
@@ -74,6 +74,8 @@ public class ProtocolVariationsTest exte
= "http://cxf.apache.org/greeter_control/Greeter/greetMeRequest";
private static final String GREETME_RESPONSE_ACTION
= "http://cxf.apache.org/greeter_control/Greeter/greetMeResponse";
+ private static final String GREETME_ONEWAY_ACTION
+ = "http://cxf.apache.org/greeter_control/Greeter/greetMeOneWayRequest";
private static String decoupledEndpoint;
private static int decoupledCount = 1;
@@ -381,6 +383,81 @@ public class ProtocolVariationsTest exte
verifyTwowayNonAnonymous(Names.WSA_NAMESPACE_NAME, RM11Constants.INSTANCE);
}
+ @Test
+ public void testTerminateSequenceDefault() throws Exception {
+ init("org/apache/cxf/systest/ws/rm/rminterceptors.xml", false);
+
+ RMManager manager = greeterBus.getExtension(RMManager.class);
+ manager.getSourcePolicy().getSequenceTerminationPolicy().setMaxLength(1);
+
+ greeter.greetMeOneWay("one");
+
+ verifyTerminateSequence(Names200408.WSA_NAMESPACE_NAME, RM10Constants.INSTANCE);
+ }
+
+ @Test
+ public void testTerminateSequenceRM11() throws Exception {
+ init("org/apache/cxf/systest/ws/rm/rminterceptors.xml", false);
+
+ RMManager manager = greeterBus.getExtension(RMManager.class);
+ manager.getSourcePolicy().getSequenceTerminationPolicy().setMaxLength(1);
+
+ // WS-RM 1.1 and WS-A 1.0
+ Client client = ClientProxy.getClient(greeter);
+ client.getRequestContext().put(RMManager.WSRM_VERSION_PROPERTY, RM11Constants.NAMESPACE_URI);
+ client.getRequestContext().put(RMManager.WSRM_WSA_VERSION_PROPERTY, Names.WSA_NAMESPACE_NAME);
+
+ greeter.greetMeOneWay("one");
+
+ verifyTerminateSequence(Names.WSA_NAMESPACE_NAME, RM11Constants.INSTANCE);
+ }
+
+
+ private void verifyTerminateSequence(String wsaUri, RMConstants consts) throws Exception {
+ if (RM11Constants.NAMESPACE_URI.equals(consts.getWSRMNamespace())) {
+ awaitMessages(3, 3);
+ } else {
+ awaitMessages(3, 2);
+ }
+
+ MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(),
+ inRecorder.getInboundMessages(), wsaUri, consts.getWSRMNamespace());
+
+ mf.verifyMessages(3, true);
+ String[] expectedActions = new String[] {consts.getCreateSequenceAction(),
+ GREETME_ONEWAY_ACTION,
+ consts.getTerminateSequenceAction()};
+ mf.verifyActions(expectedActions, true);
+ mf.verifyMessageNumbers(new String[] {null, "1", null}, true);
+ if (RM11Constants.NAMESPACE_URI.equals(consts.getWSRMNamespace())) {
+ // no LastMessage
+ mf.verifyLastMessage(new boolean[] {false, false, false}, true);
+ } else {
+ // uses LastMessage
+ mf.verifyLastMessage(new boolean[] {false, true, false}, true);
+ }
+
+ if (RM11Constants.NAMESPACE_URI.equals(consts.getWSRMNamespace())) {
+ // CSR, ACK, TSR
+ mf.verifyMessages(3, false);
+ expectedActions = new String[] {consts.getCreateSequenceResponseAction(),
+ consts.getSequenceAckAction(),
+ RM11Constants.INSTANCE.getTerminateSequenceResponseAction()};
+ mf.verifyActions(expectedActions, false);
+ mf.verifyAcknowledgements(new boolean[] {false, true, false}, false);
+
+ } else {
+ // CSR, ACK, PR
+ mf.verifyMessages(2, false);
+ expectedActions = new String[] {consts.getCreateSequenceResponseAction(),
+ consts.getSequenceAckAction()};
+ mf.verifyActions(expectedActions, false);
+ mf.verifyAcknowledgements(new boolean[] {false, true}, false);
+ }
+ }
+
+
+
private void verifyTwowayNonAnonymous(String wsaUri, RMConstants consts) throws Exception {
// CreateSequence and three greetMe messages