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/07 12:12:14 UTC
svn commit: r472063 - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/phase/
systests/src/test/java/org/apache/cxf/systest/ws/rm/
Author: andreasmyth
Date: Tue Nov 7 03:12:10 2006
New Revision: 472063
URL: http://svn.apache.org/viewvc?view=rev&rev=472063
Log:
[JIRA CXF-140] Implemented verifiers for RM system test.
Refactored test to use Control interface so that tests can run against differently configure server endpoints.
Removed printlns.
Added:
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java
- copied, changed from r471745, incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb/celtix/systest/ws/rm/ControlImpl.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/InMessageRecorder.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/MessageFlow.java
- copied, changed from r471795, incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb/celtix/systest/ws/rm/MessageFlow.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/anonymous.xml
- copied, changed from r471709, incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/cxf.xml
Removed:
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/cxf.xml
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/GreeterImpl.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/Server.java
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java?view=diff&rev=472063&r1=472062&r2=472063
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java Tue Nov 7 03:12:10 2006
@@ -34,7 +34,7 @@
public static final String PREPARE_SEND = "prepare-send";
public static final String PRE_STREAM = "pre-stream";
public static final String USER_STREAM = "user-stream";
- public static final String POST_STREAM = "port-stream";
+ public static final String POST_STREAM = "post-stream";
public static final String WRITE = "write";
public static final String SEND = "send";
Copied: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java (from r471745, incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb/celtix/systest/ws/rm/ControlImpl.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java?view=diff&rev=472063&p1=incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb/celtix/systest/ws/rm/ControlImpl.java&r1=471745&p2=incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java&r2=472063
==============================================================================
--- incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb/celtix/systest/ws/rm/ControlImpl.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java Tue Nov 7 03:12:10 2006
@@ -1,52 +1,61 @@
-package org.objectweb.celtix.systest.ws.rm;
+/**
+ * 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.
+ */
+
+
+package org.apache.cxf.systest.ws.rm;
-import java.net.URL;
import java.util.concurrent.Future;
import java.util.logging.Logger;
import javax.jws.WebService;
-import javax.xml.namespace.QName;
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Response;
-import org.objectweb.celtix.Bus;
-import org.objectweb.celtix.BusException;
-import org.objectweb.celtix.greeter_control.Control;
-import org.objectweb.celtix.greeter_control.types.StartGreeterResponse;
-import org.objectweb.celtix.greeter_control.types.StopGreeterResponse;
+import org.apache.cxf.Bus;
+import org.apache.cxf.bus.spring.SpringBusFactory;
+import org.apache.cxf.greeter_control.Control;
+import org.apache.cxf.greeter_control.types.StartGreeterResponse;
+import org.apache.cxf.greeter_control.types.StopGreeterResponse;
@WebService(serviceName = "ControlService",
portName = "ControlPort",
- endpointInterface = "org.objectweb.celtix.greeter_control.Control",
- targetNamespace = "http://celtix.objectweb.org/greeter_control")
+ endpointInterface = "org.apache.cxf.greeter_control.Control",
+ targetNamespace = "http://cxf.apache.org/greeter_control")
public class ControlImpl implements Control {
private static final Logger LOG = Logger.getLogger(ControlImpl.class.getName());
- private static QName serviceName = new QName("http://celtix.objectweb.org/greeter_control",
- "GreeterService");
private Endpoint endpoint;
private Bus greeterBus;
- public boolean startGreeter(String configuration) {
+ public boolean startGreeter(String cfgResource) {
- if (!(null == configuration || "".equals(configuration))) {
- setConfigFileProperty(configuration);
- }
-
- try {
- greeterBus = Bus.init();
- } catch (BusException ex) {
- return false;
- }
-
- TestConfigurator tc = new TestConfigurator(greeterBus.getConfigurationBuilder());
- tc.configureServer(serviceName);
+ SpringBusFactory bf = new SpringBusFactory();
+ greeterBus = bf.createBus(cfgResource);
+ bf.setDefaultBus(greeterBus);
+ LOG.info("Initialised bus with cfg file resource: " + cfgResource);
GreeterImpl implementor = new GreeterImpl();
String address = "http://localhost:9020/SoapContext/GreeterPort";
endpoint = Endpoint.publish(address, implementor);
+ LOG.info("Published greeter endpoint.");
return true;
}
@@ -61,25 +70,11 @@
}
endpoint = null;
if (null != greeterBus) {
- try {
- greeterBus.shutdown(true);
- } catch (BusException ex) {
- return false;
- }
+ greeterBus.shutdown(true);
}
return true;
}
- public static void setConfigFileProperty(String cfgName) {
- URL url = ControlImpl.class.getResource(cfgName + ".xml");
- if (null == url) {
- LOG.severe("cannot find test resource " + cfgName + ".xml");
- return;
- }
- String configFileName = url.toString();
- System.setProperty("celtix.config.file", configFileName);
- }
-
public Future<?> startGreeterAsync(String requestType, AsyncHandler<StartGreeterResponse> asyncHandler) {
// never called
return null;
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/GreeterImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/GreeterImpl.java?view=diff&rev=472063&r1=472062&r2=472063
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/GreeterImpl.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/GreeterImpl.java Tue Nov 7 03:12:10 2006
@@ -20,6 +20,7 @@
package org.apache.cxf.systest.ws.rm;
import java.util.concurrent.Future;
+import java.util.logging.Logger;
import javax.jws.WebService;
import javax.xml.ws.AsyncHandler;
@@ -41,11 +42,12 @@
targetNamespace = "http://cxf.apache.org/greeter_control")
public class GreeterImpl implements Greeter {
+ private static final Logger LOG = Logger.getLogger(GreeterImpl.class.getName());
public String greetMe(String arg0) {
- System.out.println("Executing operation greetMe with parameter: " + arg0);
+ LOG.fine("Executing operation greetMe with parameter: " + arg0);
String result = arg0.toUpperCase();
- System.out.println("returning: " + result);
+ LOG.fine("returning: " + result);
return result;
}
@@ -60,11 +62,11 @@
}
public void greetMeOneWay(String arg0) {
- System.out.println("Executing operation greetMeOneWay with parameter: " + arg0);
+ LOG.fine("Executing operation greetMeOneWay with parameter: " + arg0);
}
public void pingMe() throws PingMeFault {
- System.out.println("Executing operation pingMe");
+ LOG.fine("Executing operation pingMe");
}
public Response<PingMeResponse> pingMeAsync() {
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/InMessageRecorder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/InMessageRecorder.java?view=auto&rev=472063
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/InMessageRecorder.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/InMessageRecorder.java Tue Nov 7 03:12:10 2006
@@ -0,0 +1,71 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.systest.ws.rm;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPMessage;
+
+import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+public class InMessageRecorder extends AbstractPhaseInterceptor<Message> {
+
+ private List<SOAPMessage> inbound;
+
+ public InMessageRecorder() {
+ inbound = new ArrayList<SOAPMessage>();
+ setPhase(Phase.RECEIVE);
+ }
+
+ public void handleMessage(Message message) throws Fault {
+ InputStream is = message.getContent(InputStream.class);
+
+ if (is == null) {
+ return;
+ }
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ try {
+ IOUtils.copy(is, bos);
+ is.close();
+ bos.close();
+ MessageFactory mf = MessageFactory.newInstance();
+ ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+ SOAPMessage sm = mf.createMessage(null, bis);
+ inbound.add(sm);
+ bis = new ByteArrayInputStream(bos.toByteArray());
+ message.setContent(InputStream.class, bis);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ protected List<SOAPMessage> getInboundMessages() {
+ return inbound;
+ }
+}
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/InMessageRecorder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/InMessageRecorder.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java?view=auto&rev=472063
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java Tue Nov 7 03:12:10 2006
@@ -0,0 +1,79 @@
+/**
+ * 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.
+ */
+
+package org.apache.cxf.systest.ws.rm;
+
+import java.util.Collections;
+import java.util.ListIterator;
+import java.util.Set;
+
+
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.InterceptorChain;
+import org.apache.cxf.jaxws.handler.LogicalHandlerInterceptor;
+import org.apache.cxf.jaxws.handler.StreamHandlerInterceptor;
+import org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.phase.PhaseInterceptor;
+
+
+/**
+ *
+ */
+public class JaxwsInterceptorRemover extends AbstractPhaseInterceptor {
+
+ private Set<String> before = Collections.singleton(LogicalHandlerInterceptor.class.getName());
+
+ public JaxwsInterceptorRemover() {
+ setPhase(Phase.PRE_LOGICAL);
+ }
+
+ public void handleMessage(Message message) throws Fault {
+
+ // remove the JAXWS handler interceptors
+ InterceptorChain chain = message.getInterceptorChain();
+ ListIterator it = chain.getIterator();
+ while (it.hasNext()) {
+ PhaseInterceptor pi = (PhaseInterceptor)it.next();
+ if (LogicalHandlerInterceptor.class.getName().equals(pi.getId())) {
+ chain.remove(pi);
+ break;
+ }
+ }
+ it = chain.getIterator();
+ while (it.hasNext()) {
+ PhaseInterceptor pi = (PhaseInterceptor)it.next();
+ if (SOAPHandlerInterceptor.class.getName().equals(pi.getId())) {
+ chain.remove(pi);
+ break;
+ }
+ }
+ it = chain.getIterator();
+ while (it.hasNext()) {
+ PhaseInterceptor pi = (PhaseInterceptor)it.next();
+ if (StreamHandlerInterceptor.class.getName().equals(pi.getId())) {
+ chain.remove(pi);
+ break;
+ }
+ }
+ }
+
+}
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/MessageFlow.java (from r471795, incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb/celtix/systest/ws/rm/MessageFlow.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/MessageFlow.java?view=diff&rev=472063&p1=incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb/celtix/systest/ws/rm/MessageFlow.java&r1=471795&p2=incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/MessageFlow.java&r2=472063
==============================================================================
--- incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb/celtix/systest/ws/rm/MessageFlow.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/MessageFlow.java Tue Nov 7 03:12:10 2006
@@ -1,4 +1,23 @@
-package org.objectweb.celtix.systest.ws.rm;
+/**
+ * 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.
+ */
+
+package org.apache.cxf.systest.ws.rm;
import java.io.ByteArrayOutputStream;
import java.util.Iterator;
@@ -11,50 +30,38 @@
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
-import javax.xml.ws.handler.LogicalMessageContext;
import junit.framework.Assert;
-import org.objectweb.celtix.ws.addressing.AddressingProperties;
-import org.objectweb.celtix.ws.addressing.ContextUtils;
-import org.objectweb.celtix.ws.rm.Names;
-import org.objectweb.celtix.ws.rm.RMContextUtils;
-import org.objectweb.celtix.ws.rm.RMProperties;
-import org.objectweb.celtix.ws.rm.SequenceAcknowledgement;
-import org.objectweb.celtix.ws.rm.SequenceType;
+import org.apache.cxf.ws.rm.RMConstants;
public class MessageFlow extends Assert {
private List<SOAPMessage> outboundMessages;
- private List<LogicalMessageContext> inboundContexts;
+ private List<SOAPMessage> inboundMessages;
- public MessageFlow(List<SOAPMessage> o, List<LogicalMessageContext> i) {
+ public MessageFlow(List<SOAPMessage> o, List<SOAPMessage> i) {
outboundMessages = o;
- inboundContexts = i;
+ inboundMessages = i;
}
public List<SOAPMessage> getOutboundMessages() {
return outboundMessages;
}
- public List<LogicalMessageContext> getInboundContexts() {
- return inboundContexts;
- }
-
- public void clear() {
- getOutboundMessages().clear();
- getInboundContexts().clear();
+ public List<SOAPMessage> getInboundMessages() {
+ return inboundMessages;
}
public void verifyActions(String[] expectedActions, boolean outbound) throws Exception {
- assertEquals(expectedActions.length, outbound ? outboundMessages.size() : inboundContexts.size());
+ assertEquals(expectedActions.length, outbound ? outboundMessages.size() : inboundMessages.size());
for (int i = 0; i < expectedActions.length; i++) {
- String action = outbound ? getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
+ String action = outbound ? getAction(outboundMessages.get(i)) : getAction(inboundMessages.get(i));
if (null == expectedActions[i]) {
assertNull((outbound ? "Outbound " : "Inbound") + " message " + i
+ " has unexpected action: " + action, action);
@@ -68,12 +75,12 @@
public boolean checkActions(String[] expectedActions, boolean outbound) throws Exception {
- if (expectedActions.length != (outbound ? outboundMessages.size() : inboundContexts.size())) {
+ if (expectedActions.length != (outbound ? outboundMessages.size() : inboundMessages.size())) {
return false;
}
for (int i = 0; i < expectedActions.length; i++) {
- String action = outbound ? getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
+ String action = outbound ? getAction(outboundMessages.get(i)) : getAction(inboundMessages.get(i));
if (null == expectedActions[i]) {
if (action != null) {
return false;
@@ -91,10 +98,10 @@
int expectedCount,
boolean outbound,
boolean exact) throws Exception {
- int messageCount = outbound ? outboundMessages.size() : inboundContexts.size();
+ int messageCount = outbound ? outboundMessages.size() : inboundMessages.size();
int count = 0;
for (int i = 0; i < messageCount; i++) {
- String action = outbound ? getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
+ String action = outbound ? getAction(outboundMessages.get(i)) : getAction(inboundMessages.get(i));
if (null == expectedAction) {
if (action == null) {
count++;
@@ -125,7 +132,7 @@
boolean exact) throws Exception {
int actualMessageCount =
- outbound ? outboundMessages.size() : inboundContexts.size();
+ outbound ? outboundMessages.size() : inboundMessages.size();
if (exact) {
assertEquals(expectedMessageNumbers.length, actualMessageCount);
} else {
@@ -134,38 +141,25 @@
if (exact) {
for (int i = 0; i < expectedMessageNumbers.length; i++) {
- if (outbound) {
- SOAPElement se = getSequence(outboundMessages.get(i));
- if (null == expectedMessageNumbers[i]) {
- assertNull("Outbound message " + i + " contains unexpected message number ", se);
- } else {
- assertEquals("Outbound message " + i + " does not contain expected message number "
- + expectedMessageNumbers[i], expectedMessageNumbers[i],
- getMessageNumber(se));
- }
+ SOAPElement se = outbound ? getSequence(outboundMessages.get(i))
+ : getSequence(inboundMessages.get(i));
+ if (null == expectedMessageNumbers[i]) {
+ assertNull((outbound ? "Outbound" : "Inbound") + " message " + i
+ + " contains unexpected message number ", se);
} else {
- SequenceType s = getSequence(inboundContexts.get(i));
- String messageNumber = null == s ? null : s.getMessageNumber().toString();
- if (null == expectedMessageNumbers[i]) {
- assertNull("Inbound message " + i + " contains unexpected message number ",
- messageNumber);
- } else {
- assertEquals("Inbound message " + i + " does not contain expected message number "
- + expectedMessageNumbers[i], expectedMessageNumbers[i], messageNumber);
- }
+ assertEquals((outbound ? "Outbound" : "Inbound") + " message " + i
+ + " does not contain expected message number "
+ + expectedMessageNumbers[i], expectedMessageNumbers[i],
+ getMessageNumber(se));
}
}
} else {
boolean[] matches = new boolean[expectedMessageNumbers.length];
for (int i = 0; i < actualMessageCount; i++) {
String messageNumber = null;
- if (outbound) {
- SOAPElement se = getSequence(outboundMessages.get(i));
- messageNumber = null == se ? null : getMessageNumber(se);
- } else {
- SequenceType s = getSequence(inboundContexts.get(i));
- messageNumber = null == s ? null : s.getMessageNumber().toString();
- }
+ SOAPElement se = outbound ? getSequence(outboundMessages.get(i))
+ : getSequence(inboundMessages.get(i));
+ messageNumber = null == se ? null : getMessageNumber(se);
for (int j = 0; j < expectedMessageNumbers.length; j++) {
if (messageNumber == null) {
if (expectedMessageNumbers[j] == null && !matches[j]) {
@@ -197,7 +191,7 @@
boolean exact) throws Exception {
int actualMessageCount =
- outbound ? outboundMessages.size() : inboundContexts.size();
+ outbound ? outboundMessages.size() : inboundMessages.size();
if (exact) {
assertEquals(expectedLastMessages.length, actualMessageCount);
} else {
@@ -206,13 +200,9 @@
for (int i = 0; i < expectedLastMessages.length; i++) {
boolean lastMessage;
- if (outbound) {
- SOAPElement se = getSequence(outboundMessages.get(i));
- lastMessage = null == se ? false : getLastMessage(se);
- } else {
- SequenceType s = getSequence(inboundContexts.get(i));
- lastMessage = null == s ? false : null != s.getLastMessage();
- }
+ SOAPElement se = outbound ? getSequence(outboundMessages.get(i))
+ : getSequence(inboundMessages.get(i));
+ lastMessage = null == se ? false : getLastMessage(se);
assertEquals("Outbound message " + i
+ (expectedLastMessages[i] ? " does not contain expected last message element."
: " contains last message element."),
@@ -223,11 +213,11 @@
public void verifyAcknowledgements(boolean[] expectedAcks, boolean outbound) throws Exception {
assertEquals(expectedAcks.length, outbound ? outboundMessages.size()
- : inboundContexts.size());
+ : inboundMessages.size());
for (int i = 0; i < expectedAcks.length; i++) {
boolean ack = outbound ? (null != getAcknowledgment(outboundMessages.get(i)))
- : (null != getAcknowledgment(inboundContexts.get(i)));
+ : (null != getAcknowledgment(inboundMessages.get(i)));
if (expectedAcks[i]) {
assertTrue((outbound ? "Outbound" : "Inbound") + " message " + i
@@ -244,11 +234,11 @@
boolean exact) throws Exception {
int actualMessageCount =
- outbound ? outboundMessages.size() : inboundContexts.size();
+ outbound ? outboundMessages.size() : inboundMessages.size();
int ackCount = 0;
for (int i = 0; i < actualMessageCount; i++) {
boolean ack = outbound ? (null != getAcknowledgment(outboundMessages.get(i)))
- : (null != getAcknowledgment(inboundContexts.get(i)));
+ : (null != getAcknowledgment(inboundMessages.get(i)));
if (ack) {
ackCount++;
}
@@ -264,9 +254,10 @@
}
- public void verifyAckRequestedOutbound() throws Exception {
+ public void verifyAckRequestedOutbound(boolean outbound) throws Exception {
boolean found = false;
- for (SOAPMessage m : outboundMessages) {
+ List<SOAPMessage> messages = outbound ? outboundMessages : inboundMessages;
+ for (SOAPMessage m : messages) {
SOAPElement se = getAckRequested(m);
if (se != null) {
found = true;
@@ -275,21 +266,7 @@
}
assertTrue("expected AckRequested", found);
}
-
- public void verifyAckRequestedInbound(List<LogicalMessageContext> contexts) throws Exception {
- boolean found = false;
- for (LogicalMessageContext context : contexts) {
- RMProperties rmps = RMContextUtils.retrieveRMProperties(context, false);
- if (null != rmps
- && rmps.getAcksRequested() != null
- && rmps.getAcksRequested().size() > 0) {
- found = true;
- break;
- }
- }
- assertTrue("expected AckRequested", found);
- }
-
+
protected String getAction(SOAPMessage msg) throws Exception {
SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
SOAPHeader header = env.getHeader();
@@ -298,24 +275,16 @@
SOAPHeaderElement headerElement = (SOAPHeaderElement)headerElements.next();
Name headerName = headerElement.getElementName();
String localName = headerName.getLocalName();
- if ((headerName.getURI().equals(org.objectweb.celtix.ws.addressing.Names.WSA_NAMESPACE_NAME)
- || headerName.getURI().equals(org.objectweb.celtix.ws.addressing.VersionTransformer
+ if ((headerName.getURI().equals(org.apache.cxf.ws.addressing.Names.WSA_NAMESPACE_NAME)
+ || headerName.getURI().equals(org.apache.cxf.ws.addressing.VersionTransformer
.Names200408.WSA_NAMESPACE_NAME))
- && localName.equals(org.objectweb.celtix.ws.addressing.Names.WSA_ACTION_NAME)) {
+ && localName.equals(org.apache.cxf.ws.addressing.Names.WSA_ACTION_NAME)) {
return headerElement.getTextContent();
}
}
return null;
}
- protected String getAction(LogicalMessageContext context) {
- AddressingProperties maps = ContextUtils.retrieveMAPs(context, false, false);
- if (null != maps && null != maps.getAction()) {
- return maps.getAction().getValue();
- }
- return null;
- }
-
protected SOAPElement getSequence(SOAPMessage msg) throws Exception {
SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
SOAPHeader header = env.getHeader();
@@ -324,8 +293,8 @@
SOAPHeaderElement headerElement = (SOAPHeaderElement)headerElements.next();
Name headerName = headerElement.getElementName();
String localName = headerName.getLocalName();
- if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
- && localName.equals(Names.WSRM_SEQUENCE_NAME)) {
+ if (headerName.getURI().equals(RMConstants.WSRM_NAMESPACE_NAME)
+ && localName.equals(RMConstants.WSRM_SEQUENCE_NAME)) {
return headerElement;
}
}
@@ -334,18 +303,13 @@
public String getMessageNumber(SOAPElement elem) throws Exception {
SOAPElement se = (SOAPElement)elem.getChildElements(
- new QName(Names.WSRM_NAMESPACE_NAME,
+ new QName(RMConstants.WSRM_NAMESPACE_NAME,
"MessageNumber")).next();
return se.getTextContent();
}
- protected SequenceType getSequence(LogicalMessageContext context) {
- RMProperties rmps = RMContextUtils.retrieveRMProperties(context, false);
- return rmps == null ? null : rmps.getSequence();
- }
-
private boolean getLastMessage(SOAPElement elem) throws Exception {
- return elem.getChildElements(new QName(Names.WSRM_NAMESPACE_NAME, "LastMessage")).hasNext();
+ return elem.getChildElements(new QName(RMConstants.WSRM_NAMESPACE_NAME, "LastMessage")).hasNext();
}
protected SOAPElement getAcknowledgment(SOAPMessage msg) throws Exception {
@@ -356,22 +320,14 @@
SOAPHeaderElement headerElement = (SOAPHeaderElement)headerElements.next();
Name headerName = headerElement.getElementName();
String localName = headerName.getLocalName();
- if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
- && localName.equals(Names.WSRM_SEQUENCE_ACK_NAME)) {
+ if (headerName.getURI().equals(RMConstants.WSRM_NAMESPACE_NAME)
+ && localName.equals(RMConstants.WSRM_SEQUENCE_ACK_NAME)) {
return (SOAPElement)header.getChildElements().next();
}
}
return null;
}
- protected SequenceAcknowledgement getAcknowledgment(LogicalMessageContext context) {
- RMProperties rmps = RMContextUtils.retrieveRMProperties(context, false);
- if (null != rmps && null != rmps.getAcks() && rmps.getAcks().size() > 0) {
- return rmps.getAcks().iterator().next();
- }
- return null;
- }
-
private SOAPElement getAckRequested(SOAPMessage msg) throws Exception {
SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
SOAPHeader header = env.getHeader();
@@ -380,8 +336,8 @@
SOAPHeaderElement headerElement = (SOAPHeaderElement)headerElements.next();
Name headerName = headerElement.getElementName();
String localName = headerName.getLocalName();
- if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
- && localName.equals(Names.WSRM_ACK_REQUESTED_NAME)) {
+ if (headerName.getURI().equals(RMConstants.WSRM_NAMESPACE_NAME)
+ && localName.equals(RMConstants.WSRM_ACK_REQUESTED_NAME)) {
return (SOAPElement)header.getChildElements().next();
}
}
@@ -403,10 +359,10 @@
}
} else {
if (exact) {
- assertEquals("Unexpected number of inbound messages", nExpected, inboundContexts.size());
+ assertEquals("Unexpected number of inbound messages", nExpected, inboundMessages.size());
} else {
- assertTrue("Unexpected number of inbound messages: " + inboundContexts.size(),
- nExpected <= inboundContexts.size());
+ assertTrue("Unexpected number of inbound messages: " + inboundMessages.size(),
+ nExpected <= inboundMessages.size());
}
}
}
@@ -418,7 +374,7 @@
public void verifyMessages(int nExpected, boolean outbound, int interval, int attempts, boolean exact) {
for (int i = 0; i < attempts; i++) {
if ((outbound && outboundMessages.size() < nExpected)
- || (!outbound && inboundContexts.size() < nExpected)) {
+ || (!outbound && inboundMessages.size() < nExpected)) {
try {
Thread.sleep(interval);
} catch (InterruptedException ex) {
@@ -432,17 +388,17 @@
}
public void purgePartialResponses() throws Exception {
- for (int i = inboundContexts.size() - 1; i >= 0; i--) {
- if (isPartialResponse(inboundContexts.get(i))) {
- inboundContexts.remove(i);
+ for (int i = inboundMessages.size() - 1; i >= 0; i--) {
+ if (isPartialResponse(inboundMessages.get(i))) {
+ inboundMessages.remove(i);
}
}
}
public void verifyPartialResponses(int nExpected) throws Exception {
int npr = 0;
- for (int i = 0; i < inboundContexts.size(); i++) {
- if (isPartialResponse(inboundContexts.get(i))) {
+ for (int i = 0; i < inboundMessages.size(); i++) {
+ if (isPartialResponse(inboundMessages.get(i))) {
npr++;
}
}
@@ -450,13 +406,13 @@
nExpected, npr);
}
- public boolean isPartialResponse(LogicalMessageContext ctx) throws Exception {
- return null == getAction(ctx) && emptyBody(ctx);
+ public boolean isPartialResponse(SOAPMessage msg) throws Exception {
+ // return null == getAction(ctx) && emptyBody(msg);
+ return false;
}
- public boolean emptyBody(LogicalMessageContext ctx) throws Exception {
- return !((SOAPMessage)ctx.get("org.objectweb.celtix.bindings.soap.message"))
- .getSOAPPart().getEnvelope().getBody().hasChildNodes();
+ public boolean emptyBody(SOAPMessage msg) throws Exception {
+ return !msg.getSOAPPart().getEnvelope().getBody().hasChildNodes();
}
private String outboundDump() {
Added: 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=auto&rev=472063
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java Tue Nov 7 03:12:10 2006
@@ -0,0 +1,142 @@
+/**
+ * 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.
+ */
+
+package org.apache.cxf.systest.ws.rm;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPMessage;
+
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.StaxOutInterceptor;
+//import org.apache.cxf.io.AbstractCachedOutputStream;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+
+/**
+ *
+ */
+public class OutMessageRecorder extends AbstractPhaseInterceptor {
+
+ private List<SOAPMessage> outbound;
+ private Set<String> before = Collections.singleton(StaxOutInterceptor.class.getName());
+
+ public OutMessageRecorder() {
+ outbound = new ArrayList<SOAPMessage>();
+ //setPhase(Phase.POST_STREAM);
+ setPhase(Phase.PRE_PROTOCOL);
+ }
+
+ public void handleMessage(Message message) throws Fault {
+ OutputStream os = message.getContent(OutputStream.class);
+ if (null == os) {
+ return;
+ }
+ ForkOutputStream fos = new ForkOutputStream(os);
+ message.setContent(OutputStream.class, fos);
+
+ /*
+ if (os instanceof AbstractCachedOutputStream) {
+ try {
+ String s = ((AbstractCachedOutputStream)os).toString();
+ MessageFactory mf = MessageFactory.newInstance();
+ ByteArrayInputStream bis = new ByteArrayInputStream(s.getBytes());
+ SOAPMessage sm = mf.createMessage(null, bis);
+ outbound.add(sm);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ */
+ }
+
+ @Override
+ public Set<String> getBefore() {
+ return before;
+ }
+
+ protected List<SOAPMessage> getOutboundMessages() {
+ return outbound;
+ }
+
+ /**
+ * Output stream that multicasts its data to several underlying output streams.
+ */
+ class ForkOutputStream extends OutputStream {
+
+ final OutputStream original;
+ final ByteArrayOutputStream bos;
+
+ public ForkOutputStream(OutputStream o) {
+ original = o;
+ bos = new ByteArrayOutputStream();
+ }
+
+ @Override
+ public void close() throws IOException {
+ bos.close();
+ try {
+ MessageFactory mf = MessageFactory.newInstance();
+ ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+ SOAPMessage sm = mf.createMessage(null, bis);
+ outbound.add(sm);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ original.close();
+ }
+
+ @Override
+ public void flush() throws IOException {
+ bos.flush();
+ original.flush();
+ }
+
+ @Override
+ public void write(byte[] b, int off, int len) throws IOException {
+ bos.write(b, off, len);
+ original.write(b, off, len);
+ }
+
+ @Override
+ public void write(byte[] b) throws IOException {
+ bos.write(b);
+ original.write(b);
+ }
+
+ @Override
+ public void write(int b) throws IOException {
+ bos.write(b);
+ original.write(b);
+ }
+
+
+ }
+
+}
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
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=472063&r1=472062&r2=472063
==============================================================================
--- 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 Tue Nov 7 03:12:10 2006
@@ -19,16 +19,20 @@
package org.apache.cxf.systest.ws.rm;
+import java.util.logging.Logger;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBusFactory;
+import org.apache.cxf.greeter_control.Control;
+import org.apache.cxf.greeter_control.ControlService;
import org.apache.cxf.greeter_control.Greeter;
import org.apache.cxf.greeter_control.GreeterService;
import org.apache.cxf.systest.common.ClientServerSetupBase;
import org.apache.cxf.systest.common.ClientServerTestBase;
+import org.apache.cxf.ws.rm.RMConstants;
/**
@@ -37,7 +41,19 @@
*/
public class SequenceTest extends ClientServerTestBase {
+ private static final Logger LOG = Logger.getLogger(SequenceTest.class.getName());
+ private static final String APP_NAMESPACE = "http://celtix.objectweb.org/greeter_control";
+ private static final String GREETMEONEWAY_ACTION = APP_NAMESPACE + "/types/Greeter/greetMeOneWay";
+ //private static final String GREETME_ACTION = APP_NAMESPACE + "/types/Greeter/greetMe";
+ //private static final String GREETME_RESPONSE_ACTION = GREETME_ACTION + "Response";
+
+ private Control control;
+ private Bus greeterBus;
private Greeter greeter;
+ private String currentCfgResource;
+ private MessageFlow mf;
+
+ private boolean doTestOnewayAnonymousAcks = true;
public static void main(String[] args) {
junit.textui.TestRunner.run(SequenceTest.class);
@@ -47,45 +63,89 @@
TestSuite suite = new TestSuite(SequenceTest.class);
return new ClientServerSetupBase(suite) {
public void startServers() throws Exception {
- // special case handling for WS-Addressing system test to avoid
- // UUID related issue when server is run as separate process
- // via maven on Win2k
- /*
- boolean inProcess = "Windows 2000".equals(System.getProperty("os.name"));
- assertTrue("server did not launch correctly",
- launchServer(Server.class, inProcess));
- */
assertTrue("server did not launch correctly", launchServer(Server.class));
}
public void setUp() throws Exception {
startServers();
- System.out.println("Started server");
+ LOG.fine("Started server");
SpringBusFactory bf = new SpringBusFactory();
- Bus bus = bf.createBus("org/apache/cxf/systest/ws/rm/cxf.xml");
+ Bus bus = bf.createBus();
bf.setDefaultBus(bus);
setBus(bus);
- System.out.println("Created client bus");
+ LOG.fine("Created client bus");
}
};
}
public void setUp() throws Exception {
super.setUp();
- GreeterService service = new GreeterService();
- System.out.println("Created GreeterService");
- greeter = service.getGreeterPort();
- System.out.println("Created Greeter");
+ ControlService service = new ControlService();
+ LOG.fine("Created ControlService");
+ control = service.getControlPort();
+ LOG.fine("Created Control");
}
public void tearDown() {
+ if (null != greeter) {
+ assertTrue("Failed to stop greeter", control.stopGreeter());
+ greeterBus.shutdown(true);
+ }
}
- //--Tests
+ // --- tests ---
- public void testOneway() {
- System.out.println("Invoking greetMeOneWay ...");
- greeter.greetMeOneWay("cxf");
+ public void testOnewayAnonymousAcks() throws Exception {
+ if (!doTestOnewayAnonymousAcks) {
+ return;
+ }
+ setupGreeter("org/apache/cxf/systest/ws/rm/anonymous.xml");
+
+ greeter.greetMeOneWay("once");
+ greeter.greetMeOneWay("twice");
+ greeter.greetMeOneWay("thrice");
+
+ // three application messages plus createSequence
+
+ mf.verifyMessages(4, true);
+ String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(), GREETMEONEWAY_ACTION,
+ GREETMEONEWAY_ACTION, GREETMEONEWAY_ACTION};
+ expectedActions = new String[] {RMConstants.getCreateSequenceAction(), "", "", ""};
+ mf.verifyActions(expectedActions, true);
+ mf.verifyMessageNumbers(new String[] {null, "1", "2", "3"}, true);
+
+ // createSequenceResponse plus ? partial responses
+ // partial responses not sent!
+ mf.verifyMessages(1, false);
+ expectedActions = new String[] {RMConstants.getCreateSequenceResponseAction()};
+ mf.verifyActions(expectedActions, false);
+ mf.verifyMessageNumbers(new String[] {null}, false);
+ mf.verifyAcknowledgements(new boolean[] {false}, false);
+ }
+
+ // --- test utilities ---
+
+ private void setupGreeter(String cfgResource) {
+
+ SpringBusFactory bf = new SpringBusFactory();
+ greeterBus = bf.createBus(cfgResource);
+ bf.setDefaultBus(greeterBus);
+
+ OutMessageRecorder outRecorder = new OutMessageRecorder();
+ greeterBus.getOutInterceptors().add(new JaxwsInterceptorRemover());
+ greeterBus.getOutInterceptors().add(outRecorder);
+ InMessageRecorder inRecorder = new InMessageRecorder();
+ greeterBus.getInInterceptors().add(inRecorder);
+ currentCfgResource = cfgResource;
+
+ assertTrue("Failed to start greeter", control.startGreeter(cfgResource));
+
+ GreeterService service = new GreeterService();
+ greeter = service.getGreeterPort();
+
+ mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
+
+
}
}
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/Server.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/Server.java?view=diff&rev=472063&r1=472062&r2=472063
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/Server.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/Server.java Tue Nov 7 03:12:10 2006
@@ -28,16 +28,16 @@
public class Server extends TestServerBase {
- private static final String ADDRESS = "http://localhost:9020/SoapContext/GreeterPort";
+ private static final String ADDRESS = "http://localhost:9001/SoapContext/ControlPort";
protected void run() {
SpringBusFactory factory = new SpringBusFactory();
- Bus bus = factory.createBus("org/apache/cxf/systest/ws/rm/cxf.xml");
+ Bus bus = factory.createBus();
factory.setDefaultBus(bus);
setBus(bus);
- GreeterImpl implementor = new GreeterImpl();
+ ControlImpl implementor = new ControlImpl();
Endpoint.publish(ADDRESS, implementor);
}
Copied: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/anonymous.xml (from r471709, incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/cxf.xml)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/anonymous.xml?view=diff&rev=472063&p1=incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/cxf.xml&r1=471709&p2=incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/anonymous.xml&r2=472063
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/cxf.xml (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/anonymous.xml Tue Nov 7 03:12:10 2006
@@ -33,8 +33,10 @@
</bean>
-->
-
+ <!--
<bean id="logOutgoing" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
+ -->
+ <bean id="logOutgoing" class="org.apache.cxf.systest.ws.rm.OutMessageRecorder"/>
<bean id="logIncoming" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="mapAggregator" class="org.apache.cxf.ws.addressing.MAPAggregator"/>
<bean id="mapCodec" class="org.apache.cxf.ws.addressing.soap.MAPCodec"/>
@@ -52,6 +54,8 @@
<property name="inInterceptors">
<list>
<ref bean="logIncoming"/>
+ <!--
+ -->
<ref bean="mapAggregator"/>
<ref bean="mapCodec"/>
<ref bean="rmLogicalIn"/>
@@ -61,6 +65,8 @@
<property name="inFaultInterceptors">
<list>
<ref bean="logIncoming"/>
+ <!--
+ -->
<ref bean="mapAggregator"/>
<ref bean="mapCodec"/>
<ref bean="rmLogicalIn"/>
Re: svn commit: r472063 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/phase/
systests/src/test/java/org/apache/cxf/systest/ws/rm/
Posted by Andrea Smyth <an...@iona.com>.
I'm working on it ...
Andrea.
Daniel Kulp wrote:
>Andrea,
>
>The SequenceTest is now failing with JDK 1.5.0_08 and _09. Could you
>look into that?
>
>Thanks!
>Dan
>
>
>On Tuesday November 07 2006 6:12 am, andreasmyth@apache.org wrote:
>
>
>>Author: andreasmyth
>>Date: Tue Nov 7 03:12:10 2006
>>New Revision: 472063
>>
>>URL: http://svn.apache.org/viewvc?view=rev&rev=472063
>>Log:
>>[JIRA CXF-140] Implemented verifiers for RM system test.
>>Refactored test to use Control interface so that tests can run against
>>differently configure server endpoints. Removed printlns.
>>
>>Added:
>>
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/ControlImpl.java - copied, changed from r471745,
>>incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>>eb/celtix/systest/ws/rm/ControlImpl.java
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/InMessageRecorder.java (with props)
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/JaxwsInterceptorRemover.java (with props)
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/MessageFlow.java - copied, changed from r471795,
>>incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>>eb/celtix/systest/ws/rm/MessageFlow.java
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/OutMessageRecorder.java (with props)
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/anonymous.xml - copied, changed from r471709,
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/cxf.xml Removed:
>>
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/cxf.xml Modified:
>>
>>incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/GreeterImpl.java
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/SequenceTest.java
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/Server.java
>>
>>Modified:
>>incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
>>URL:
>>http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/
>>apache/cxf/phase/Phase.java?view=diff&rev=472063&r1=472062&r2=472063
>>=======================================================================
>>======= ---
>>incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
>>(original) +++
>>incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
>>Tue Nov 7 03:12:10 2006 @@ -34,7 +34,7 @@
>> public static final String PREPARE_SEND = "prepare-send";
>> public static final String PRE_STREAM = "pre-stream";
>> public static final String USER_STREAM = "user-stream";
>>- public static final String POST_STREAM = "port-stream";
>>+ public static final String POST_STREAM = "post-stream";
>> public static final String WRITE = "write";
>> public static final String SEND = "send";
>>
>>
>>Copied:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/ControlImpl.java (from r471745,
>>incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>>eb/celtix/systest/ws/rm/ControlImpl.java) URL:
>>http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>>/org/apache/cxf/systest/ws/rm/ControlImpl.java?view=diff&rev=472063&p1=i
>>ncubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb
>>/celtix/systest/ws/rm/ControlImpl.java&r1=471745&p2=incubator/cxf/trunk/
>>systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java&r2=
>>472063
>>=======================================================================
>>======= ---
>>incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>>eb/celtix/systest/ws/rm/ControlImpl.java (original) +++
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/ControlImpl.java Tue Nov 7 03:12:10 2006 @@ -1,52 +1,61 @@
>>-package org.objectweb.celtix.systest.ws.rm;
>>+/**
>>+ * 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.
>>+ */
>>+
>>+
>>+package org.apache.cxf.systest.ws.rm;
>>
>>-import java.net.URL;
>> import java.util.concurrent.Future;
>> import java.util.logging.Logger;
>>
>> import javax.jws.WebService;
>>-import javax.xml.namespace.QName;
>> import javax.xml.ws.AsyncHandler;
>> import javax.xml.ws.Endpoint;
>> import javax.xml.ws.Response;
>>
>>-import org.objectweb.celtix.Bus;
>>-import org.objectweb.celtix.BusException;
>>-import org.objectweb.celtix.greeter_control.Control;
>>-import
>>org.objectweb.celtix.greeter_control.types.StartGreeterResponse;
>>-import org.objectweb.celtix.greeter_control.types.StopGreeterResponse;
>>+import org.apache.cxf.Bus;
>>+import org.apache.cxf.bus.spring.SpringBusFactory;
>>+import org.apache.cxf.greeter_control.Control;
>>+import org.apache.cxf.greeter_control.types.StartGreeterResponse;
>>+import org.apache.cxf.greeter_control.types.StopGreeterResponse;
>>
>>
>> @WebService(serviceName = "ControlService",
>> portName = "ControlPort",
>>- endpointInterface =
>>"org.objectweb.celtix.greeter_control.Control", -
>>targetNamespace = "http://celtix.objectweb.org/greeter_control") +
>> endpointInterface = "org.apache.cxf.greeter_control.Control", +
>> targetNamespace = "http://cxf.apache.org/greeter_control")
>>public class ControlImpl implements Control {
>>
>> private static final Logger LOG =
>>Logger.getLogger(ControlImpl.class.getName()); - private static
>>QName serviceName = new
>>QName("http://celtix.objectweb.org/greeter_control", -
>> "GreeterService"); private Endpoint
>>endpoint;
>> private Bus greeterBus;
>>
>>- public boolean startGreeter(String configuration) {
>>+ public boolean startGreeter(String cfgResource) {
>>
>>- if (!(null == configuration || "".equals(configuration))) {
>>- setConfigFileProperty(configuration);
>>- }
>>-
>>- try {
>>- greeterBus = Bus.init();
>>- } catch (BusException ex) {
>>- return false;
>>- }
>>-
>>- TestConfigurator tc = new
>>TestConfigurator(greeterBus.getConfigurationBuilder()); -
>>tc.configureServer(serviceName);
>>+ SpringBusFactory bf = new SpringBusFactory();
>>+ greeterBus = bf.createBus(cfgResource);
>>+ bf.setDefaultBus(greeterBus);
>>+ LOG.info("Initialised bus with cfg file resource: " +
>>cfgResource);
>>
>> GreeterImpl implementor = new GreeterImpl();
>> String address =
>>"http://localhost:9020/SoapContext/GreeterPort"; endpoint =
>>Endpoint.publish(address, implementor);
>>+ LOG.info("Published greeter endpoint.");
>>
>> return true;
>> }
>>@@ -61,25 +70,11 @@
>> }
>> endpoint = null;
>> if (null != greeterBus) {
>>- try {
>>- greeterBus.shutdown(true);
>>- } catch (BusException ex) {
>>- return false;
>>- }
>>+ greeterBus.shutdown(true);
>> }
>> return true;
>> }
>>
>>- public static void setConfigFileProperty(String cfgName) {
>>- URL url = ControlImpl.class.getResource(cfgName + ".xml");
>>- if (null == url) {
>>- LOG.severe("cannot find test resource " + cfgName +
>>".xml"); - return;
>>- }
>>- String configFileName = url.toString();
>>- System.setProperty("celtix.config.file", configFileName);
>>- }
>>-
>> public Future<?> startGreeterAsync(String requestType,
>>AsyncHandler<StartGreeterResponse> asyncHandler) { // never called
>> return null;
>>
>>Modified:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/GreeterImpl.java URL:
>>http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>>/org/apache/cxf/systest/ws/rm/GreeterImpl.java?view=diff&rev=472063&r1=4
>>72062&r2=472063
>>=======================================================================
>>======= ---
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/GreeterImpl.java (original) +++
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/GreeterImpl.java Tue Nov 7 03:12:10 2006 @@ -20,6 +20,7 @@
>> package org.apache.cxf.systest.ws.rm;
>>
>> import java.util.concurrent.Future;
>>+import java.util.logging.Logger;
>>
>> import javax.jws.WebService;
>> import javax.xml.ws.AsyncHandler;
>>@@ -41,11 +42,12 @@
>> targetNamespace = "http://cxf.apache.org/greeter_control")
>> public class GreeterImpl implements Greeter {
>>
>>+ private static final Logger LOG =
>>Logger.getLogger(GreeterImpl.class.getName());
>>
>> public String greetMe(String arg0) {
>>- System.out.println("Executing operation greetMe with
>>parameter: " + arg0); + LOG.fine("Executing operation greetMe
>>with parameter: " + arg0); String result = arg0.toUpperCase();
>>- System.out.println("returning: " + result);
>>+ LOG.fine("returning: " + result);
>> return result;
>> }
>>
>>@@ -60,11 +62,11 @@
>> }
>>
>> public void greetMeOneWay(String arg0) {
>>- System.out.println("Executing operation greetMeOneWay with
>>parameter: " + arg0); + LOG.fine("Executing operation
>>greetMeOneWay with parameter: " + arg0); }
>>
>> public void pingMe() throws PingMeFault {
>>- System.out.println("Executing operation pingMe");
>>+ LOG.fine("Executing operation pingMe");
>> }
>>
>> public Response<PingMeResponse> pingMeAsync() {
>>
>>Added:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/InMessageRecorder.java URL:
>>http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>>/org/apache/cxf/systest/ws/rm/InMessageRecorder.java?view=auto&rev=47206
>>3
>>=======================================================================
>>======= ---
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/InMessageRecorder.java (added) +++
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/InMessageRecorder.java Tue Nov 7 03:12:10 2006 @@ -0,0 +1,71 @@
>>+/**
>>+ * 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.
>>+ */
>>+package org.apache.cxf.systest.ws.rm;
>>+
>>+import java.io.ByteArrayInputStream;
>>+import java.io.ByteArrayOutputStream;
>>+import java.io.InputStream;
>>+import java.util.ArrayList;
>>+import java.util.List;
>>+
>>+import javax.xml.soap.MessageFactory;
>>+import javax.xml.soap.SOAPMessage;
>>+
>>+import org.apache.cxf.helpers.IOUtils;
>>+import org.apache.cxf.interceptor.Fault;
>>+import org.apache.cxf.message.Message;
>>+import org.apache.cxf.phase.AbstractPhaseInterceptor;
>>+import org.apache.cxf.phase.Phase;
>>+
>>+public class InMessageRecorder extends
>>AbstractPhaseInterceptor<Message> { +
>>+ private List<SOAPMessage> inbound;
>>+
>>+ public InMessageRecorder() {
>>+ inbound = new ArrayList<SOAPMessage>();
>>+ setPhase(Phase.RECEIVE);
>>+ }
>>+
>>+ public void handleMessage(Message message) throws Fault {
>>+ InputStream is = message.getContent(InputStream.class);
>>+
>>+ if (is == null) {
>>+ return;
>>+ }
>>+
>>+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
>>+ try {
>>+ IOUtils.copy(is, bos);
>>+ is.close();
>>+ bos.close();
>>+ MessageFactory mf = MessageFactory.newInstance();
>>+ ByteArrayInputStream bis = new
>>ByteArrayInputStream(bos.toByteArray()); + SOAPMessage sm =
>>mf.createMessage(null, bis);
>>+ inbound.add(sm);
>>+ bis = new ByteArrayInputStream(bos.toByteArray());
>>+ message.setContent(InputStream.class, bis);
>>+ } catch (Exception ex) {
>>+ ex.printStackTrace();
>>+ }
>>+ }
>>+
>>+ protected List<SOAPMessage> getInboundMessages() {
>>+ return inbound;
>>+ }
>>+}
>>
>>Propchange:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/InMessageRecorder.java
>>-----------------------------------------------------------------------
>>------- svn:eol-style = native
>>
>>Propchange:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/InMessageRecorder.java
>>-----------------------------------------------------------------------
>>------- svn:keywords = Rev Date
>>
>>Added:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/JaxwsInterceptorRemover.java URL:
>>http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>>/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java?view=auto&rev
>>=472063
>>=======================================================================
>>======= ---
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/JaxwsInterceptorRemover.java (added) +++
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/JaxwsInterceptorRemover.java Tue Nov 7 03:12:10 2006 @@ -0,0 +1,79 @@
>>+/**
>>+ * 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.
>>+ */
>>+
>>+package org.apache.cxf.systest.ws.rm;
>>+
>>+import java.util.Collections;
>>+import java.util.ListIterator;
>>+import java.util.Set;
>>+
>>+
>>+import org.apache.cxf.interceptor.Fault;
>>+import org.apache.cxf.interceptor.InterceptorChain;
>>+import org.apache.cxf.jaxws.handler.LogicalHandlerInterceptor;
>>+import org.apache.cxf.jaxws.handler.StreamHandlerInterceptor;
>>+import org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor;
>>+import org.apache.cxf.message.Message;
>>+import org.apache.cxf.phase.AbstractPhaseInterceptor;
>>+import org.apache.cxf.phase.Phase;
>>+import org.apache.cxf.phase.PhaseInterceptor;
>>+
>>+
>>+/**
>>+ *
>>+ */
>>+public class JaxwsInterceptorRemover extends AbstractPhaseInterceptor
>>{ +
>>+ private Set<String> before =
>>Collections.singleton(LogicalHandlerInterceptor.class.getName()); +
>>+ public JaxwsInterceptorRemover() {
>>+ setPhase(Phase.PRE_LOGICAL);
>>+ }
>>+
>>+ public void handleMessage(Message message) throws Fault {
>>+
>>+ // remove the JAXWS handler interceptors
>>+ InterceptorChain chain = message.getInterceptorChain();
>>+ ListIterator it = chain.getIterator();
>>+ while (it.hasNext()) {
>>+ PhaseInterceptor pi = (PhaseInterceptor)it.next();
>>+ if
>>(LogicalHandlerInterceptor.class.getName().equals(pi.getId())) { +
>> chain.remove(pi);
>>+ break;
>>+ }
>>+ }
>>+ it = chain.getIterator();
>>+ while (it.hasNext()) {
>>+ PhaseInterceptor pi = (PhaseInterceptor)it.next();
>>+ if
>>(SOAPHandlerInterceptor.class.getName().equals(pi.getId())) { +
>> chain.remove(pi);
>>+ break;
>>+ }
>>+ }
>>+ it = chain.getIterator();
>>+ while (it.hasNext()) {
>>+ PhaseInterceptor pi = (PhaseInterceptor)it.next();
>>+ if
>>(StreamHandlerInterceptor.class.getName().equals(pi.getId())) { +
>> chain.remove(pi);
>>+ break;
>>+ }
>>+ }
>>+ }
>>+
>>+}
>>
>>Propchange:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/JaxwsInterceptorRemover.java
>>-----------------------------------------------------------------------
>>------- svn:eol-style = native
>>
>>Propchange:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/JaxwsInterceptorRemover.java
>>-----------------------------------------------------------------------
>>------- svn:keywords = Rev Date
>>
>>Copied:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/MessageFlow.java (from r471795,
>>incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>>eb/celtix/systest/ws/rm/MessageFlow.java) URL:
>>http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>>/org/apache/cxf/systest/ws/rm/MessageFlow.java?view=diff&rev=472063&p1=i
>>ncubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb
>>/celtix/systest/ws/rm/MessageFlow.java&r1=471795&p2=incubator/cxf/trunk/
>>systests/src/test/java/org/apache/cxf/systest/ws/rm/MessageFlow.java&r2=
>>472063
>>=======================================================================
>>======= ---
>>incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>>eb/celtix/systest/ws/rm/MessageFlow.java (original) +++
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/MessageFlow.java Tue Nov 7 03:12:10 2006 @@ -1,4 +1,23 @@
>>-package org.objectweb.celtix.systest.ws.rm;
>>+/**
>>+ * 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.
>>+ */
>>+
>>+package org.apache.cxf.systest.ws.rm;
>>
>> import java.io.ByteArrayOutputStream;
>> import java.util.Iterator;
>>@@ -11,50 +30,38 @@
>> import javax.xml.soap.SOAPHeader;
>> import javax.xml.soap.SOAPHeaderElement;
>> import javax.xml.soap.SOAPMessage;
>>-import javax.xml.ws.handler.LogicalMessageContext;
>>
>> import junit.framework.Assert;
>>
>>-import org.objectweb.celtix.ws.addressing.AddressingProperties;
>>-import org.objectweb.celtix.ws.addressing.ContextUtils;
>>-import org.objectweb.celtix.ws.rm.Names;
>>-import org.objectweb.celtix.ws.rm.RMContextUtils;
>>-import org.objectweb.celtix.ws.rm.RMProperties;
>>-import org.objectweb.celtix.ws.rm.SequenceAcknowledgement;
>>-import org.objectweb.celtix.ws.rm.SequenceType;
>>+import org.apache.cxf.ws.rm.RMConstants;
>>
>>
>>
>> public class MessageFlow extends Assert {
>>
>> private List<SOAPMessage> outboundMessages;
>>- private List<LogicalMessageContext> inboundContexts;
>>+ private List<SOAPMessage> inboundMessages;
>>
>>
>>- public MessageFlow(List<SOAPMessage> o,
>>List<LogicalMessageContext> i) { + public
>>MessageFlow(List<SOAPMessage> o, List<SOAPMessage> i) {
>>outboundMessages = o;
>>- inboundContexts = i;
>>+ inboundMessages = i;
>> }
>>
>> public List<SOAPMessage> getOutboundMessages() {
>> return outboundMessages;
>> }
>>
>>- public List<LogicalMessageContext> getInboundContexts() {
>>- return inboundContexts;
>>- }
>>-
>>- public void clear() {
>>- getOutboundMessages().clear();
>>- getInboundContexts().clear();
>>+ public List<SOAPMessage> getInboundMessages() {
>>+ return inboundMessages;
>> }
>>
>> public void verifyActions(String[] expectedActions, boolean
>>outbound) throws Exception {
>>
>>- assertEquals(expectedActions.length, outbound ?
>>outboundMessages.size() : inboundContexts.size()); +
>>assertEquals(expectedActions.length, outbound ? outboundMessages.size()
>>: inboundMessages.size());
>>
>> for (int i = 0; i < expectedActions.length; i++) {
>>- String action = outbound ?
>>getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
>>+ String action = outbound ?
>>getAction(outboundMessages.get(i)) : getAction(inboundMessages.get(i));
>>if (null == expectedActions[i]) {
>> assertNull((outbound ? "Outbound " : "Inbound") + "
>>message " + i + " has unexpected action: " + action, action); @@ -68,12
>>+75,12 @@
>>
>> public boolean checkActions(String[] expectedActions, boolean
>>outbound) throws Exception {
>>
>>- if (expectedActions.length != (outbound ?
>>outboundMessages.size() : inboundContexts.size())) { + if
>>(expectedActions.length != (outbound ? outboundMessages.size() :
>>inboundMessages.size())) { return false;
>> }
>>
>> for (int i = 0; i < expectedActions.length; i++) {
>>- String action = outbound ?
>>getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
>>+ String action = outbound ?
>>getAction(outboundMessages.get(i)) : getAction(inboundMessages.get(i));
>>if (null == expectedActions[i]) {
>> if (action != null) {
>> return false;
>>@@ -91,10 +98,10 @@
>> int expectedCount,
>> boolean outbound,
>> boolean exact) throws Exception {
>>- int messageCount = outbound ? outboundMessages.size() :
>>inboundContexts.size(); + int messageCount = outbound ?
>>outboundMessages.size() : inboundMessages.size(); int count = 0;
>> for (int i = 0; i < messageCount; i++) {
>>- String action = outbound ?
>>getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
>>+ String action = outbound ?
>>getAction(outboundMessages.get(i)) : getAction(inboundMessages.get(i));
>>if (null == expectedAction) {
>> if (action == null) {
>> count++;
>>@@ -125,7 +132,7 @@
>> boolean exact) throws Exception {
>>
>> int actualMessageCount =
>>- outbound ? outboundMessages.size() :
>>inboundContexts.size(); + outbound ? outboundMessages.size()
>>: inboundMessages.size(); if (exact) {
>> assertEquals(expectedMessageNumbers.length,
>>actualMessageCount); } else {
>>@@ -134,38 +141,25 @@
>>
>> if (exact) {
>> for (int i = 0; i < expectedMessageNumbers.length; i++) {
>>- if (outbound) {
>>- SOAPElement se =
>>getSequence(outboundMessages.get(i)); - if (null ==
>>expectedMessageNumbers[i]) {
>>- assertNull("Outbound message " + i + "
>>contains unexpected message number ", se); - } else
>>{
>>- assertEquals("Outbound message " + i + " does
>>not contain expected message number " -
>> + expectedMessageNumbers[i], expectedMessageNumbers[i], -
>> getMessageNumber(se));
>>- }
>>+ SOAPElement se = outbound ?
>>getSequence(outboundMessages.get(i)) + :
>>getSequence(inboundMessages.get(i));
>>+ if (null == expectedMessageNumbers[i]) {
>>+ assertNull((outbound ? "Outbound" : "Inbound") + "
>>message " + i + + " contains unexpected message
>>number ", se); } else {
>>- SequenceType s =
>>getSequence(inboundContexts.get(i)); - String
>>messageNumber = null == s ? null : s.getMessageNumber().toString(); -
>> if (null == expectedMessageNumbers[i]) {
>>- assertNull("Inbound message " + i + " contains
>>unexpected message number ", -
>>messageNumber);
>>- } else {
>>- assertEquals("Inbound message " + i + " does
>>not contain expected message number " -
>> + expectedMessageNumbers[i], expectedMessageNumbers[i],
>>messageNumber); - }
>>+ assertEquals((outbound ? "Outbound" : "Inbound") +
>>" message " + i + + " does not contain expected
>>message number " + +
>>expectedMessageNumbers[i], expectedMessageNumbers[i], +
>> getMessageNumber(se));
>> }
>> }
>> } else {
>> boolean[] matches = new
>>boolean[expectedMessageNumbers.length]; for (int i = 0; i <
>>actualMessageCount; i++) {
>> String messageNumber = null;
>>- if (outbound) {
>>- SOAPElement se =
>>getSequence(outboundMessages.get(i)); -
>>messageNumber = null == se ? null : getMessageNumber(se); -
>> } else {
>>- SequenceType s =
>>getSequence(inboundContexts.get(i)); - messageNumber
>>= null == s ? null : s.getMessageNumber().toString(); -
>>}
>>+ SOAPElement se = outbound ?
>>getSequence(outboundMessages.get(i)) + :
>>getSequence(inboundMessages.get(i));
>>+ messageNumber = null == se ? null :
>>getMessageNumber(se); for (int j = 0; j <
>>expectedMessageNumbers.length; j++) { if (messageNumber == null) {
>> if (expectedMessageNumbers[j] == null &&
>>!matches[j]) { @@ -197,7 +191,7 @@
>> boolean exact) throws Exception {
>>
>> int actualMessageCount =
>>- outbound ? outboundMessages.size() :
>>inboundContexts.size(); + outbound ? outboundMessages.size()
>>: inboundMessages.size(); if (exact) {
>> assertEquals(expectedLastMessages.length,
>>actualMessageCount); } else {
>>@@ -206,13 +200,9 @@
>>
>> for (int i = 0; i < expectedLastMessages.length; i++) {
>> boolean lastMessage;
>>- if (outbound) {
>>- SOAPElement se = getSequence(outboundMessages.get(i));
>>- lastMessage = null == se ? false : getLastMessage(se);
>>- } else {
>>- SequenceType s = getSequence(inboundContexts.get(i));
>>- lastMessage = null == s ? false : null !=
>>s.getLastMessage(); - }
>>+ SOAPElement se = outbound ?
>>getSequence(outboundMessages.get(i)) + :
>>getSequence(inboundMessages.get(i));
>>+ lastMessage = null == se ? false : getLastMessage(se);
>> assertEquals("Outbound message " + i
>> + (expectedLastMessages[i] ? " does not
>>contain expected last message element."
>>
>> : " contains last message element."),
>>
>>@@ -223,11 +213,11 @@
>>
>> public void verifyAcknowledgements(boolean[] expectedAcks, boolean
>>outbound) throws Exception { assertEquals(expectedAcks.length, outbound
>>? outboundMessages.size() - : inboundContexts.size());
>>+ : inboundMessages.size());
>>
>> for (int i = 0; i < expectedAcks.length; i++) {
>> boolean ack = outbound ? (null !=
>>getAcknowledgment(outboundMessages.get(i))) - : (null !=
>>getAcknowledgment(inboundContexts.get(i))); + : (null !=
>>getAcknowledgment(inboundMessages.get(i)));
>>
>> if (expectedAcks[i]) {
>> assertTrue((outbound ? "Outbound" : "Inbound") + "
>>message " + i @@ -244,11 +234,11 @@
>> boolean exact) throws Exception
>>{
>>
>> int actualMessageCount =
>>- outbound ? outboundMessages.size() :
>>inboundContexts.size(); + outbound ? outboundMessages.size()
>>: inboundMessages.size(); int ackCount = 0;
>> for (int i = 0; i < actualMessageCount; i++) {
>> boolean ack = outbound ? (null !=
>>getAcknowledgment(outboundMessages.get(i))) - : (null !=
>>getAcknowledgment(inboundContexts.get(i))); + : (null !=
>>getAcknowledgment(inboundMessages.get(i))); if (ack) {
>> ackCount++;
>> }
>>@@ -264,9 +254,10 @@
>> }
>>
>>
>>- public void verifyAckRequestedOutbound() throws Exception {
>>+ public void verifyAckRequestedOutbound(boolean outbound) throws
>>Exception { boolean found = false;
>>- for (SOAPMessage m : outboundMessages) {
>>+ List<SOAPMessage> messages = outbound ? outboundMessages :
>>inboundMessages; + for (SOAPMessage m : messages) {
>> SOAPElement se = getAckRequested(m);
>> if (se != null) {
>> found = true;
>>@@ -275,21 +266,7 @@
>> }
>> assertTrue("expected AckRequested", found);
>> }
>>-
>>- public void verifyAckRequestedInbound(List<LogicalMessageContext>
>>contexts) throws Exception { - boolean found = false;
>>- for (LogicalMessageContext context : contexts) {
>>- RMProperties rmps =
>>RMContextUtils.retrieveRMProperties(context, false); - if
>>(null != rmps
>>- && rmps.getAcksRequested() != null
>>- && rmps.getAcksRequested().size() > 0) {
>>- found = true;
>>- break;
>>- }
>>- }
>>- assertTrue("expected AckRequested", found);
>>- }
>>-
>>+
>> protected String getAction(SOAPMessage msg) throws Exception {
>> SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
>> SOAPHeader header = env.getHeader();
>>@@ -298,24 +275,16 @@
>> SOAPHeaderElement headerElement =
>>(SOAPHeaderElement)headerElements.next(); Name headerName =
>>headerElement.getElementName(); String localName =
>>headerName.getLocalName();
>>- if
>>((headerName.getURI().equals(org.objectweb.celtix.ws.addressing.Names.W
>>SA_NAMESPACE_NAME) - ||
>>headerName.getURI().equals(org.objectweb.celtix.ws.addressing.VersionTr
>>ansformer + if
>>((headerName.getURI().equals(org.apache.cxf.ws.addressing.Names.WSA_NAM
>>ESPACE_NAME) + ||
>>headerName.getURI().equals(org.apache.cxf.ws.addressing.VersionTransfor
>>mer .Names200408.WSA_NAMESPACE_NAME)) - &&
>>localName.equals(org.objectweb.celtix.ws.addressing.Names.WSA_ACTION_NA
>>ME)) { + &&
>>localName.equals(org.apache.cxf.ws.addressing.Names.WSA_ACTION_NAME)) {
>>return headerElement.getTextContent();
>> }
>> }
>> return null;
>> }
>>
>>- protected String getAction(LogicalMessageContext context) {
>>- AddressingProperties maps = ContextUtils.retrieveMAPs(context,
>>false, false); - if (null != maps && null != maps.getAction()) {
>>- return maps.getAction().getValue();
>>- }
>>- return null;
>>- }
>>-
>> protected SOAPElement getSequence(SOAPMessage msg) throws
>>Exception { SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
>> SOAPHeader header = env.getHeader();
>>@@ -324,8 +293,8 @@
>> SOAPHeaderElement headerElement =
>>(SOAPHeaderElement)headerElements.next(); Name headerName =
>>headerElement.getElementName(); String localName =
>>headerName.getLocalName();
>>- if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
>>- && localName.equals(Names.WSRM_SEQUENCE_NAME)) {
>>+ if
>>(headerName.getURI().equals(RMConstants.WSRM_NAMESPACE_NAME) +
>> && localName.equals(RMConstants.WSRM_SEQUENCE_NAME)) { return
>>headerElement;
>> }
>> }
>>@@ -334,18 +303,13 @@
>>
>> public String getMessageNumber(SOAPElement elem) throws Exception
>>{ SOAPElement se = (SOAPElement)elem.getChildElements(
>>- new
>>QName(Names.WSRM_NAMESPACE_NAME, +
>> new QName(RMConstants.WSRM_NAMESPACE_NAME,
>>"MessageNumber")).next(); return se.getTextContent();
>> }
>>
>>- protected SequenceType getSequence(LogicalMessageContext context)
>>{ - RMProperties rmps =
>>RMContextUtils.retrieveRMProperties(context, false); - return
>>rmps == null ? null : rmps.getSequence();
>>- }
>>-
>> private boolean getLastMessage(SOAPElement elem) throws Exception
>>{ - return elem.getChildElements(new
>>QName(Names.WSRM_NAMESPACE_NAME, "LastMessage")).hasNext(); +
>>return elem.getChildElements(new QName(RMConstants.WSRM_NAMESPACE_NAME,
>>"LastMessage")).hasNext(); }
>>
>> protected SOAPElement getAcknowledgment(SOAPMessage msg) throws
>>Exception { @@ -356,22 +320,14 @@
>> SOAPHeaderElement headerElement =
>>(SOAPHeaderElement)headerElements.next(); Name headerName =
>>headerElement.getElementName(); String localName =
>>headerName.getLocalName();
>>- if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
>>- && localName.equals(Names.WSRM_SEQUENCE_ACK_NAME)) {
>>+ if
>>(headerName.getURI().equals(RMConstants.WSRM_NAMESPACE_NAME) +
>> && localName.equals(RMConstants.WSRM_SEQUENCE_ACK_NAME)) { return
>>(SOAPElement)header.getChildElements().next(); }
>> }
>> return null;
>> }
>>
>>- protected SequenceAcknowledgement
>>getAcknowledgment(LogicalMessageContext context) { -
>>RMProperties rmps = RMContextUtils.retrieveRMProperties(context,
>>false); - if (null != rmps && null != rmps.getAcks() &&
>>rmps.getAcks().size() > 0) { - return
>>rmps.getAcks().iterator().next();
>>- }
>>- return null;
>>- }
>>-
>> private SOAPElement getAckRequested(SOAPMessage msg) throws
>>Exception { SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
>> SOAPHeader header = env.getHeader();
>>@@ -380,8 +336,8 @@
>> SOAPHeaderElement headerElement =
>>(SOAPHeaderElement)headerElements.next(); Name headerName =
>>headerElement.getElementName(); String localName =
>>headerName.getLocalName();
>>- if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
>>- && localName.equals(Names.WSRM_ACK_REQUESTED_NAME)) {
>>+ if
>>(headerName.getURI().equals(RMConstants.WSRM_NAMESPACE_NAME) +
>> && localName.equals(RMConstants.WSRM_ACK_REQUESTED_NAME)) {
>>return (SOAPElement)header.getChildElements().next(); }
>> }
>>@@ -403,10 +359,10 @@
>> }
>> } else {
>> if (exact) {
>>- assertEquals("Unexpected number of inbound messages",
>>nExpected, inboundContexts.size()); +
>>assertEquals("Unexpected number of inbound messages", nExpected,
>>inboundMessages.size()); } else {
>>- assertTrue("Unexpected number of inbound messages: " +
>>inboundContexts.size(), - nExpected <=
>>inboundContexts.size()); + assertTrue("Unexpected number
>>of inbound messages: " + inboundMessages.size(), +
>> nExpected <= inboundMessages.size()); }
>> }
>> }
>>@@ -418,7 +374,7 @@
>> public void verifyMessages(int nExpected, boolean outbound, int
>>interval, int attempts, boolean exact) { for (int i = 0; i < attempts;
>>i++) {
>> if ((outbound && outboundMessages.size() < nExpected)
>>- || (!outbound && inboundContexts.size() < nExpected))
>>{ + || (!outbound && inboundMessages.size() <
>>nExpected)) { try {
>> Thread.sleep(interval);
>> } catch (InterruptedException ex) {
>>@@ -432,17 +388,17 @@
>> }
>>
>> public void purgePartialResponses() throws Exception {
>>- for (int i = inboundContexts.size() - 1; i >= 0; i--) {
>>- if (isPartialResponse(inboundContexts.get(i))) {
>>- inboundContexts.remove(i);
>>+ for (int i = inboundMessages.size() - 1; i >= 0; i--) {
>>+ if (isPartialResponse(inboundMessages.get(i))) {
>>+ inboundMessages.remove(i);
>> }
>> }
>> }
>>
>> public void verifyPartialResponses(int nExpected) throws Exception
>>{ int npr = 0;
>>- for (int i = 0; i < inboundContexts.size(); i++) {
>>- if (isPartialResponse(inboundContexts.get(i))) {
>>+ for (int i = 0; i < inboundMessages.size(); i++) {
>>+ if (isPartialResponse(inboundMessages.get(i))) {
>> npr++;
>> }
>> }
>>@@ -450,13 +406,13 @@
>> nExpected, npr);
>> }
>>
>>- public boolean isPartialResponse(LogicalMessageContext ctx) throws
>>Exception { - return null == getAction(ctx) && emptyBody(ctx);
>>+ public boolean isPartialResponse(SOAPMessage msg) throws Exception
>>{ + // return null == getAction(ctx) && emptyBody(msg);
>>+ return false;
>> }
>>
>>- public boolean emptyBody(LogicalMessageContext ctx) throws
>>Exception { - return
>>!((SOAPMessage)ctx.get("org.objectweb.celtix.bindings.soap.message")) -
>> .getSOAPPart().getEnvelope().getBody().hasChildNodes(); +
>>public boolean emptyBody(SOAPMessage msg) throws Exception { +
>>return !msg.getSOAPPart().getEnvelope().getBody().hasChildNodes(); }
>>
>> private String outboundDump() {
>>
>>Added:
>>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=auto&rev=4720
>>63
>>=======================================================================
>>======= ---
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/OutMessageRecorder.java (added) +++
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/OutMessageRecorder.java Tue Nov 7 03:12:10 2006 @@ -0,0 +1,142 @@
>>+/**
>>+ * 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.
>>+ */
>>+
>>+package org.apache.cxf.systest.ws.rm;
>>+
>>+import java.io.ByteArrayInputStream;
>>+import java.io.ByteArrayOutputStream;
>>+import java.io.IOException;
>>+import java.io.OutputStream;
>>+import java.util.ArrayList;
>>+import java.util.Collections;
>>+import java.util.List;
>>+import java.util.Set;
>>+
>>+import javax.xml.soap.MessageFactory;
>>+import javax.xml.soap.SOAPMessage;
>>+
>>+import org.apache.cxf.interceptor.Fault;
>>+import org.apache.cxf.interceptor.StaxOutInterceptor;
>>+//import org.apache.cxf.io.AbstractCachedOutputStream;
>>+import org.apache.cxf.message.Message;
>>+import org.apache.cxf.phase.AbstractPhaseInterceptor;
>>+import org.apache.cxf.phase.Phase;
>>+
>>+
>>+/**
>>+ *
>>+ */
>>+public class OutMessageRecorder extends AbstractPhaseInterceptor {
>>+
>>+ private List<SOAPMessage> outbound;
>>+ private Set<String> before =
>>Collections.singleton(StaxOutInterceptor.class.getName()); +
>>+ public OutMessageRecorder() {
>>+ outbound = new ArrayList<SOAPMessage>();
>>+ //setPhase(Phase.POST_STREAM);
>>+ setPhase(Phase.PRE_PROTOCOL);
>>+ }
>>+
>>+ public void handleMessage(Message message) throws Fault {
>>+ OutputStream os = message.getContent(OutputStream.class);
>>+ if (null == os) {
>>+ return;
>>+ }
>>+ ForkOutputStream fos = new ForkOutputStream(os);
>>+ message.setContent(OutputStream.class, fos);
>>+
>>+ /*
>>+ if (os instanceof AbstractCachedOutputStream) {
>>+ try {
>>+ String s =
>>((AbstractCachedOutputStream)os).toString(); +
>>MessageFactory mf = MessageFactory.newInstance(); +
>>ByteArrayInputStream bis = new ByteArrayInputStream(s.getBytes()); +
>> SOAPMessage sm = mf.createMessage(null, bis); +
>> outbound.add(sm);
>>+ } catch (Exception ex) {
>>+ ex.printStackTrace();
>>+ }
>>+ }
>>+ */
>>+ }
>>+
>>+ @Override
>>+ public Set<String> getBefore() {
>>+ return before;
>>+ }
>>+
>>+ protected List<SOAPMessage> getOutboundMessages() {
>>+ return outbound;
>>+ }
>>+
>>+ /**
>>+ * Output stream that multicasts its data to several underlying
>>output streams. + */
>>+ class ForkOutputStream extends OutputStream {
>>+
>>+ final OutputStream original;
>>+ final ByteArrayOutputStream bos;
>>+
>>+ public ForkOutputStream(OutputStream o) {
>>+ original = o;
>>+ bos = new ByteArrayOutputStream();
>>+ }
>>+
>>+ @Override
>>+ public void close() throws IOException {
>>+ bos.close();
>>+ try {
>>+ MessageFactory mf = MessageFactory.newInstance();
>>+ ByteArrayInputStream bis = new
>>ByteArrayInputStream(bos.toByteArray()); + SOAPMessage
>>sm = mf.createMessage(null, bis); + outbound.add(sm);
>>+ } catch (Exception ex) {
>>+ ex.printStackTrace();
>>+ }
>>+ original.close();
>>+ }
>>+
>>+ @Override
>>+ public void flush() throws IOException {
>>+ bos.flush();
>>+ original.flush();
>>+ }
>>+
>>+ @Override
>>+ public void write(byte[] b, int off, int len) throws
>>IOException { + bos.write(b, off, len);
>>+ original.write(b, off, len);
>>+ }
>>+
>>+ @Override
>>+ public void write(byte[] b) throws IOException {
>>+ bos.write(b);
>>+ original.write(b);
>>+ }
>>+
>>+ @Override
>>+ public void write(int b) throws IOException {
>>+ bos.write(b);
>>+ original.write(b);
>>+ }
>>+
>>+
>>+ }
>>+
>>+}
>>
>>Propchange:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/OutMessageRecorder.java
>>-----------------------------------------------------------------------
>>------- svn:eol-style = native
>>
>>Propchange:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/OutMessageRecorder.java
>>-----------------------------------------------------------------------
>>------- svn:keywords = Rev Date
>>
>>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=472063&r1=
>>472062&r2=472063
>>=======================================================================
>>======= ---
>>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 Tue Nov 7 03:12:10 2006 @@ -19,16 +19,20 @@
>>
>> package org.apache.cxf.systest.ws.rm;
>>
>>+import java.util.logging.Logger;
>>
>> import junit.framework.Test;
>> import junit.framework.TestSuite;
>>
>> import org.apache.cxf.Bus;
>> import org.apache.cxf.bus.spring.SpringBusFactory;
>>+import org.apache.cxf.greeter_control.Control;
>>+import org.apache.cxf.greeter_control.ControlService;
>> import org.apache.cxf.greeter_control.Greeter;
>> import org.apache.cxf.greeter_control.GreeterService;
>> import org.apache.cxf.systest.common.ClientServerSetupBase;
>> import org.apache.cxf.systest.common.ClientServerTestBase;
>>+import org.apache.cxf.ws.rm.RMConstants;
>>
>>
>> /**
>>@@ -37,7 +41,19 @@
>> */
>> public class SequenceTest extends ClientServerTestBase {
>>
>>+ private static final Logger LOG =
>>Logger.getLogger(SequenceTest.class.getName()); + private static
>>final String APP_NAMESPACE =
>>"http://celtix.objectweb.org/greeter_control"; + private static
>>final String GREETMEONEWAY_ACTION = APP_NAMESPACE +
>>"/types/Greeter/greetMeOneWay"; + //private static final String
>>GREETME_ACTION = APP_NAMESPACE + "/types/Greeter/greetMe"; +
>>//private static final String GREETME_RESPONSE_ACTION = GREETME_ACTION
>>+ "Response"; +
>>+ private Control control;
>>+ private Bus greeterBus;
>> private Greeter greeter;
>>+ private String currentCfgResource;
>>+ private MessageFlow mf;
>>+
>>+ private boolean doTestOnewayAnonymousAcks = true;
>>
>> public static void main(String[] args) {
>> junit.textui.TestRunner.run(SequenceTest.class);
>>@@ -47,45 +63,89 @@
>> TestSuite suite = new TestSuite(SequenceTest.class);
>> return new ClientServerSetupBase(suite) {
>> public void startServers() throws Exception {
>>- // special case handling for WS-Addressing system test
>>to avoid - // UUID related issue when server is run as
>>separate process - // via maven on Win2k
>>- /*
>>- boolean inProcess = "Windows
>>2000".equals(System.getProperty("os.name")); -
>>assertTrue("server did not launch correctly", -
>> launchServer(Server.class, inProcess)); - */
>> assertTrue("server did not launch correctly",
>>launchServer(Server.class)); }
>>
>> public void setUp() throws Exception {
>> startServers();
>>- System.out.println("Started server");
>>+ LOG.fine("Started server");
>>
>> SpringBusFactory bf = new SpringBusFactory();
>>- Bus bus =
>>bf.createBus("org/apache/cxf/systest/ws/rm/cxf.xml"); +
>>Bus bus = bf.createBus();
>> bf.setDefaultBus(bus);
>> setBus(bus);
>>- System.out.println("Created client bus");
>>+ LOG.fine("Created client bus");
>> }
>> };
>> }
>>
>> public void setUp() throws Exception {
>> super.setUp();
>>- GreeterService service = new GreeterService();
>>- System.out.println("Created GreeterService");
>>- greeter = service.getGreeterPort();
>>- System.out.println("Created Greeter");
>>+ ControlService service = new ControlService();
>>+ LOG.fine("Created ControlService");
>>+ control = service.getControlPort();
>>+ LOG.fine("Created Control");
>> }
>>
>> public void tearDown() {
>>+ if (null != greeter) {
>>+ assertTrue("Failed to stop greeter",
>>control.stopGreeter()); + greeterBus.shutdown(true);
>>+ }
>> }
>>
>>- //--Tests
>>+ // --- tests ---
>>
>>- public void testOneway() {
>>- System.out.println("Invoking greetMeOneWay ...");
>>- greeter.greetMeOneWay("cxf");
>>+ public void testOnewayAnonymousAcks() throws Exception {
>>+ if (!doTestOnewayAnonymousAcks) {
>>+ return;
>>+ }
>>+ setupGreeter("org/apache/cxf/systest/ws/rm/anonymous.xml");
>>+
>>+ greeter.greetMeOneWay("once");
>>+ greeter.greetMeOneWay("twice");
>>+ greeter.greetMeOneWay("thrice");
>>+
>>+ // three application messages plus createSequence
>>+
>>+ mf.verifyMessages(4, true);
>>+ String[] expectedActions = new String[]
>>{RMConstants.getCreateSequenceAction(), GREETMEONEWAY_ACTION, +
>> GREETMEONEWAY_ACTION,
>>GREETMEONEWAY_ACTION}; + expectedActions = new String[]
>>{RMConstants.getCreateSequenceAction(), "", "", ""}; +
>>mf.verifyActions(expectedActions, true);
>>+ mf.verifyMessageNumbers(new String[] {null, "1", "2", "3"},
>>true); +
>>+ // createSequenceResponse plus ? partial responses
>>+ // partial responses not sent!
>>+ mf.verifyMessages(1, false);
>>+ expectedActions = new String[]
>>{RMConstants.getCreateSequenceResponseAction()}; +
>>mf.verifyActions(expectedActions, false);
>>+ mf.verifyMessageNumbers(new String[] {null}, false);
>>+ mf.verifyAcknowledgements(new boolean[] {false}, false);
>>+ }
>>+
>>+ // --- test utilities ---
>>+
>>+ private void setupGreeter(String cfgResource) {
>>+
>>+ SpringBusFactory bf = new SpringBusFactory();
>>+ greeterBus = bf.createBus(cfgResource);
>>+ bf.setDefaultBus(greeterBus);
>>+
>>+ OutMessageRecorder outRecorder = new OutMessageRecorder();
>>+ greeterBus.getOutInterceptors().add(new
>>JaxwsInterceptorRemover()); +
>>greeterBus.getOutInterceptors().add(outRecorder);
>>+ InMessageRecorder inRecorder = new InMessageRecorder();
>>+ greeterBus.getInInterceptors().add(inRecorder);
>>+ currentCfgResource = cfgResource;
>>+
>>+ assertTrue("Failed to start greeter",
>>control.startGreeter(cfgResource)); +
>>+ GreeterService service = new GreeterService();
>>+ greeter = service.getGreeterPort();
>>+
>>+ mf = new MessageFlow(outRecorder.getOutboundMessages(),
>>inRecorder.getInboundMessages()); +
>>+
>> }
>> }
>>
>>Modified:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/Server.java URL:
>>http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>>/org/apache/cxf/systest/ws/rm/Server.java?view=diff&rev=472063&r1=472062
>>&r2=472063
>>=======================================================================
>>======= ---
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/Server.java (original) +++
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/Server.java Tue Nov 7 03:12:10 2006 @@ -28,16 +28,16 @@
>>
>> public class Server extends TestServerBase {
>>
>>- private static final String ADDRESS =
>>"http://localhost:9020/SoapContext/GreeterPort"; + private static
>>final String ADDRESS = "http://localhost:9001/SoapContext/ControlPort";
>>
>> protected void run() {
>>
>> SpringBusFactory factory = new SpringBusFactory();
>>- Bus bus =
>>factory.createBus("org/apache/cxf/systest/ws/rm/cxf.xml"); + Bus
>>bus = factory.createBus();
>> factory.setDefaultBus(bus);
>> setBus(bus);
>>
>>- GreeterImpl implementor = new GreeterImpl();
>>+ ControlImpl implementor = new ControlImpl();
>> Endpoint.publish(ADDRESS, implementor);
>> }
>>
>>
>>Copied:
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/anonymous.xml (from r471709,
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/cxf.xml) URL:
>>http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>>/org/apache/cxf/systest/ws/rm/anonymous.xml?view=diff&rev=472063&p1=incu
>>bator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/cxf.
>>xml&r1=471709&p2=incubator/cxf/trunk/systests/src/test/java/org/apache/c
>>xf/systest/ws/rm/anonymous.xml&r2=472063
>>=======================================================================
>>======= ---
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/cxf.xml (original) +++
>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>>/anonymous.xml Tue Nov 7 03:12:10 2006 @@ -33,8 +33,10 @@
>> </bean>
>> -->
>>
>>-
>>+ <!--
>> <bean id="logOutgoing"
>>class="org.apache.cxf.interceptor.LoggingOutInterceptor"/> + -->
>>+ <bean id="logOutgoing"
>>class="org.apache.cxf.systest.ws.rm.OutMessageRecorder"/> <bean
>>id="logIncoming"
>>class="org.apache.cxf.interceptor.LoggingInInterceptor"/> <bean
>>id="mapAggregator" class="org.apache.cxf.ws.addressing.MAPAggregator"/>
>><bean id="mapCodec"
>>class="org.apache.cxf.ws.addressing.soap.MAPCodec"/> @@ -52,6 +54,8 @@
>> <property name="inInterceptors">
>> <list>
>> <ref bean="logIncoming"/>
>>+ <!--
>>+ -->
>> <ref bean="mapAggregator"/>
>> <ref bean="mapCodec"/>
>> <ref bean="rmLogicalIn"/>
>>@@ -61,6 +65,8 @@
>> <property name="inFaultInterceptors">
>> <list>
>> <ref bean="logIncoming"/>
>>+ <!--
>>+ -->
>> <ref bean="mapAggregator"/>
>> <ref bean="mapCodec"/>
>> <ref bean="rmLogicalIn"/>
>>
>>
>
>
>
Re: svn commit: r472063 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/phase/ systests/src/test/java/org/apache/cxf/systest/ws/rm/
Posted by Daniel Kulp <da...@iona.com>.
Andrea,
The SequenceTest is now failing with JDK 1.5.0_08 and _09. Could you
look into that?
Thanks!
Dan
On Tuesday November 07 2006 6:12 am, andreasmyth@apache.org wrote:
> Author: andreasmyth
> Date: Tue Nov 7 03:12:10 2006
> New Revision: 472063
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=472063
> Log:
> [JIRA CXF-140] Implemented verifiers for RM system test.
> Refactored test to use Control interface so that tests can run against
> differently configure server endpoints. Removed printlns.
>
> Added:
>
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/ControlImpl.java - copied, changed from r471745,
> incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>eb/celtix/systest/ws/rm/ControlImpl.java
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/InMessageRecorder.java (with props)
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/JaxwsInterceptorRemover.java (with props)
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/MessageFlow.java - copied, changed from r471795,
> incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>eb/celtix/systest/ws/rm/MessageFlow.java
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/OutMessageRecorder.java (with props)
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/anonymous.xml - copied, changed from r471709,
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/cxf.xml Removed:
>
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/cxf.xml Modified:
>
> incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/GreeterImpl.java
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/SequenceTest.java
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/Server.java
>
> Modified:
> incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
> URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/
>apache/cxf/phase/Phase.java?view=diff&rev=472063&r1=472062&r2=472063
> =======================================================================
>======= ---
> incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
> (original) +++
> incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
> Tue Nov 7 03:12:10 2006 @@ -34,7 +34,7 @@
> public static final String PREPARE_SEND = "prepare-send";
> public static final String PRE_STREAM = "pre-stream";
> public static final String USER_STREAM = "user-stream";
> - public static final String POST_STREAM = "port-stream";
> + public static final String POST_STREAM = "post-stream";
> public static final String WRITE = "write";
> public static final String SEND = "send";
>
>
> Copied:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/ControlImpl.java (from r471745,
> incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>eb/celtix/systest/ws/rm/ControlImpl.java) URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>/org/apache/cxf/systest/ws/rm/ControlImpl.java?view=diff&rev=472063&p1=i
>ncubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb
>/celtix/systest/ws/rm/ControlImpl.java&r1=471745&p2=incubator/cxf/trunk/
>systests/src/test/java/org/apache/cxf/systest/ws/rm/ControlImpl.java&r2=
>472063
> =======================================================================
>======= ---
> incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>eb/celtix/systest/ws/rm/ControlImpl.java (original) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/ControlImpl.java Tue Nov 7 03:12:10 2006 @@ -1,52 +1,61 @@
> -package org.objectweb.celtix.systest.ws.rm;
> +/**
> + * 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.
> + */
> +
> +
> +package org.apache.cxf.systest.ws.rm;
>
> -import java.net.URL;
> import java.util.concurrent.Future;
> import java.util.logging.Logger;
>
> import javax.jws.WebService;
> -import javax.xml.namespace.QName;
> import javax.xml.ws.AsyncHandler;
> import javax.xml.ws.Endpoint;
> import javax.xml.ws.Response;
>
> -import org.objectweb.celtix.Bus;
> -import org.objectweb.celtix.BusException;
> -import org.objectweb.celtix.greeter_control.Control;
> -import
> org.objectweb.celtix.greeter_control.types.StartGreeterResponse;
> -import org.objectweb.celtix.greeter_control.types.StopGreeterResponse;
> +import org.apache.cxf.Bus;
> +import org.apache.cxf.bus.spring.SpringBusFactory;
> +import org.apache.cxf.greeter_control.Control;
> +import org.apache.cxf.greeter_control.types.StartGreeterResponse;
> +import org.apache.cxf.greeter_control.types.StopGreeterResponse;
>
>
> @WebService(serviceName = "ControlService",
> portName = "ControlPort",
> - endpointInterface =
> "org.objectweb.celtix.greeter_control.Control", -
> targetNamespace = "http://celtix.objectweb.org/greeter_control") +
> endpointInterface = "org.apache.cxf.greeter_control.Control", +
> targetNamespace = "http://cxf.apache.org/greeter_control")
> public class ControlImpl implements Control {
>
> private static final Logger LOG =
> Logger.getLogger(ControlImpl.class.getName()); - private static
> QName serviceName = new
> QName("http://celtix.objectweb.org/greeter_control", -
> "GreeterService"); private Endpoint
> endpoint;
> private Bus greeterBus;
>
> - public boolean startGreeter(String configuration) {
> + public boolean startGreeter(String cfgResource) {
>
> - if (!(null == configuration || "".equals(configuration))) {
> - setConfigFileProperty(configuration);
> - }
> -
> - try {
> - greeterBus = Bus.init();
> - } catch (BusException ex) {
> - return false;
> - }
> -
> - TestConfigurator tc = new
> TestConfigurator(greeterBus.getConfigurationBuilder()); -
> tc.configureServer(serviceName);
> + SpringBusFactory bf = new SpringBusFactory();
> + greeterBus = bf.createBus(cfgResource);
> + bf.setDefaultBus(greeterBus);
> + LOG.info("Initialised bus with cfg file resource: " +
> cfgResource);
>
> GreeterImpl implementor = new GreeterImpl();
> String address =
> "http://localhost:9020/SoapContext/GreeterPort"; endpoint =
> Endpoint.publish(address, implementor);
> + LOG.info("Published greeter endpoint.");
>
> return true;
> }
> @@ -61,25 +70,11 @@
> }
> endpoint = null;
> if (null != greeterBus) {
> - try {
> - greeterBus.shutdown(true);
> - } catch (BusException ex) {
> - return false;
> - }
> + greeterBus.shutdown(true);
> }
> return true;
> }
>
> - public static void setConfigFileProperty(String cfgName) {
> - URL url = ControlImpl.class.getResource(cfgName + ".xml");
> - if (null == url) {
> - LOG.severe("cannot find test resource " + cfgName +
> ".xml"); - return;
> - }
> - String configFileName = url.toString();
> - System.setProperty("celtix.config.file", configFileName);
> - }
> -
> public Future<?> startGreeterAsync(String requestType,
> AsyncHandler<StartGreeterResponse> asyncHandler) { // never called
> return null;
>
> Modified:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/GreeterImpl.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>/org/apache/cxf/systest/ws/rm/GreeterImpl.java?view=diff&rev=472063&r1=4
>72062&r2=472063
> =======================================================================
>======= ---
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/GreeterImpl.java (original) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/GreeterImpl.java Tue Nov 7 03:12:10 2006 @@ -20,6 +20,7 @@
> package org.apache.cxf.systest.ws.rm;
>
> import java.util.concurrent.Future;
> +import java.util.logging.Logger;
>
> import javax.jws.WebService;
> import javax.xml.ws.AsyncHandler;
> @@ -41,11 +42,12 @@
> targetNamespace = "http://cxf.apache.org/greeter_control")
> public class GreeterImpl implements Greeter {
>
> + private static final Logger LOG =
> Logger.getLogger(GreeterImpl.class.getName());
>
> public String greetMe(String arg0) {
> - System.out.println("Executing operation greetMe with
> parameter: " + arg0); + LOG.fine("Executing operation greetMe
> with parameter: " + arg0); String result = arg0.toUpperCase();
> - System.out.println("returning: " + result);
> + LOG.fine("returning: " + result);
> return result;
> }
>
> @@ -60,11 +62,11 @@
> }
>
> public void greetMeOneWay(String arg0) {
> - System.out.println("Executing operation greetMeOneWay with
> parameter: " + arg0); + LOG.fine("Executing operation
> greetMeOneWay with parameter: " + arg0); }
>
> public void pingMe() throws PingMeFault {
> - System.out.println("Executing operation pingMe");
> + LOG.fine("Executing operation pingMe");
> }
>
> public Response<PingMeResponse> pingMeAsync() {
>
> Added:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/InMessageRecorder.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>/org/apache/cxf/systest/ws/rm/InMessageRecorder.java?view=auto&rev=47206
>3
> =======================================================================
>======= ---
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/InMessageRecorder.java (added) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/InMessageRecorder.java Tue Nov 7 03:12:10 2006 @@ -0,0 +1,71 @@
> +/**
> + * 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.
> + */
> +package org.apache.cxf.systest.ws.rm;
> +
> +import java.io.ByteArrayInputStream;
> +import java.io.ByteArrayOutputStream;
> +import java.io.InputStream;
> +import java.util.ArrayList;
> +import java.util.List;
> +
> +import javax.xml.soap.MessageFactory;
> +import javax.xml.soap.SOAPMessage;
> +
> +import org.apache.cxf.helpers.IOUtils;
> +import org.apache.cxf.interceptor.Fault;
> +import org.apache.cxf.message.Message;
> +import org.apache.cxf.phase.AbstractPhaseInterceptor;
> +import org.apache.cxf.phase.Phase;
> +
> +public class InMessageRecorder extends
> AbstractPhaseInterceptor<Message> { +
> + private List<SOAPMessage> inbound;
> +
> + public InMessageRecorder() {
> + inbound = new ArrayList<SOAPMessage>();
> + setPhase(Phase.RECEIVE);
> + }
> +
> + public void handleMessage(Message message) throws Fault {
> + InputStream is = message.getContent(InputStream.class);
> +
> + if (is == null) {
> + return;
> + }
> +
> + ByteArrayOutputStream bos = new ByteArrayOutputStream();
> + try {
> + IOUtils.copy(is, bos);
> + is.close();
> + bos.close();
> + MessageFactory mf = MessageFactory.newInstance();
> + ByteArrayInputStream bis = new
> ByteArrayInputStream(bos.toByteArray()); + SOAPMessage sm =
> mf.createMessage(null, bis);
> + inbound.add(sm);
> + bis = new ByteArrayInputStream(bos.toByteArray());
> + message.setContent(InputStream.class, bis);
> + } catch (Exception ex) {
> + ex.printStackTrace();
> + }
> + }
> +
> + protected List<SOAPMessage> getInboundMessages() {
> + return inbound;
> + }
> +}
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/InMessageRecorder.java
> -----------------------------------------------------------------------
>------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/InMessageRecorder.java
> -----------------------------------------------------------------------
>------- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/JaxwsInterceptorRemover.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java?view=auto&rev
>=472063
> =======================================================================
>======= ---
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/JaxwsInterceptorRemover.java (added) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/JaxwsInterceptorRemover.java Tue Nov 7 03:12:10 2006 @@ -0,0 +1,79 @@
> +/**
> + * 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.
> + */
> +
> +package org.apache.cxf.systest.ws.rm;
> +
> +import java.util.Collections;
> +import java.util.ListIterator;
> +import java.util.Set;
> +
> +
> +import org.apache.cxf.interceptor.Fault;
> +import org.apache.cxf.interceptor.InterceptorChain;
> +import org.apache.cxf.jaxws.handler.LogicalHandlerInterceptor;
> +import org.apache.cxf.jaxws.handler.StreamHandlerInterceptor;
> +import org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor;
> +import org.apache.cxf.message.Message;
> +import org.apache.cxf.phase.AbstractPhaseInterceptor;
> +import org.apache.cxf.phase.Phase;
> +import org.apache.cxf.phase.PhaseInterceptor;
> +
> +
> +/**
> + *
> + */
> +public class JaxwsInterceptorRemover extends AbstractPhaseInterceptor
> { +
> + private Set<String> before =
> Collections.singleton(LogicalHandlerInterceptor.class.getName()); +
> + public JaxwsInterceptorRemover() {
> + setPhase(Phase.PRE_LOGICAL);
> + }
> +
> + public void handleMessage(Message message) throws Fault {
> +
> + // remove the JAXWS handler interceptors
> + InterceptorChain chain = message.getInterceptorChain();
> + ListIterator it = chain.getIterator();
> + while (it.hasNext()) {
> + PhaseInterceptor pi = (PhaseInterceptor)it.next();
> + if
> (LogicalHandlerInterceptor.class.getName().equals(pi.getId())) { +
> chain.remove(pi);
> + break;
> + }
> + }
> + it = chain.getIterator();
> + while (it.hasNext()) {
> + PhaseInterceptor pi = (PhaseInterceptor)it.next();
> + if
> (SOAPHandlerInterceptor.class.getName().equals(pi.getId())) { +
> chain.remove(pi);
> + break;
> + }
> + }
> + it = chain.getIterator();
> + while (it.hasNext()) {
> + PhaseInterceptor pi = (PhaseInterceptor)it.next();
> + if
> (StreamHandlerInterceptor.class.getName().equals(pi.getId())) { +
> chain.remove(pi);
> + break;
> + }
> + }
> + }
> +
> +}
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/JaxwsInterceptorRemover.java
> -----------------------------------------------------------------------
>------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/JaxwsInterceptorRemover.java
> -----------------------------------------------------------------------
>------- svn:keywords = Rev Date
>
> Copied:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/MessageFlow.java (from r471795,
> incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>eb/celtix/systest/ws/rm/MessageFlow.java) URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>/org/apache/cxf/systest/ws/rm/MessageFlow.java?view=diff&rev=472063&p1=i
>ncubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectweb
>/celtix/systest/ws/rm/MessageFlow.java&r1=471795&p2=incubator/cxf/trunk/
>systests/src/test/java/org/apache/cxf/systest/ws/rm/MessageFlow.java&r2=
>472063
> =======================================================================
>======= ---
> incubator/cxf/tags/celtix/pre_apache/systests/src/test/java/org/objectw
>eb/celtix/systest/ws/rm/MessageFlow.java (original) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/MessageFlow.java Tue Nov 7 03:12:10 2006 @@ -1,4 +1,23 @@
> -package org.objectweb.celtix.systest.ws.rm;
> +/**
> + * 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.
> + */
> +
> +package org.apache.cxf.systest.ws.rm;
>
> import java.io.ByteArrayOutputStream;
> import java.util.Iterator;
> @@ -11,50 +30,38 @@
> import javax.xml.soap.SOAPHeader;
> import javax.xml.soap.SOAPHeaderElement;
> import javax.xml.soap.SOAPMessage;
> -import javax.xml.ws.handler.LogicalMessageContext;
>
> import junit.framework.Assert;
>
> -import org.objectweb.celtix.ws.addressing.AddressingProperties;
> -import org.objectweb.celtix.ws.addressing.ContextUtils;
> -import org.objectweb.celtix.ws.rm.Names;
> -import org.objectweb.celtix.ws.rm.RMContextUtils;
> -import org.objectweb.celtix.ws.rm.RMProperties;
> -import org.objectweb.celtix.ws.rm.SequenceAcknowledgement;
> -import org.objectweb.celtix.ws.rm.SequenceType;
> +import org.apache.cxf.ws.rm.RMConstants;
>
>
>
> public class MessageFlow extends Assert {
>
> private List<SOAPMessage> outboundMessages;
> - private List<LogicalMessageContext> inboundContexts;
> + private List<SOAPMessage> inboundMessages;
>
>
> - public MessageFlow(List<SOAPMessage> o,
> List<LogicalMessageContext> i) { + public
> MessageFlow(List<SOAPMessage> o, List<SOAPMessage> i) {
> outboundMessages = o;
> - inboundContexts = i;
> + inboundMessages = i;
> }
>
> public List<SOAPMessage> getOutboundMessages() {
> return outboundMessages;
> }
>
> - public List<LogicalMessageContext> getInboundContexts() {
> - return inboundContexts;
> - }
> -
> - public void clear() {
> - getOutboundMessages().clear();
> - getInboundContexts().clear();
> + public List<SOAPMessage> getInboundMessages() {
> + return inboundMessages;
> }
>
> public void verifyActions(String[] expectedActions, boolean
> outbound) throws Exception {
>
> - assertEquals(expectedActions.length, outbound ?
> outboundMessages.size() : inboundContexts.size()); +
> assertEquals(expectedActions.length, outbound ? outboundMessages.size()
> : inboundMessages.size());
>
> for (int i = 0; i < expectedActions.length; i++) {
> - String action = outbound ?
> getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
> + String action = outbound ?
> getAction(outboundMessages.get(i)) : getAction(inboundMessages.get(i));
> if (null == expectedActions[i]) {
> assertNull((outbound ? "Outbound " : "Inbound") + "
> message " + i + " has unexpected action: " + action, action); @@ -68,12
> +75,12 @@
>
> public boolean checkActions(String[] expectedActions, boolean
> outbound) throws Exception {
>
> - if (expectedActions.length != (outbound ?
> outboundMessages.size() : inboundContexts.size())) { + if
> (expectedActions.length != (outbound ? outboundMessages.size() :
> inboundMessages.size())) { return false;
> }
>
> for (int i = 0; i < expectedActions.length; i++) {
> - String action = outbound ?
> getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
> + String action = outbound ?
> getAction(outboundMessages.get(i)) : getAction(inboundMessages.get(i));
> if (null == expectedActions[i]) {
> if (action != null) {
> return false;
> @@ -91,10 +98,10 @@
> int expectedCount,
> boolean outbound,
> boolean exact) throws Exception {
> - int messageCount = outbound ? outboundMessages.size() :
> inboundContexts.size(); + int messageCount = outbound ?
> outboundMessages.size() : inboundMessages.size(); int count = 0;
> for (int i = 0; i < messageCount; i++) {
> - String action = outbound ?
> getAction(outboundMessages.get(i)) : getAction(inboundContexts.get(i));
> + String action = outbound ?
> getAction(outboundMessages.get(i)) : getAction(inboundMessages.get(i));
> if (null == expectedAction) {
> if (action == null) {
> count++;
> @@ -125,7 +132,7 @@
> boolean exact) throws Exception {
>
> int actualMessageCount =
> - outbound ? outboundMessages.size() :
> inboundContexts.size(); + outbound ? outboundMessages.size()
> : inboundMessages.size(); if (exact) {
> assertEquals(expectedMessageNumbers.length,
> actualMessageCount); } else {
> @@ -134,38 +141,25 @@
>
> if (exact) {
> for (int i = 0; i < expectedMessageNumbers.length; i++) {
> - if (outbound) {
> - SOAPElement se =
> getSequence(outboundMessages.get(i)); - if (null ==
> expectedMessageNumbers[i]) {
> - assertNull("Outbound message " + i + "
> contains unexpected message number ", se); - } else
> {
> - assertEquals("Outbound message " + i + " does
> not contain expected message number " -
> + expectedMessageNumbers[i], expectedMessageNumbers[i], -
> getMessageNumber(se));
> - }
> + SOAPElement se = outbound ?
> getSequence(outboundMessages.get(i)) + :
> getSequence(inboundMessages.get(i));
> + if (null == expectedMessageNumbers[i]) {
> + assertNull((outbound ? "Outbound" : "Inbound") + "
> message " + i + + " contains unexpected message
> number ", se); } else {
> - SequenceType s =
> getSequence(inboundContexts.get(i)); - String
> messageNumber = null == s ? null : s.getMessageNumber().toString(); -
> if (null == expectedMessageNumbers[i]) {
> - assertNull("Inbound message " + i + " contains
> unexpected message number ", -
> messageNumber);
> - } else {
> - assertEquals("Inbound message " + i + " does
> not contain expected message number " -
> + expectedMessageNumbers[i], expectedMessageNumbers[i],
> messageNumber); - }
> + assertEquals((outbound ? "Outbound" : "Inbound") +
> " message " + i + + " does not contain expected
> message number " + +
> expectedMessageNumbers[i], expectedMessageNumbers[i], +
> getMessageNumber(se));
> }
> }
> } else {
> boolean[] matches = new
> boolean[expectedMessageNumbers.length]; for (int i = 0; i <
> actualMessageCount; i++) {
> String messageNumber = null;
> - if (outbound) {
> - SOAPElement se =
> getSequence(outboundMessages.get(i)); -
> messageNumber = null == se ? null : getMessageNumber(se); -
> } else {
> - SequenceType s =
> getSequence(inboundContexts.get(i)); - messageNumber
> = null == s ? null : s.getMessageNumber().toString(); -
> }
> + SOAPElement se = outbound ?
> getSequence(outboundMessages.get(i)) + :
> getSequence(inboundMessages.get(i));
> + messageNumber = null == se ? null :
> getMessageNumber(se); for (int j = 0; j <
> expectedMessageNumbers.length; j++) { if (messageNumber == null) {
> if (expectedMessageNumbers[j] == null &&
> !matches[j]) { @@ -197,7 +191,7 @@
> boolean exact) throws Exception {
>
> int actualMessageCount =
> - outbound ? outboundMessages.size() :
> inboundContexts.size(); + outbound ? outboundMessages.size()
> : inboundMessages.size(); if (exact) {
> assertEquals(expectedLastMessages.length,
> actualMessageCount); } else {
> @@ -206,13 +200,9 @@
>
> for (int i = 0; i < expectedLastMessages.length; i++) {
> boolean lastMessage;
> - if (outbound) {
> - SOAPElement se = getSequence(outboundMessages.get(i));
> - lastMessage = null == se ? false : getLastMessage(se);
> - } else {
> - SequenceType s = getSequence(inboundContexts.get(i));
> - lastMessage = null == s ? false : null !=
> s.getLastMessage(); - }
> + SOAPElement se = outbound ?
> getSequence(outboundMessages.get(i)) + :
> getSequence(inboundMessages.get(i));
> + lastMessage = null == se ? false : getLastMessage(se);
> assertEquals("Outbound message " + i
> + (expectedLastMessages[i] ? " does not
> contain expected last message element."
>
> : " contains last message element."),
>
> @@ -223,11 +213,11 @@
>
> public void verifyAcknowledgements(boolean[] expectedAcks, boolean
> outbound) throws Exception { assertEquals(expectedAcks.length, outbound
> ? outboundMessages.size() - : inboundContexts.size());
> + : inboundMessages.size());
>
> for (int i = 0; i < expectedAcks.length; i++) {
> boolean ack = outbound ? (null !=
> getAcknowledgment(outboundMessages.get(i))) - : (null !=
> getAcknowledgment(inboundContexts.get(i))); + : (null !=
> getAcknowledgment(inboundMessages.get(i)));
>
> if (expectedAcks[i]) {
> assertTrue((outbound ? "Outbound" : "Inbound") + "
> message " + i @@ -244,11 +234,11 @@
> boolean exact) throws Exception
> {
>
> int actualMessageCount =
> - outbound ? outboundMessages.size() :
> inboundContexts.size(); + outbound ? outboundMessages.size()
> : inboundMessages.size(); int ackCount = 0;
> for (int i = 0; i < actualMessageCount; i++) {
> boolean ack = outbound ? (null !=
> getAcknowledgment(outboundMessages.get(i))) - : (null !=
> getAcknowledgment(inboundContexts.get(i))); + : (null !=
> getAcknowledgment(inboundMessages.get(i))); if (ack) {
> ackCount++;
> }
> @@ -264,9 +254,10 @@
> }
>
>
> - public void verifyAckRequestedOutbound() throws Exception {
> + public void verifyAckRequestedOutbound(boolean outbound) throws
> Exception { boolean found = false;
> - for (SOAPMessage m : outboundMessages) {
> + List<SOAPMessage> messages = outbound ? outboundMessages :
> inboundMessages; + for (SOAPMessage m : messages) {
> SOAPElement se = getAckRequested(m);
> if (se != null) {
> found = true;
> @@ -275,21 +266,7 @@
> }
> assertTrue("expected AckRequested", found);
> }
> -
> - public void verifyAckRequestedInbound(List<LogicalMessageContext>
> contexts) throws Exception { - boolean found = false;
> - for (LogicalMessageContext context : contexts) {
> - RMProperties rmps =
> RMContextUtils.retrieveRMProperties(context, false); - if
> (null != rmps
> - && rmps.getAcksRequested() != null
> - && rmps.getAcksRequested().size() > 0) {
> - found = true;
> - break;
> - }
> - }
> - assertTrue("expected AckRequested", found);
> - }
> -
> +
> protected String getAction(SOAPMessage msg) throws Exception {
> SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
> SOAPHeader header = env.getHeader();
> @@ -298,24 +275,16 @@
> SOAPHeaderElement headerElement =
> (SOAPHeaderElement)headerElements.next(); Name headerName =
> headerElement.getElementName(); String localName =
> headerName.getLocalName();
> - if
> ((headerName.getURI().equals(org.objectweb.celtix.ws.addressing.Names.W
>SA_NAMESPACE_NAME) - ||
> headerName.getURI().equals(org.objectweb.celtix.ws.addressing.VersionTr
>ansformer + if
> ((headerName.getURI().equals(org.apache.cxf.ws.addressing.Names.WSA_NAM
>ESPACE_NAME) + ||
> headerName.getURI().equals(org.apache.cxf.ws.addressing.VersionTransfor
>mer .Names200408.WSA_NAMESPACE_NAME)) - &&
> localName.equals(org.objectweb.celtix.ws.addressing.Names.WSA_ACTION_NA
>ME)) { + &&
> localName.equals(org.apache.cxf.ws.addressing.Names.WSA_ACTION_NAME)) {
> return headerElement.getTextContent();
> }
> }
> return null;
> }
>
> - protected String getAction(LogicalMessageContext context) {
> - AddressingProperties maps = ContextUtils.retrieveMAPs(context,
> false, false); - if (null != maps && null != maps.getAction()) {
> - return maps.getAction().getValue();
> - }
> - return null;
> - }
> -
> protected SOAPElement getSequence(SOAPMessage msg) throws
> Exception { SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
> SOAPHeader header = env.getHeader();
> @@ -324,8 +293,8 @@
> SOAPHeaderElement headerElement =
> (SOAPHeaderElement)headerElements.next(); Name headerName =
> headerElement.getElementName(); String localName =
> headerName.getLocalName();
> - if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
> - && localName.equals(Names.WSRM_SEQUENCE_NAME)) {
> + if
> (headerName.getURI().equals(RMConstants.WSRM_NAMESPACE_NAME) +
> && localName.equals(RMConstants.WSRM_SEQUENCE_NAME)) { return
> headerElement;
> }
> }
> @@ -334,18 +303,13 @@
>
> public String getMessageNumber(SOAPElement elem) throws Exception
> { SOAPElement se = (SOAPElement)elem.getChildElements(
> - new
> QName(Names.WSRM_NAMESPACE_NAME, +
> new QName(RMConstants.WSRM_NAMESPACE_NAME,
> "MessageNumber")).next(); return se.getTextContent();
> }
>
> - protected SequenceType getSequence(LogicalMessageContext context)
> { - RMProperties rmps =
> RMContextUtils.retrieveRMProperties(context, false); - return
> rmps == null ? null : rmps.getSequence();
> - }
> -
> private boolean getLastMessage(SOAPElement elem) throws Exception
> { - return elem.getChildElements(new
> QName(Names.WSRM_NAMESPACE_NAME, "LastMessage")).hasNext(); +
> return elem.getChildElements(new QName(RMConstants.WSRM_NAMESPACE_NAME,
> "LastMessage")).hasNext(); }
>
> protected SOAPElement getAcknowledgment(SOAPMessage msg) throws
> Exception { @@ -356,22 +320,14 @@
> SOAPHeaderElement headerElement =
> (SOAPHeaderElement)headerElements.next(); Name headerName =
> headerElement.getElementName(); String localName =
> headerName.getLocalName();
> - if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
> - && localName.equals(Names.WSRM_SEQUENCE_ACK_NAME)) {
> + if
> (headerName.getURI().equals(RMConstants.WSRM_NAMESPACE_NAME) +
> && localName.equals(RMConstants.WSRM_SEQUENCE_ACK_NAME)) { return
> (SOAPElement)header.getChildElements().next(); }
> }
> return null;
> }
>
> - protected SequenceAcknowledgement
> getAcknowledgment(LogicalMessageContext context) { -
> RMProperties rmps = RMContextUtils.retrieveRMProperties(context,
> false); - if (null != rmps && null != rmps.getAcks() &&
> rmps.getAcks().size() > 0) { - return
> rmps.getAcks().iterator().next();
> - }
> - return null;
> - }
> -
> private SOAPElement getAckRequested(SOAPMessage msg) throws
> Exception { SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
> SOAPHeader header = env.getHeader();
> @@ -380,8 +336,8 @@
> SOAPHeaderElement headerElement =
> (SOAPHeaderElement)headerElements.next(); Name headerName =
> headerElement.getElementName(); String localName =
> headerName.getLocalName();
> - if (headerName.getURI().equals(Names.WSRM_NAMESPACE_NAME)
> - && localName.equals(Names.WSRM_ACK_REQUESTED_NAME)) {
> + if
> (headerName.getURI().equals(RMConstants.WSRM_NAMESPACE_NAME) +
> && localName.equals(RMConstants.WSRM_ACK_REQUESTED_NAME)) {
> return (SOAPElement)header.getChildElements().next(); }
> }
> @@ -403,10 +359,10 @@
> }
> } else {
> if (exact) {
> - assertEquals("Unexpected number of inbound messages",
> nExpected, inboundContexts.size()); +
> assertEquals("Unexpected number of inbound messages", nExpected,
> inboundMessages.size()); } else {
> - assertTrue("Unexpected number of inbound messages: " +
> inboundContexts.size(), - nExpected <=
> inboundContexts.size()); + assertTrue("Unexpected number
> of inbound messages: " + inboundMessages.size(), +
> nExpected <= inboundMessages.size()); }
> }
> }
> @@ -418,7 +374,7 @@
> public void verifyMessages(int nExpected, boolean outbound, int
> interval, int attempts, boolean exact) { for (int i = 0; i < attempts;
> i++) {
> if ((outbound && outboundMessages.size() < nExpected)
> - || (!outbound && inboundContexts.size() < nExpected))
> { + || (!outbound && inboundMessages.size() <
> nExpected)) { try {
> Thread.sleep(interval);
> } catch (InterruptedException ex) {
> @@ -432,17 +388,17 @@
> }
>
> public void purgePartialResponses() throws Exception {
> - for (int i = inboundContexts.size() - 1; i >= 0; i--) {
> - if (isPartialResponse(inboundContexts.get(i))) {
> - inboundContexts.remove(i);
> + for (int i = inboundMessages.size() - 1; i >= 0; i--) {
> + if (isPartialResponse(inboundMessages.get(i))) {
> + inboundMessages.remove(i);
> }
> }
> }
>
> public void verifyPartialResponses(int nExpected) throws Exception
> { int npr = 0;
> - for (int i = 0; i < inboundContexts.size(); i++) {
> - if (isPartialResponse(inboundContexts.get(i))) {
> + for (int i = 0; i < inboundMessages.size(); i++) {
> + if (isPartialResponse(inboundMessages.get(i))) {
> npr++;
> }
> }
> @@ -450,13 +406,13 @@
> nExpected, npr);
> }
>
> - public boolean isPartialResponse(LogicalMessageContext ctx) throws
> Exception { - return null == getAction(ctx) && emptyBody(ctx);
> + public boolean isPartialResponse(SOAPMessage msg) throws Exception
> { + // return null == getAction(ctx) && emptyBody(msg);
> + return false;
> }
>
> - public boolean emptyBody(LogicalMessageContext ctx) throws
> Exception { - return
> !((SOAPMessage)ctx.get("org.objectweb.celtix.bindings.soap.message")) -
> .getSOAPPart().getEnvelope().getBody().hasChildNodes(); +
> public boolean emptyBody(SOAPMessage msg) throws Exception { +
> return !msg.getSOAPPart().getEnvelope().getBody().hasChildNodes(); }
>
> private String outboundDump() {
>
> Added:
> 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=auto&rev=4720
>63
> =======================================================================
>======= ---
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/OutMessageRecorder.java (added) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/OutMessageRecorder.java Tue Nov 7 03:12:10 2006 @@ -0,0 +1,142 @@
> +/**
> + * 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.
> + */
> +
> +package org.apache.cxf.systest.ws.rm;
> +
> +import java.io.ByteArrayInputStream;
> +import java.io.ByteArrayOutputStream;
> +import java.io.IOException;
> +import java.io.OutputStream;
> +import java.util.ArrayList;
> +import java.util.Collections;
> +import java.util.List;
> +import java.util.Set;
> +
> +import javax.xml.soap.MessageFactory;
> +import javax.xml.soap.SOAPMessage;
> +
> +import org.apache.cxf.interceptor.Fault;
> +import org.apache.cxf.interceptor.StaxOutInterceptor;
> +//import org.apache.cxf.io.AbstractCachedOutputStream;
> +import org.apache.cxf.message.Message;
> +import org.apache.cxf.phase.AbstractPhaseInterceptor;
> +import org.apache.cxf.phase.Phase;
> +
> +
> +/**
> + *
> + */
> +public class OutMessageRecorder extends AbstractPhaseInterceptor {
> +
> + private List<SOAPMessage> outbound;
> + private Set<String> before =
> Collections.singleton(StaxOutInterceptor.class.getName()); +
> + public OutMessageRecorder() {
> + outbound = new ArrayList<SOAPMessage>();
> + //setPhase(Phase.POST_STREAM);
> + setPhase(Phase.PRE_PROTOCOL);
> + }
> +
> + public void handleMessage(Message message) throws Fault {
> + OutputStream os = message.getContent(OutputStream.class);
> + if (null == os) {
> + return;
> + }
> + ForkOutputStream fos = new ForkOutputStream(os);
> + message.setContent(OutputStream.class, fos);
> +
> + /*
> + if (os instanceof AbstractCachedOutputStream) {
> + try {
> + String s =
> ((AbstractCachedOutputStream)os).toString(); +
> MessageFactory mf = MessageFactory.newInstance(); +
> ByteArrayInputStream bis = new ByteArrayInputStream(s.getBytes()); +
> SOAPMessage sm = mf.createMessage(null, bis); +
> outbound.add(sm);
> + } catch (Exception ex) {
> + ex.printStackTrace();
> + }
> + }
> + */
> + }
> +
> + @Override
> + public Set<String> getBefore() {
> + return before;
> + }
> +
> + protected List<SOAPMessage> getOutboundMessages() {
> + return outbound;
> + }
> +
> + /**
> + * Output stream that multicasts its data to several underlying
> output streams. + */
> + class ForkOutputStream extends OutputStream {
> +
> + final OutputStream original;
> + final ByteArrayOutputStream bos;
> +
> + public ForkOutputStream(OutputStream o) {
> + original = o;
> + bos = new ByteArrayOutputStream();
> + }
> +
> + @Override
> + public void close() throws IOException {
> + bos.close();
> + try {
> + MessageFactory mf = MessageFactory.newInstance();
> + ByteArrayInputStream bis = new
> ByteArrayInputStream(bos.toByteArray()); + SOAPMessage
> sm = mf.createMessage(null, bis); + outbound.add(sm);
> + } catch (Exception ex) {
> + ex.printStackTrace();
> + }
> + original.close();
> + }
> +
> + @Override
> + public void flush() throws IOException {
> + bos.flush();
> + original.flush();
> + }
> +
> + @Override
> + public void write(byte[] b, int off, int len) throws
> IOException { + bos.write(b, off, len);
> + original.write(b, off, len);
> + }
> +
> + @Override
> + public void write(byte[] b) throws IOException {
> + bos.write(b);
> + original.write(b);
> + }
> +
> + @Override
> + public void write(int b) throws IOException {
> + bos.write(b);
> + original.write(b);
> + }
> +
> +
> + }
> +
> +}
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/OutMessageRecorder.java
> -----------------------------------------------------------------------
>------- svn:eol-style = native
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/OutMessageRecorder.java
> -----------------------------------------------------------------------
>------- svn:keywords = Rev Date
>
> 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=472063&r1=
>472062&r2=472063
> =======================================================================
>======= ---
> 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 Tue Nov 7 03:12:10 2006 @@ -19,16 +19,20 @@
>
> package org.apache.cxf.systest.ws.rm;
>
> +import java.util.logging.Logger;
>
> import junit.framework.Test;
> import junit.framework.TestSuite;
>
> import org.apache.cxf.Bus;
> import org.apache.cxf.bus.spring.SpringBusFactory;
> +import org.apache.cxf.greeter_control.Control;
> +import org.apache.cxf.greeter_control.ControlService;
> import org.apache.cxf.greeter_control.Greeter;
> import org.apache.cxf.greeter_control.GreeterService;
> import org.apache.cxf.systest.common.ClientServerSetupBase;
> import org.apache.cxf.systest.common.ClientServerTestBase;
> +import org.apache.cxf.ws.rm.RMConstants;
>
>
> /**
> @@ -37,7 +41,19 @@
> */
> public class SequenceTest extends ClientServerTestBase {
>
> + private static final Logger LOG =
> Logger.getLogger(SequenceTest.class.getName()); + private static
> final String APP_NAMESPACE =
> "http://celtix.objectweb.org/greeter_control"; + private static
> final String GREETMEONEWAY_ACTION = APP_NAMESPACE +
> "/types/Greeter/greetMeOneWay"; + //private static final String
> GREETME_ACTION = APP_NAMESPACE + "/types/Greeter/greetMe"; +
> //private static final String GREETME_RESPONSE_ACTION = GREETME_ACTION
> + "Response"; +
> + private Control control;
> + private Bus greeterBus;
> private Greeter greeter;
> + private String currentCfgResource;
> + private MessageFlow mf;
> +
> + private boolean doTestOnewayAnonymousAcks = true;
>
> public static void main(String[] args) {
> junit.textui.TestRunner.run(SequenceTest.class);
> @@ -47,45 +63,89 @@
> TestSuite suite = new TestSuite(SequenceTest.class);
> return new ClientServerSetupBase(suite) {
> public void startServers() throws Exception {
> - // special case handling for WS-Addressing system test
> to avoid - // UUID related issue when server is run as
> separate process - // via maven on Win2k
> - /*
> - boolean inProcess = "Windows
> 2000".equals(System.getProperty("os.name")); -
> assertTrue("server did not launch correctly", -
> launchServer(Server.class, inProcess)); - */
> assertTrue("server did not launch correctly",
> launchServer(Server.class)); }
>
> public void setUp() throws Exception {
> startServers();
> - System.out.println("Started server");
> + LOG.fine("Started server");
>
> SpringBusFactory bf = new SpringBusFactory();
> - Bus bus =
> bf.createBus("org/apache/cxf/systest/ws/rm/cxf.xml"); +
> Bus bus = bf.createBus();
> bf.setDefaultBus(bus);
> setBus(bus);
> - System.out.println("Created client bus");
> + LOG.fine("Created client bus");
> }
> };
> }
>
> public void setUp() throws Exception {
> super.setUp();
> - GreeterService service = new GreeterService();
> - System.out.println("Created GreeterService");
> - greeter = service.getGreeterPort();
> - System.out.println("Created Greeter");
> + ControlService service = new ControlService();
> + LOG.fine("Created ControlService");
> + control = service.getControlPort();
> + LOG.fine("Created Control");
> }
>
> public void tearDown() {
> + if (null != greeter) {
> + assertTrue("Failed to stop greeter",
> control.stopGreeter()); + greeterBus.shutdown(true);
> + }
> }
>
> - //--Tests
> + // --- tests ---
>
> - public void testOneway() {
> - System.out.println("Invoking greetMeOneWay ...");
> - greeter.greetMeOneWay("cxf");
> + public void testOnewayAnonymousAcks() throws Exception {
> + if (!doTestOnewayAnonymousAcks) {
> + return;
> + }
> + setupGreeter("org/apache/cxf/systest/ws/rm/anonymous.xml");
> +
> + greeter.greetMeOneWay("once");
> + greeter.greetMeOneWay("twice");
> + greeter.greetMeOneWay("thrice");
> +
> + // three application messages plus createSequence
> +
> + mf.verifyMessages(4, true);
> + String[] expectedActions = new String[]
> {RMConstants.getCreateSequenceAction(), GREETMEONEWAY_ACTION, +
> GREETMEONEWAY_ACTION,
> GREETMEONEWAY_ACTION}; + expectedActions = new String[]
> {RMConstants.getCreateSequenceAction(), "", "", ""}; +
> mf.verifyActions(expectedActions, true);
> + mf.verifyMessageNumbers(new String[] {null, "1", "2", "3"},
> true); +
> + // createSequenceResponse plus ? partial responses
> + // partial responses not sent!
> + mf.verifyMessages(1, false);
> + expectedActions = new String[]
> {RMConstants.getCreateSequenceResponseAction()}; +
> mf.verifyActions(expectedActions, false);
> + mf.verifyMessageNumbers(new String[] {null}, false);
> + mf.verifyAcknowledgements(new boolean[] {false}, false);
> + }
> +
> + // --- test utilities ---
> +
> + private void setupGreeter(String cfgResource) {
> +
> + SpringBusFactory bf = new SpringBusFactory();
> + greeterBus = bf.createBus(cfgResource);
> + bf.setDefaultBus(greeterBus);
> +
> + OutMessageRecorder outRecorder = new OutMessageRecorder();
> + greeterBus.getOutInterceptors().add(new
> JaxwsInterceptorRemover()); +
> greeterBus.getOutInterceptors().add(outRecorder);
> + InMessageRecorder inRecorder = new InMessageRecorder();
> + greeterBus.getInInterceptors().add(inRecorder);
> + currentCfgResource = cfgResource;
> +
> + assertTrue("Failed to start greeter",
> control.startGreeter(cfgResource)); +
> + GreeterService service = new GreeterService();
> + greeter = service.getGreeterPort();
> +
> + mf = new MessageFlow(outRecorder.getOutboundMessages(),
> inRecorder.getInboundMessages()); +
> +
> }
> }
>
> Modified:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/Server.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>/org/apache/cxf/systest/ws/rm/Server.java?view=diff&rev=472063&r1=472062
>&r2=472063
> =======================================================================
>======= ---
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/Server.java (original) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/Server.java Tue Nov 7 03:12:10 2006 @@ -28,16 +28,16 @@
>
> public class Server extends TestServerBase {
>
> - private static final String ADDRESS =
> "http://localhost:9020/SoapContext/GreeterPort"; + private static
> final String ADDRESS = "http://localhost:9001/SoapContext/ControlPort";
>
> protected void run() {
>
> SpringBusFactory factory = new SpringBusFactory();
> - Bus bus =
> factory.createBus("org/apache/cxf/systest/ws/rm/cxf.xml"); + Bus
> bus = factory.createBus();
> factory.setDefaultBus(bus);
> setBus(bus);
>
> - GreeterImpl implementor = new GreeterImpl();
> + ControlImpl implementor = new ControlImpl();
> Endpoint.publish(ADDRESS, implementor);
> }
>
>
> Copied:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/anonymous.xml (from r471709,
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/cxf.xml) URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java
>/org/apache/cxf/systest/ws/rm/anonymous.xml?view=diff&rev=472063&p1=incu
>bator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/cxf.
>xml&r1=471709&p2=incubator/cxf/trunk/systests/src/test/java/org/apache/c
>xf/systest/ws/rm/anonymous.xml&r2=472063
> =======================================================================
>======= ---
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/cxf.xml (original) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm
>/anonymous.xml Tue Nov 7 03:12:10 2006 @@ -33,8 +33,10 @@
> </bean>
> -->
>
> -
> + <!--
> <bean id="logOutgoing"
> class="org.apache.cxf.interceptor.LoggingOutInterceptor"/> + -->
> + <bean id="logOutgoing"
> class="org.apache.cxf.systest.ws.rm.OutMessageRecorder"/> <bean
> id="logIncoming"
> class="org.apache.cxf.interceptor.LoggingInInterceptor"/> <bean
> id="mapAggregator" class="org.apache.cxf.ws.addressing.MAPAggregator"/>
> <bean id="mapCodec"
> class="org.apache.cxf.ws.addressing.soap.MAPCodec"/> @@ -52,6 +54,8 @@
> <property name="inInterceptors">
> <list>
> <ref bean="logIncoming"/>
> + <!--
> + -->
> <ref bean="mapAggregator"/>
> <ref bean="mapCodec"/>
> <ref bean="rmLogicalIn"/>
> @@ -61,6 +65,8 @@
> <property name="inFaultInterceptors">
> <list>
> <ref bean="logIncoming"/>
> + <!--
> + -->
> <ref bean="mapAggregator"/>
> <ref bean="mapCodec"/>
> <ref bean="rmLogicalIn"/>
--
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727 C: 508-380-7194 F:781-902-8001
daniel.kulp@iona.com