You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by an...@apache.org on 2006/11/20 16:37:21 UTC
svn commit: r477226 - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/phase/
rt/core/src/main/java/org/apache/cxf/endpoint/
rt/core/src/main/java/org/apache/cxf/interceptor/
rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/ rt/ws/rm/src/main/java/...
Author: andreasmyth
Date: Mon Nov 20 07:37:17 2006
New Revision: 477226
URL: http://svn.apache.org/viewvc?view=rev&rev=477226
Log:
[JIRA [JIRA CXF-138, CXF-140] Support and system test for server side originated TerminateSequence requests and client side originated SequenceAcknowlegment requests.
Involves temporarily (i.e. between inbound RM Soap interceptor and MAPAggregator) adjusting the REQUESTOR_ROLE in order to unmarshal the body of a server side originated TerminateSequence message.
Added:
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml (with props)
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMMessageConstants.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/SourceSequence.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java Mon Nov 20 07:37:17 2006
@@ -141,8 +141,8 @@
try {
Interceptor currentInterceptor = iterator.next();
- if (LOG.isLoggable(Level.INFO)) {
- LOG.info("Invoking handleMessage on interceptor " + currentInterceptor);
+ if (LOG.isLoggable(Level.FINE)) {
+ LOG.fine("Invoking handleMessage on interceptor " + currentInterceptor);
}
currentInterceptor.handleMessage(message);
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java Mon Nov 20 07:37:17 2006
@@ -219,6 +219,7 @@
PhaseManager pm = bus.getExtension(PhaseManager.class);
PhaseInterceptorChain chain = new PhaseInterceptorChain(pm.getInPhases());
message.setInterceptorChain(chain);
+ message.getExchange().put(Endpoint.class, endpoint);
List<Interceptor> il = bus.getInInterceptors();
if (LOG.isLoggable(Level.FINE)) {
@@ -261,7 +262,7 @@
}
}
- private Conduit getConduit() {
+ protected Conduit getConduit() {
if (null == initedConduit) {
EndpointInfo ei = endpoint.getEndpointInfo();
String transportID = ei.getTransportId();
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java Mon Nov 20 07:37:17 2006
@@ -54,7 +54,7 @@
.getBundle(AbstractInDatabindingInterceptor.class);
protected boolean isRequestor(Message message) {
- return Boolean.TRUE.equals(message.containsKey(Message.REQUESTOR_ROLE));
+ return Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE));
}
protected DataReader getDataReader(Message message, Class<?> input) {
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java Mon Nov 20 07:37:17 2006
@@ -19,9 +19,8 @@
package org.apache.cxf.ws.rm;
+
import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -33,16 +32,13 @@
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.ClientImpl;
import org.apache.cxf.endpoint.Endpoint;
-import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.message.Message;
import org.apache.cxf.phase.PhaseInterceptorChain;
import org.apache.cxf.service.model.BindingInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.transport.Conduit;
-import org.apache.cxf.ws.addressing.AddressingPropertiesImpl;
-import org.apache.cxf.ws.addressing.JAXWSAConstants;
import org.apache.cxf.ws.addressing.RelatesToType;
-import org.apache.cxf.ws.addressing.VersionTransformer;
import org.apache.cxf.ws.addressing.v200408.EndpointReferenceType;
import org.apache.cxf.ws.rm.manager.SourcePolicyType;
@@ -67,8 +63,7 @@
return reliableEndpoint;
}
- void acknowledge(DestinationSequence ds) throws IOException {
-
+ void acknowledge(DestinationSequence ds) throws IOException {
if (RMConstants.getAnonymousAddress().equals(ds.getAcksTo().getAddress().getValue())) {
LOG.log(Level.WARNING, "STANDALONE_ANON_ACKS_NOT_SUPPORTED");
return;
@@ -76,20 +71,29 @@
OperationInfo oi = reliableEndpoint.getService().getServiceInfo().getInterface()
.getOperation(RMConstants.getSequenceAckOperationName());
+
+ /*
Map<String, Object> requestContext = new HashMap<String, Object>();
AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
- maps.setTo(VersionTransformer.convert(ds.getAcksTo()).getAddress());
- maps.setReplyTo(reliableEndpoint.getTransportDestination().getAddress());
+ maps.setTo(VersionTransformer.convert(ds.getAcksTo()).getAddress());
+
+ if (null != reliableEndpoint.getTransportDestination()) {
+ maps.setReplyTo(reliableEndpoint.getTransportDestination().getAddress());
+ } else {
+ maps.setReplyTo(RMUtils.createNoneReference());
+ }
requestContext.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, maps);
Map<String, Object> context = CastUtils.cast(
Collections.singletonMap(Client.REQUEST_CONTEXT, requestContext),
String.class, Object.class);
- invoke(oi, new Object[] {}, context);
+ */
+ invoke(oi, new Object[] {}, null);
}
void terminate(SourceSequence ss) throws IOException {
OperationInfo oi = reliableEndpoint.getService().getServiceInfo().getInterface()
.getOperation(RMConstants.getTerminateSequenceOperationName());
+ /*
Map<String, Object> requestContext = new HashMap<String, Object>();
AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
maps.setTo(ss.getTarget().getAddress());
@@ -98,17 +102,18 @@
} else {
maps.setReplyTo(RMUtils.createNoneReference());
}
- LOG.fine("Using explicit maps: " + maps.toString());
requestContext.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, maps);
Map<String, Object> context = CastUtils.cast(
Collections.singletonMap(Client.REQUEST_CONTEXT, requestContext),
String.class, Object.class);
+ */
TerminateSequenceType ts = RMUtils.getWSRMFactory().createTerminateSequenceType();
ts.setIdentifier(ss.getIdentifier());
- invoke(oi, new Object[] {ts}, context);
+ invoke(oi, new Object[] {ts}, null);
}
- public CreateSequenceResponseType createSequence(org.apache.cxf.ws.addressing.EndpointReferenceType to,
+ public CreateSequenceResponseType createSequence(
+ org.apache.cxf.ws.addressing.EndpointReferenceType to,
EndpointReferenceType defaultAcksTo,
RelatesToType relatesTo) throws IOException {
@@ -146,6 +151,7 @@
OperationInfo oi = reliableEndpoint.getService().getServiceInfo().getInterface()
.getOperation(RMConstants.getCreateSequenceOperationName());
+
return (CreateSequenceResponseType)invoke(oi, new Object[] {create}, null);
}
@@ -174,12 +180,8 @@
Endpoint endpoint = reliableEndpoint.getEndpoint();
BindingInfo bi = reliableEndpoint.getBindingInfo();
- if (null == reliableEndpoint.getConduit()) {
- LOG.severe("No conduit to available.");
- return null;
- }
- Client client = new RMClient(bus, endpoint, reliableEndpoint.getConduit());
-
+ Client client = new RMClient(bus, endpoint);
+
BindingOperationInfo boi = bi.getOperation(oi);
try {
Object[] result = client.invoke(boi, params, context);
@@ -194,10 +196,11 @@
}
class RMClient extends ClientImpl {
- RMClient(Bus bus, Endpoint endpoint, Conduit conduit) {
- super(bus, endpoint, conduit);
+
+ RMClient(Bus bus, Endpoint endpoint) {
+ super(bus, endpoint);
}
-
+
@Override
protected PhaseInterceptorChain setupInterceptorChain() {
Endpoint originalEndpoint = getEndpoint();
@@ -207,7 +210,31 @@
return chain;
}
-
+ @Override
+ protected synchronized Conduit getConduit() {
+ Conduit c = null;
+
+ if (null != Proxy.this.reliableEndpoint.getApplicationReplyTo()) {
+ String address = Proxy.this.reliableEndpoint.getApplicationReplyTo()
+ .getAddress().getValue();
+ getEndpoint().getEndpointInfo().setAddress(address);
+ c = super.getConduit();
+ } else {
+ Endpoint oe = getEndpoint();
+ setEndpoint(Proxy.this.reliableEndpoint.getApplicationEndpoint());
+ c = super.getConduit();
+ setEndpoint(oe);
+ }
+
+ return c;
+ }
+
+ @Override
+ public void onMessage(Message m) {
+ // TODO Auto-generated method stub
+ m.getExchange().put(Endpoint.class, Proxy.this.reliableEndpoint.getApplicationEndpoint());
+ super.onMessage(m);
+ }
}
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java Mon Nov 20 07:37:17 2006
@@ -167,12 +167,8 @@
* @param message the current Message
* @return the endpoint
*/
- public static Endpoint getEndpoint(Message message) {
- if (isRequestor(message)) {
- return message.getExchange().get(Endpoint.class);
- } else {
- return message.getExchange().get(Endpoint.class);
- }
+ public static Endpoint getEndpoint(Message message) {
+ return message.getExchange().get(Endpoint.class);
}
private static String getRMPropertiesKey(boolean outbound) {
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java Mon Nov 20 07:37:17 2006
@@ -41,7 +41,6 @@
import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.service.model.UnwrappedOperationInfo;
-import org.apache.cxf.transport.Conduit;
import org.apache.cxf.ws.addressing.wsdl.UsingAddressing;
public class RMEndpoint {
@@ -57,8 +56,7 @@
private final RMManager manager;
private final Endpoint applicationEndpoint;
- private Conduit conduit;
- private org.apache.cxf.transport.Destination transportDestination;
+ private org.apache.cxf.ws.addressing.EndpointReferenceType applicationReplyTo;
private Source source;
private Destination destination;
private Service service;
@@ -157,27 +155,24 @@
this.source = source;
}
- /**
- * @return Returns the conduit.
- */
- public Conduit getConduit() {
- return conduit;
- }
-
- /**
- * @return Returns the conduit.
- */
- public org.apache.cxf.transport.Destination getTransportDestination() {
- return transportDestination;
- }
-
- void initialise(Conduit c, org.apache.cxf.transport.Destination d) {
- conduit = c;
- transportDestination = d;
+ /**
+ * Returns the adress to which to send CreateSequenceResponse, TerminateSequence
+ * and LastMessage requests (i.e. the replyTo address for twaoway application
+ * messages).
+ *
+ * @return the replyToAddress
+ */
+ org.apache.cxf.ws.addressing.EndpointReferenceType getApplicationReplyTo() {
+ return applicationReplyTo;
+ }
+
+ void initialise(org.apache.cxf.ws.addressing.EndpointReferenceType replyTo) {
+ applicationReplyTo = replyTo;
createService();
createEndpoint();
}
+
void createService() {
ServiceInfo si = new ServiceInfo();
si.setName(SERVICE_NAME);
@@ -274,7 +269,7 @@
operationInfo = ii.addOperation(RMConstants.getTerminateSequenceOperationName());
messageInfo = operationInfo.createMessage(RMConstants.getTerminateSequenceOperationName());
operationInfo.setInput(messageInfo.getName().getLocalPart(), messageInfo);
- partInfo = messageInfo.addMessagePart("createResponse");
+ partInfo = messageInfo.addMessagePart("terminate");
partInfo.setElementQName(RMConstants.getTerminateSequenceOperationName());
partInfo.setElement(true);
partInfo.setTypeClass(TerminateSequenceType.class);
@@ -282,6 +277,10 @@
unwrappedOperationInfo = new UnwrappedOperationInfo(operationInfo);
operationInfo.setUnwrappedOperation(unwrappedOperationInfo);
unwrappedOperationInfo.setInput(operationInfo.getInputName(), unwrappedMessageInfo);
+ partInfo = unwrappedMessageInfo.addMessagePart("terminate");
+ partInfo.setElementQName(RMConstants.getTerminateSequenceOperationName());
+ partInfo.setElement(true);
+ partInfo.setTypeClass(TerminateSequenceType.class);
operationInfo = ii.addOperation(RMConstants.getSequenceAckOperationName());
messageInfo = operationInfo.createMessage(RMConstants.getSequenceAckOperationName());
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java Mon Nov 20 07:37:17 2006
@@ -29,7 +29,6 @@
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.interceptor.InterceptorChain;
-// import org.apache.cxf.jaxws.interceptors.WrapperClassInInterceptor;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.PhaseInterceptor;
import org.apache.cxf.ws.addressing.AddressingProperties;
@@ -73,17 +72,22 @@
LOG.fine("Action: " + action);
}
+ Object originalRequestor = message.get(RMMessageConstants.ORIGINAL_REQUESTOR_ROLE);
+ if (null != originalRequestor) {
+ LOG.fine("Restoring original requestor role to: " + originalRequestor);
+ message.put(Message.REQUESTOR_ROLE, originalRequestor);
+ }
+
// Destination destination = getManager().getDestination(message);
// RMEndpoint rme = getManager().getReliableEndpoint(message);
// Servant servant = new Servant(rme);
-
if (RMConstants.getCreateSequenceAction().equals(action)
|| RMConstants.getCreateSequenceResponseAction().equals(action)
|| RMConstants.getTerminateSequenceAction().equals(action)) {
+
InterceptorChain chain = message.getInterceptorChain();
- ListIterator it = chain.getIterator();
- LOG.fine("Trying to remove WrapperClassInInterceptor");
+ ListIterator it = chain.getIterator();
while (it.hasNext()) {
PhaseInterceptor pi = (PhaseInterceptor)it.next();
if ("org.apache.cxf.jaxws.interceptors.WrapperClassInInterceptor".equals(pi.getId())) {
@@ -92,10 +96,7 @@
break;
}
}
-
- return;
- } else if (RMConstants.getTerminateSequenceAction().equals(action)) {
- // servant.terminateSequence(message);
+
return;
} else if (RMConstants.getSequenceAckAction().equals(action)) {
processAcknowledgments(rmps);
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java Mon Nov 20 07:37:17 2006
@@ -31,7 +31,6 @@
import org.apache.cxf.Bus;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.message.Message;
-import org.apache.cxf.transport.Conduit;
import org.apache.cxf.ws.addressing.AddressingProperties;
import org.apache.cxf.ws.addressing.AddressingPropertiesImpl;
import org.apache.cxf.ws.addressing.RelatesToType;
@@ -96,26 +95,25 @@
public Timer getTimer() {
return timer;
}
+
+ public synchronized RMEndpoint getReliableEndpoint(Endpoint e) {
+ return reliableEndpoints.get(e);
+ }
public synchronized RMEndpoint getReliableEndpoint(Message message) {
Endpoint endpoint = RMContextUtils.getEndpoint(message);
RMEndpoint rme = reliableEndpoints.get(endpoint);
if (null == rme) {
rme = new RMEndpoint(this, endpoint);
- Conduit conduit = null;
- org.apache.cxf.transport.Destination destination = null;
- if (RMContextUtils.isServerSide(message)) {
+ org.apache.cxf.transport.Destination destination = message.getExchange().getDestination();
+ org.apache.cxf.ws.addressing.EndpointReferenceType replyTo = null;
+ if (null != destination) {
AddressingPropertiesImpl maps = RMContextUtils.retrieveMAPs(message, false, false);
- destination = message.getExchange().getDestination();
- try {
- conduit = destination.getBackChannel(message, null, maps.getReplyTo());
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- } else {
- conduit = message.getExchange().getConduit();
+ replyTo = maps.getReplyTo();
}
- rme.initialise(conduit, destination);
+
+ rme.initialise(replyTo);
+
reliableEndpoints.put(endpoint, rme);
}
return rme;
@@ -180,7 +178,8 @@
}
Proxy proxy = source.getReliableEndpoint().getProxy();
- CreateSequenceResponseType createResponse = proxy.createSequence(to, acksTo, relatesTo);
+ CreateSequenceResponseType createResponse =
+ proxy.createSequence(to, acksTo, relatesTo);
Servant servant = source.getReliableEndpoint().getServant();
servant.createSequenceResponse(createResponse);
} catch (IOException ex) {
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMMessageConstants.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMMessageConstants.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMMessageConstants.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMMessageConstants.java Mon Nov 20 07:37:17 2006
@@ -36,6 +36,9 @@
public static final String RM_PROPERTIES_INBOUND =
"org.apache.cxf.ws.rm.inbound";
+ public static final String ORIGINAL_REQUESTOR_ROLE =
+ "org.apache.cxf.client.original";
+
/**
* Prevents instantiation.
*/
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java Mon Nov 20 07:37:17 2006
@@ -55,6 +55,10 @@
public Object invoke(Exchange exchange, Object o) {
LOG.fine("Invoking on RM Endpoint");
OperationInfo oi = exchange.get(OperationInfo.class);
+ if (null == oi) {
+ LOG.fine("No operation info.");
+ return null;
+ }
if (RMConstants.getCreateSequenceOperationName().equals(oi.getName())) {
try {
return Collections.singletonList(createSequence(exchange.getInMessage()));
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/SourceSequence.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/SourceSequence.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/SourceSequence.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/SourceSequence.java Mon Nov 20 07:37:17 2006
@@ -153,6 +153,14 @@
}
}
}
+
+ /**
+ * Returns the source associated with this source sequence.
+ * @return the source.
+ */
+ public Source getSource() {
+ return source;
+ }
void setSource(Source s) {
source = s;
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java Mon Nov 20 07:37:17 2006
@@ -51,8 +51,11 @@
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.interceptor.InterceptorChain;
import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.service.Service;
+import org.apache.cxf.service.model.BindingInfo;
+import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.ws.addressing.AddressingProperties;
import org.apache.cxf.ws.addressing.AttributedURIType;
import org.apache.cxf.ws.addressing.soap.MAPCodec;
@@ -62,6 +65,7 @@
import org.apache.cxf.ws.rm.RMContextUtils;
import org.apache.cxf.ws.rm.RMEndpoint;
import org.apache.cxf.ws.rm.RMManager;
+import org.apache.cxf.ws.rm.RMMessageConstants;
import org.apache.cxf.ws.rm.RMProperties;
import org.apache.cxf.ws.rm.SequenceAcknowledgement;
import org.apache.cxf.ws.rm.SequenceType;
@@ -261,7 +265,7 @@
String headerURI = headerElement.getNamespaceURI();
String localName = headerElement.getLocalName();
if (RMConstants.getNamespace().equals(headerURI)) {
- LOG.log(Level.INFO, "decoding RM header {0}", localName);
+ LOG.log(Level.FINE, "decoding RM header {0}", localName);
if (RMConstants.getSequenceName().equals(localName)) {
SequenceType s = decodeProperty(SequenceType.class,
headerElement,
@@ -321,7 +325,7 @@
Marshaller marshaller)
throws JAXBException {
if (value != null) {
- LOG.log(Level.INFO, "encoding " + value + " into RM header {0}", qname);
+ LOG.log(Level.FINE, "encoding " + value + " into RM header {0}", qname);
marshaller.marshal(new JAXBElement<T>(qname, clz, value), header);
}
}
@@ -395,11 +399,12 @@
AttributedURIType actionURI = null == maps ? null : maps.getAction();
String action = null == actionURI ? null : actionURI.getValue();
- LOG.info("action: " + action);
-
+ LOG.fine("action: " + action);
+
if (!(RMConstants.getCreateSequenceAction().equals(action)
|| RMConstants.getCreateSequenceResponseAction().equals(action)
|| RMConstants.getTerminateSequenceAction().equals(action)
+ || RMConstants.getSequenceAckAction().equals(action)
|| RMConstants.getLastMessageAction().equals(action))) {
return;
}
@@ -407,12 +412,54 @@
LOG.info("Updating service model info in exchange");
RMManager manager = getManager(message);
- RMEndpoint rme = manager.getReliableEndpoint(message);
+ assert manager != null;
+ RMEndpoint rme = manager.getReliableEndpoint(message);
+
Exchange exchange = message.getExchange();
+
exchange.put(Endpoint.class, rme.getEndpoint());
exchange.put(Service.class, rme.getService());
exchange.put(Binding.class, rme.getEndpoint().getBinding());
+
+ // Also set BindingOperationInfo as some operations (SequenceAcknowledgment) have
+ // neither in nor out messages, and thus the WrappedInInterceptor cannot
+ // determine the operation name.
+
+ BindingInfo bi = rme.getEndpoint().getEndpointInfo().getBinding();
+ BindingOperationInfo boi = null;
+ if (RMConstants.getCreateSequenceAction().equals(action)
+ || RMConstants.getCreateSequenceResponseAction().equals(action)) {
+ boi = bi.getOperation(RMConstants.getCreateSequenceOperationName());
+ } else if (RMConstants.getSequenceAckAction().equals(action)) {
+ boi = bi.getOperation(RMConstants.getSequenceAckOperationName());
+ } else if (RMConstants.getTerminateSequenceAction().equals(action)) {
+ boi = bi.getOperation(RMConstants.getTerminateSequenceOperationName());
+ }
+ assert boi != null;
+ exchange.put(BindingOperationInfo.class, boi);
+
+ // Fix requestor role (as the client side message observer always sets it to TRUE)
+ // to allow unmarshalling the body of a server originated TerminateSequence request.
+ // In the logical RM interceptor set it back to what it was so that the logical
+ // addressing interceptor does not try to send a partial response to
+ // server originated oneway RM protocol messages.
+ //
+
+ if (!RMConstants.getCreateSequenceResponseAction().equals(action)) {
+ LOG.fine("Changing requestor role from " + message.get(Message.REQUESTOR_ROLE)
+ + " to false");
+ Object originalRequestorRole = message.get(Message.REQUESTOR_ROLE);
+ if (null != originalRequestorRole) {
+ message.put(RMMessageConstants.ORIGINAL_REQUESTOR_ROLE, originalRequestorRole);
+ }
+ message.put(Message.REQUESTOR_ROLE, Boolean.FALSE);
+ }
+
+ if (RMConstants.getSequenceAckAction().equals(action)) {
+ exchange.setOneWay(true);
+ }
+
}
private RMManager getManager(SoapMessage message) {
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java Mon Nov 20 07:37:17 2006
@@ -128,7 +128,7 @@
class RecorderCallback implements CachedOutputStreamCallback {
public void onFlush(AbstractCachedOutputStream cos) {
- LOG.fine("flushing wrapped output stream: " + cos.getOut().getClass().getName());
+ // LOG.fine("flushing wrapped output stream: " + cos.getOut().getClass().getName());
OutputStream os = cos.getOut();
if (os instanceof ByteArrayOutputStream) {
ByteArrayOutputStream bos = (ByteArrayOutputStream)os;
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java Mon Nov 20 07:37:17 2006
@@ -19,6 +19,7 @@
package org.apache.cxf.systest.ws.rm;
+import java.math.BigInteger;
import java.util.logging.Logger;
import junit.framework.Test;
@@ -33,6 +34,7 @@
import org.apache.cxf.systest.common.ClientServerSetupBase;
import org.apache.cxf.systest.common.ClientServerTestBase;
import org.apache.cxf.ws.rm.RMConstants;
+import org.apache.cxf.ws.rm.RMManager;
/**
@@ -60,11 +62,14 @@
private OutMessageRecorder outRecorder;
private InMessageRecorder inRecorder;
- private boolean doTestOnewayAnonymousAcks = true;
- private boolean doTestOnewayDeferredAnonymousAcks = true;
- private boolean doTestOnewayDeferredNonAnonymousAcks = true;
- private boolean doTestOnewayAnonymousAcksSequenceLength1 = true;
- private boolean doTestTwowayNonAnonymous = true;
+ private boolean testAll = true;
+ private boolean doTestOnewayAnonymousAcks = testAll;
+ private boolean doTestOnewayDeferredAnonymousAcks = testAll;
+ private boolean doTestOnewayDeferredNonAnonymousAcks = testAll;
+ private boolean doTestOnewayAnonymousAcksSequenceLength1 = testAll;
+ private boolean doTestTwowayNonAnonymous = testAll;
+ private boolean doTestTwowayNonAnonymousDeferred = testAll;
+ private boolean doTestTwowayNonAnonymousMaximumSequenceLength2 = testAll;
public static void main(String[] args) {
junit.textui.TestRunner.run(SequenceTest.class);
@@ -281,7 +286,7 @@
// CreateSequence and three greetMe messages
// TODO there should be partial responses to the decoupled responses!
- // awaitMessages(6, 6);
+ awaitMessages(4, 8);
MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
@@ -315,6 +320,131 @@
mf.verifyAcknowledgements(new boolean[] {false, true, true, true}, false);
}
+ public void testTwowayNonAnonymousDeferred() throws Exception {
+ if (!doTestTwowayNonAnonymousDeferred) {
+ return;
+ }
+ setupGreeter("org/apache/cxf/systest/ws/rm/twoway-deferred.xml");
+
+ greeter.greetMe("one");
+ greeter.greetMe("two");
+
+ // CreateSequence and three greetMe messages, no acknowledgments
+ // included
+
+ awaitMessages(3, 6);
+ MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
+
+ mf.verifyMessages(3, true);
+ String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(),
+ GREETME_ACTION,
+ GREETME_ACTION};
+ mf.verifyActions(expectedActions, true);
+ mf.verifyMessageNumbers(new String[] {null, "1", "2"}, true);
+ mf.verifyLastMessage(new boolean[3], true);
+ mf.verifyAcknowledgements(new boolean[3], true);
+
+ // CreateSequenceResponse plus 2 greetMeResponse messages plus
+ // one partial response for each of the four messages no acknowledgments
+ // included
+
+ mf.verifyMessages(6, false);
+ expectedActions = new String[] {null,
+ RMConstants.getCreateSequenceResponseAction(),
+ null,
+ GREETME_RESPONSE_ACTION,
+ null,
+ GREETME_RESPONSE_ACTION};
+ mf.verifyActions(expectedActions, false);
+ mf.verifyMessageNumbers(new String[] {null, null, null, "1", null, "2"}, false);
+ mf.verifyLastMessage(new boolean[6], false);
+ mf.verifyAcknowledgements(new boolean[6], false);
+
+ // one standalone acknowledgement should have been sent from the client and one
+ // should have been received from the server
+
+ awaitMessages(4, 7, 3000);
+ mf.reset(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
+
+ mf.verifyMessageNumbers(new String[1], true);
+ mf.verifyLastMessage(new boolean[1], true);
+ mf.verifyAcknowledgements(new boolean[] {true}, true);
+
+ mf.verifyMessageNumbers(new String[1], true);
+ mf.verifyLastMessage(new boolean[1], true);
+ mf.verifyAcknowledgements(new boolean[] {true}, true);
+
+ }
+
+ /**
+ * A maximum sequence length of 2 is configured for the client only (server allows 10).
+ * However, as we use the defaults regarding the including and acceptance
+ * for inbound sequence offers and correlate offered sequences that are
+ * included in a CreateSequence request and accepted with those that are
+ * created on behalf of such a request, the server also tries terminate its
+ * sequences. Note that as part of the sequence termination exchange a
+ * standalone sequence acknowledgment needs to be sent regardless of whether
+ * or nor acknowledgments are delivered steadily with every response.
+ */
+
+ public void testTwowayNonAnonymousMaximumSequenceLength2() throws Exception {
+
+ if (!doTestTwowayNonAnonymousMaximumSequenceLength2) {
+ return;
+ }
+ setupGreeter("org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml");
+
+ RMManager manager = greeterBus.getExtension(RMManager.class);
+ assertEquals("Unexpected maximum sequence length.", BigInteger.TEN,
+ manager.getSourcePolicy().getSequenceTerminationPolicy().getMaxLength());
+ manager.getSourcePolicy().getSequenceTerminationPolicy().setMaxLength(
+ new BigInteger("2"));
+
+ greeter.greetMe("one");
+ greeter.greetMe("two");
+ greeter.greetMe("three");
+
+ awaitMessages(7, 13, 5000);
+ MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
+
+ mf.verifyMessages(7, true);
+ String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(),
+ GREETME_ACTION,
+ GREETME_ACTION,
+ RMConstants.getTerminateSequenceAction(),
+ RMConstants.getSequenceAckAction(),
+ RMConstants.getCreateSequenceAction(),
+ GREETME_ACTION};
+ mf.verifyActions(expectedActions, true);
+ mf.verifyMessageNumbers(new String[] {null, "1", "2", null, null, null, "1"}, true);
+ mf.verifyLastMessage(new boolean[] {false, false, true, false, false, false, false}, true);
+ mf.verifyAcknowledgements(new boolean[] {false, false, true, false, true, false, false}, true);
+
+ // 7 partial responses plus 2 full responses to CreateSequence requests
+ // plus 3 full responses to greetMe requests plus server originiated
+ // TerminateSequence request
+
+ mf.verifyMessages(13, false);
+
+ mf.verifyPartialResponses(7);
+
+ mf.purgePartialResponses();
+
+ expectedActions = new String[] {RMConstants.getCreateSequenceResponseAction(),
+ GREETME_RESPONSE_ACTION,
+ GREETME_RESPONSE_ACTION,
+ RMConstants.getTerminateSequenceAction(),
+ RMConstants.getCreateSequenceResponseAction(),
+ GREETME_RESPONSE_ACTION};
+ mf.verifyActions(expectedActions, false);
+ mf.verifyMessageNumbers(new String[] {null, "1", "2", null, null, "1"}, false);
+ boolean[] expected = new boolean[6];
+ expected[2] = true;
+ mf.verifyLastMessage(expected, false);
+ expected[1] = true;
+ expected[5] = true;
+ mf.verifyAcknowledgements(expected, false);
+ }
// --- test utilities ---
@@ -339,10 +469,14 @@
}
private void awaitMessages(int nExpectedOut, int nExpectedIn) {
- int i = 0;
+ awaitMessages(nExpectedOut, nExpectedIn, 10000);
+ }
+
+ private void awaitMessages(int nExpectedOut, int nExpectedIn, int timeout) {
+ int waited = 0;
int nOut = 0;
int nIn = 0;
- while (i < 20) {
+ while (waited <= timeout) {
synchronized (outRecorder) {
nOut = outRecorder.getOutboundMessages().size();
}
@@ -357,6 +491,7 @@
} catch (InterruptedException ex) {
// ignore
}
+ waited += 100;
}
assertEquals("Did not receive expected number of inbound messages", nExpectedIn, nIn);
assertEquals("Did not send expected number of outbound messages", nExpectedOut, nOut);
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml?view=auto&rev=477226
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml Mon Nov 20 07:37:17 2006
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:wsrm-mgmt="http://cxf.apache.org/ws/rm/manager"
+ xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
+ xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
+ xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean name="{http://cxf.apache.org/greeter_control}GreeterPort.http-conduit" abstract="true">
+ <property name="client">
+ <value>
+ <http-conf:client DecoupledEndpoint="http://localhost:9997/decoupled_endpoint"/>
+ </value>
+ </property>
+ </bean>
+
+ <bean id="org.apache.cxf.ws.rm.RMManager" class="org.apache.cxf.ws.rm.RMManager">
+ <property name="bus" ref="cxf"/>
+ <property name="destinationPolicy">
+ <value>
+ <wsrm-mgmt:destinationPolicy>
+ <wsrm-mgmt:acksPolicy intraMessageThreshold="0"/>
+ </wsrm-mgmt:destinationPolicy>
+ </value>
+ </property>
+ <property name="sourcePolicy">
+ <value>
+ <wsrm-mgmt:sourcePolicy acksTo="http://localhost:9997/decoupled_endpoint"/>
+ </value>
+ </property>
+
+ <property name="RMAssertion">
+ <value>
+ <wsrm-policy:RMAssertion>
+ <wsrm-policy:BaseRetransmissionInterval Milliseconds="10000"/>
+ <wsrm-policy:AcknowledgementInterval Milliseconds="2000"/>
+ </wsrm-policy:RMAssertion>
+ </value>
+ </property>
+ </bean>
+
+ <import resource="rminterceptors.xml"/>
+
+</beans>
\ No newline at end of file
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml?view=auto&rev=477226
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml Mon Nov 20 07:37:17 2006
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:wsrm-mgmt="http://cxf.apache.org/ws/rm/manager"
+ xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
+ xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
+ xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean name="{http://cxf.apache.org/greeter_control}GreeterPort.http-conduit" abstract="true">
+ <property name="client">
+ <value>
+ <http-conf:client DecoupledEndpoint="http://localhost:9996/decoupled_endpoint"/>
+ </value>
+ </property>
+ </bean>
+
+ <bean id="org.apache.cxf.ws.rm.RMManager" class="org.apache.cxf.ws.rm.RMManager">
+ <property name="bus" ref="cxf"/>
+ <property name="sourcePolicy">
+ <value>
+ <wsrm-mgmt:sourcePolicy>
+ <wsrm-mgmt:sequenceTerminationPolicy maxLength="10"/>
+ </wsrm-mgmt:sourcePolicy>
+ </value>
+ </property>
+ </bean>
+
+ <import resource="rminterceptors.xml"/>
+
+</beans>
\ No newline at end of file
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml