You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jl...@apache.org on 2006/11/03 08:01:43 UTC
svn commit: r470693 - in
/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap:
SOAPHandlerInterceptorTest.java resources/greetMeRpcLitReq.xml
resources/greetMeRpcLitResp.xml resources/greetMeRpcLitRespChanged.xml
Author: jliu
Date: Thu Nov 2 23:01:42 2006
New Revision: 470693
URL: http://svn.apache.org/viewvc?view=rev&rev=470693
Log:
Refactored SOAPHandlerInterceptorTest
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitReq.xml
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitResp.xml
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitRespChanged.xml
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java?view=diff&rev=470693&r1=470692&r2=470693
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptorTest.java Thu Nov 2 23:01:42 2006
@@ -24,34 +24,50 @@
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPMessage;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamReader;
import javax.xml.ws.Binding;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
import junit.framework.TestCase;
import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.SoapVersion;
+import org.apache.cxf.binding.soap.SoapVersionFactory;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.interceptor.InterceptorChain;
import org.apache.cxf.io.AbstractCachedOutputStream;
+import org.apache.cxf.jaxws.handler.AbstractProtocolHandlerInterceptor;
import org.apache.cxf.jaxws.handler.HandlerChainInvoker;
import org.apache.cxf.message.Exchange;
-import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.phase.PhaseInterceptorChain;
+import org.apache.cxf.phase.PhaseManagerImpl;
+import org.apache.cxf.staxutils.PartialXMLStreamReader;
+import org.apache.cxf.staxutils.StaxUtils;
import org.easymock.classextension.IMocksControl;
import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
-import static org.easymock.EasyMock.notNull;
import static org.easymock.classextension.EasyMock.createNiceControl;
public class SOAPHandlerInterceptorTest extends TestCase {
@@ -86,34 +102,47 @@
IMocksControl control = createNiceControl();
Binding binding = control.createMock(Binding.class);
- SoapMessage message = control.createMock(SoapMessage.class);
Exchange exchange = control.createMock(Exchange.class);
- InterceptorChain chain = control.createMock(InterceptorChain.class);
+ SoapMessage message = new SoapMessage(new MessageImpl());
+ message.setExchange(exchange);
- expect(chain.doInterceptInSubChain(isA(Message.class))).andReturn(true);
- expect(message.getExchange()).andReturn(exchange).anyTimes();
- expect(message.getInterceptorChain()).andReturn(chain);
- expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker);
- // This is to set direction to outbound
- expect(exchange.getOutMessage()).andReturn(message);
+ XMLStreamReader reader = preparemXMLStreamReader("resources/greetMeRpcLitReq.xml");
+ message.setContent(XMLStreamReader.class, reader);
+ expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker).anyTimes();
+ // This is to set direction to inbound
+ expect(exchange.getOutMessage()).andReturn(message).anyTimes();
CachedStream originalEmptyOs = new CachedStream();
- SOAPMessage soapMessage = preparemSOAPMessage("resources/greetMeRpcLitResp.xml");
- CachedStream os = prepareOutputStreamFromSOAPMessage(soapMessage);
- expect(message.getContent(OutputStream.class)).andReturn(
- originalEmptyOs);
- expect(message.getContent(OutputStream.class)).andReturn(os);
+ message.setContent(OutputStream.class, originalEmptyOs);
+
+ InterceptorChain chain = new PhaseInterceptorChain((new PhaseManagerImpl()).getOutPhases());
+ // This is to simulate interceptors followed by SOAPHandlerInterceptor
+ // write outputStream
+ chain.add(new AbstractProtocolHandlerInterceptor<SoapMessage>(binding) {
+ public void handleMessage(SoapMessage message) throws Fault {
+ try {
+ CachedStream os = prepareOutputStreamFromResource("resources/greetMeRpcLitResp.xml");
+ message.setContent(OutputStream.class, os);
+ } catch (Exception e) {
+ //do nothing
+ }
+ }
+
+ });
+ message.setInterceptorChain(chain);
control.replay();
SOAPHandlerInterceptor li = new SOAPHandlerInterceptor(binding);
li.handleMessage(message);
control.verify();
- // the content of outputStream should remain unchanged.
+ // Verify outputStream
CachedStream expectedOs = prepareOutputStreamFromResource("resources/greetMeRpcLitResp.xml");
- assertTrue("the content of os should remain unchanged",
- compareInputStream(expectedOs.getInputStream(), originalEmptyOs
- .getInputStream()));
+ assertTrue("The content of outputStream should remain unchanged", compareInputStream(expectedOs
+ .getInputStream(), originalEmptyOs.getInputStream()));
+ // Verify SOAPMessage
+ SOAPMessage resultedMessage = message.getContent(SOAPMessage.class);
+ assertNull(resultedMessage);
}
// SAAJ tree is created on if SOAPMessageContext.getMessage() is
@@ -123,8 +152,7 @@
List<Handler> list = new ArrayList<Handler>();
list.add(new SOAPHandler<SOAPMessageContext>() {
public boolean handleMessage(SOAPMessageContext smc) {
- Boolean outboundProperty = (Boolean) smc
- .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
+ Boolean outboundProperty = (Boolean)smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
try {
SOAPMessage message = smc.getMessage();
@@ -151,46 +179,72 @@
IMocksControl control = createNiceControl();
Binding binding = control.createMock(Binding.class);
- SoapMessage message = control.createMock(SoapMessage.class);
Exchange exchange = control.createMock(Exchange.class);
- InterceptorChain chain = control.createMock(InterceptorChain.class);
+ SoapMessage message = new SoapMessage(new MessageImpl());
+ message.setExchange(exchange);
- expect(chain.doInterceptInSubChain(isA(Message.class))).andReturn(true);
- expect(message.get(notNull())).andReturn(true).anyTimes();
- expect(message.keySet()).andReturn(new HashSet()).anyTimes();
- expect(message.getExchange()).andReturn(exchange).anyTimes();
- expect(message.getInterceptorChain()).andReturn(chain);
- expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker)
- .anyTimes();
- // message.getExchange().get(HandlerChainInvoker.class);
-
- // This is to set direction to outbound
- expect(exchange.getOutMessage()).andReturn(message);
+ XMLStreamReader reader = preparemXMLStreamReader("resources/greetMeRpcLitReq.xml");
+ message.setContent(XMLStreamReader.class, reader);
+ expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker).anyTimes();
+ // This is to set direction to inbound
+ expect(exchange.getOutMessage()).andReturn(message).anyTimes();
CachedStream originalEmptyOs = new CachedStream();
- SOAPMessage soapMessage = preparemSOAPMessage("resources/greetMeRpcLitResp.xml");
- expect(message.getContent(SOAPMessage.class)).andReturn(soapMessage);
- SOAPMessage soapMessageChanged = preparemSOAPMessage("resources/greetMeRpcLitRespChanged.xml");
- expect(message.getContent(SOAPMessage.class)).andReturn(
- soapMessageChanged);
- expect(message.getContent(OutputStream.class)).andReturn(
- originalEmptyOs);
+ message.setContent(OutputStream.class, originalEmptyOs);
+
+ InterceptorChain chain = new PhaseInterceptorChain((new PhaseManagerImpl()).getOutPhases());
+ // This is to simulate interceptors followed by SOAPHandlerInterceptor
+ // write outputStream
+ chain.add(new AbstractProtocolHandlerInterceptor<SoapMessage>(binding) {
+ public void handleMessage(SoapMessage message) throws Fault {
+ try {
+ CachedStream os = prepareOutputStreamFromResource(
+ "resources/greetMeRpcLitRespChanged.xml");
+ message.setContent(OutputStream.class, os);
+ } catch (Exception e) {
+ //do nothing
+ }
+ }
+
+ });
+ message.setInterceptorChain(chain);
control.replay();
SOAPHandlerInterceptor li = new SOAPHandlerInterceptor(binding);
li.handleMessage(message);
control.verify();
- // the content of outputStream should remain unchanged.
+ // Verify outputStream
CachedStream expectedOs = prepareOutputStreamFromResource("resources/greetMeRpcLitRespChanged.xml");
- assertTrue("the content of os should have changed", compareInputStream(
- expectedOs.getInputStream(), originalEmptyOs.getInputStream()));
+ assertTrue("The content of outputStream should remain unchanged", compareInputStream(expectedOs
+ .getInputStream(), originalEmptyOs.getInputStream()));
+
+ // Verify SOAPMessage
+ SOAPMessage resultedMessage = message.getContent(SOAPMessage.class);
+ assertNotNull(resultedMessage);
+ SOAPBody bodyNew = resultedMessage.getSOAPBody();
+ Iterator itNew = bodyNew.getChildElements(new QName("http://apache.org/hello_world_rpclit",
+ "sendReceiveDataResponse"));
+ SOAPBodyElement bodyElementNew = (SOAPBodyElement)itNew.next();
+ Iterator outIt = bodyElementNew
+ .getChildElements(new QName("http://apache.org/hello_world_rpclit/types", "out"));
+ Element outElement = (SOAPBodyElement)outIt.next();
+ assertNotNull(outElement);
+ NodeList elem3NodeList = outElement
+ .getElementsByTagNameNS("http://apache.org/hello_world_rpclit/types", "elem3");
+ Node elem3Element = elem3NodeList.item(0);
+ assertNotNull("100", elem3Element.getTextContent());
}
- public void xtestInterceptSuccessInBound() throws Exception {
+ public void xtestGetSOAPMessageInBound() throws Exception {
List<Handler> list = new ArrayList<Handler>();
list.add(new SOAPHandler<SOAPMessageContext>() {
public boolean handleMessage(SOAPMessageContext smc) {
+ try {
+ SOAPMessage message = smc.getMessage();
+ } catch (Exception e) {
+ throw new Fault(e);
+ }
return true;
}
@@ -209,33 +263,36 @@
IMocksControl control = createNiceControl();
Binding binding = control.createMock(Binding.class);
- SoapMessage message = control.createMock(SoapMessage.class);
Exchange exchange = control.createMock(Exchange.class);
- InterceptorChain chain = control.createMock(InterceptorChain.class);
- InputStream is = this.getClass().getResourceAsStream(
- "resources/greetMeRpcLitReq.xml");
- SOAPMessage soapMessage = null;
- try {
- MessageFactory factory = MessageFactory.newInstance();
- MimeHeaders mhs = null;
- soapMessage = factory.createMessage(mhs, is);
- } catch (Exception e) {
- throw e;
- }
-
- expect(message.getExchange()).andReturn(exchange).anyTimes();
- expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker);
+ expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker).anyTimes();
// This is to set direction to inbound
expect(exchange.getOutMessage()).andReturn(null);
- expect(message.getContent(SOAPMessage.class)).andReturn(soapMessage);
+
+ SoapMessage message = new SoapMessage(new MessageImpl());
+ message.setExchange(exchange);
+
+ XMLStreamReader reader = preparemXMLStreamReader("resources/greetMeRpcLitReq.xml");
+ message.setContent(XMLStreamReader.class, reader);
control.replay();
SOAPHandlerInterceptor li = new SOAPHandlerInterceptor(binding);
li.handleMessage(message);
control.verify();
+
+ // Verify SOAPMessage
+ SOAPMessage soapMessageNew = message.getContent(SOAPMessage.class);
+ SOAPBody bodyNew = soapMessageNew.getSOAPBody();
+ Iterator itNew = bodyNew.getChildElements();
+ SOAPBodyElement bodyElementNew = (SOAPBodyElement)itNew.next();
+ assertEquals("sendReceiveData", bodyElementNew.getLocalName());
+
+ // Verify the XMLStreamReader
+ XMLStreamReader xmlReader = message.getContent(XMLStreamReader.class);
+ QName qn = xmlReader.getName();
+ assertEquals("sendReceiveData", qn.getLocalPart());
}
- public void testgetUnderstoodHeadersReturnsNull() {
+ public void xtestgetUnderstoodHeadersReturnsNull() {
List<Handler> list = new ArrayList<Handler>();
list.add(new SOAPHandler<SOAPMessageContext>() {
public boolean handleMessage(SOAPMessageContext smc) {
@@ -283,6 +340,38 @@
return true;
}
+ private XMLStreamReader preparemXMLStreamReader(String resouceName) throws Exception {
+ InputStream is = this.getClass().getResourceAsStream(resouceName);
+ XMLStreamReader xmlReader = XMLInputFactory.newInstance().createXMLStreamReader(is);
+
+ // skip until soap body
+ if (xmlReader.nextTag() == XMLStreamConstants.START_ELEMENT) {
+ String ns = xmlReader.getNamespaceURI();
+ SoapVersion soapVersion = SoapVersionFactory.getInstance().getSoapVersion(ns);
+ // message.setVersion(soapVersion);
+
+ QName qn = xmlReader.getName();
+ while (!qn.equals(soapVersion.getBody()) && !qn.equals(soapVersion.getHeader())) {
+ while (xmlReader.nextTag() != XMLStreamConstants.START_ELEMENT) {
+ // nothing to do
+ }
+ qn = xmlReader.getName();
+ }
+ if (qn.equals(soapVersion.getHeader())) {
+ XMLStreamReader filteredReader = new PartialXMLStreamReader(xmlReader, soapVersion.getBody());
+
+ Document doc = StaxUtils.read(filteredReader);
+ }
+ // advance just past body.
+ xmlReader.next();
+
+ while (xmlReader.isWhiteSpace()) {
+ xmlReader.next();
+ }
+ }
+ return xmlReader;
+ }
+
private SOAPMessage preparemSOAPMessage(String resouceName) throws Exception {
InputStream is = this.getClass().getResourceAsStream(resouceName);
SOAPMessage soapMessage = null;
@@ -299,8 +388,7 @@
return os;
}
- private CachedStream prepareOutputStreamFromSOAPMessage(
- SOAPMessage soapMessage) throws Exception {
+ private CachedStream prepareOutputStreamFromSOAPMessage(SOAPMessage soapMessage) throws Exception {
CachedStream os = new CachedStream();
soapMessage.writeTo(os);
return os;
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitReq.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitReq.xml?view=diff&rev=470693&r1=470692&r2=470693
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitReq.xml (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitReq.xml Thu Nov 2 23:01:42 2006
@@ -1,31 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:sendReceiveData xmlns:ns1="http://apache.org/hello_world_rpclit">
- <in xmlns:ns5="http://apache.org/hello_world_rpclit/types">
+ <ns5:in xmlns:ns5="http://apache.org/hello_world_rpclit/types">
<ns5:elem1>this is element 1</ns5:elem1>
<ns5:elem2>this is element 2</ns5:elem2>
- <ns5:elem3>42</ns5:elem3></in>
+ <ns5:elem3>42</ns5:elem3>
+ </ns5:in>
</ns1:sendReceiveData>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitResp.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitResp.xml?view=diff&rev=470693&r1=470692&r2=470693
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitResp.xml (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitResp.xml Thu Nov 2 23:01:42 2006
@@ -22,11 +22,11 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:sendReceiveDataResponse xmlns:ns1="http://apache.org/hello_world_rpclit">
- <out xmlns:ns5="http://apache.org/hello_world_rpclit/types">
+ <ns5:out xmlns:ns5="http://apache.org/hello_world_rpclit/types">
<ns5:elem1>return is element 1</ns5:elem1>
<ns5:elem2>return is element 2</ns5:elem2>
<ns5:elem3>42</ns5:elem3>
- </out>
+ </ns5:out>
</ns1:sendReceiveDataResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitRespChanged.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitRespChanged.xml?view=diff&rev=470693&r1=470692&r2=470693
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitRespChanged.xml (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/soap/resources/greetMeRpcLitRespChanged.xml Thu Nov 2 23:01:42 2006
@@ -22,11 +22,11 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:sendReceiveDataResponse xmlns:ns1="http://apache.org/hello_world_rpclit">
- <out xmlns:ns5="http://apache.org/hello_world_rpclit/types">
+ <ns5:out xmlns:ns5="http://apache.org/hello_world_rpclit/types">
<ns5:elem1>return is element 2</ns5:elem1>
<ns5:elem2>return is element 1</ns5:elem2>
<ns5:elem3>100</ns5:elem3>
- </out>
+ </ns5:out>
</ns1:sendReceiveDataResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>