blob: a0e2df23f36fe654a1d722ffa38d0d675b02c390 [file] [log] [blame]
/*
* 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.axis2.jaxws.provider;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.axis2.Constants;
import org.apache.axis2.jaxws.TestLogger;
import org.apache.axis2.jaxws.provider.soapmsg.SoapMessageProvider;
import javax.xml.namespace.QName;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.DetailEntry;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.Node;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPMessage;
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.Binding;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPFaultException;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Tests Dispatch<SOAPMessage> client and a Provider<SOAPMessage> service.
* The client and service interaction tests various xml and attachment scenarios
*
*/
public class SoapMessageProviderTests extends ProviderTestCase {
private String endpointUrl = "http://localhost:6060/axis2/services/SoapMessageProviderService.SoapMessageProviderPort";
private QName serviceName = new QName("http://ws.apache.org/axis2", "SoapMessageProviderService");
private String reqMsgStart = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body>";
;
private String reqMsgEnd = "</soap:Body></soap:Envelope>";
private String XML_INVOKE = "<ns2:invokeOp xmlns:ns2=\"http://org.test.soapmessage\"><invoke_str>" +
SoapMessageProvider.XML_REQUEST +
"</invoke_str></ns2:invokeOp>";
private String EMPTYBODY_INVOKE = "<ns2:invokeOp xmlns:ns2=\"http://org.test.soapmessage\"><invoke_str>" +
SoapMessageProvider.XML_EMPTYBODY_REQUEST +
"</invoke_str></ns2:invokeOp>";
private String CHECKHEADERS_INVOKE = "<ns2:invokeOp xmlns:ns2=\"http://org.test.soapmessage\"><invoke_str>" +
SoapMessageProvider.XML_CHECKHEADERS_REQUEST +
"</invoke_str></ns2:invokeOp>";
private String ATTACHMENT_INVOKE = "<ns2:invokeOp xmlns:ns2=\"http://org.test.soapmessage\"><invoke_str>" +
SoapMessageProvider.XML_ATTACHMENT_REQUEST +
"</invoke_str></ns2:invokeOp>";
private String MTOM_INVOKE = "<ns2:invokeOp xmlns:ns2=\"http://org.test.soapmessage\"><invoke_str>" +
SoapMessageProvider.XML_MTOM_REQUEST +
"</invoke_str>" +
SoapMessageProvider.MTOM_REF +
"</ns2:invokeOp>";
private String SWAREF_INVOKE = "<ns2:invokeOp xmlns:ns2=\"http://org.test.soapmessage\"><invoke_str>" +
SoapMessageProvider.XML_SWAREF_REQUEST +
"</invoke_str>" +
SoapMessageProvider.SWAREF_REF +
"</ns2:invokeOp>";
private String XML_FAULT_INVOKE = "<ns2:invokeOp xmlns:ns2=\"http://org.test.soapmessage\"><invoke_str>" +
SoapMessageProvider.XML_FAULT_REQUEST +
"</invoke_str></ns2:invokeOp>";
private String XML_WSE_INVOKE = "<ns2:invokeOp xmlns:ns2=\"http://org.test.soapmessage\"><invoke_str>" +
SoapMessageProvider.XML_WSE_REQUEST +
"</invoke_str></ns2:invokeOp>";
public static Test suite() {
return getTestSetup(new TestSuite(SoapMessageProviderTests.class));
}
/**
* Sends an SOAPMessage containing only xml data to the web service.
* Receives a response containing just xml data.
*/
public void testProviderSOAPMessageXMLOnly(){
try{
// Create the dispatch
Dispatch<SOAPMessage> dispatch = createDispatch();
// Create the SOAPMessage
String msg = reqMsgStart + XML_INVOKE + reqMsgEnd;
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage request = factory.createMessage(null,
new ByteArrayInputStream(msg.getBytes()));
// Test the transport headers by sending a content description
request.setContentDescription(SoapMessageProvider.XML_REQUEST);
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
SOAPMessage response = dispatch.invoke(request);
// Check for valid content description
assertNotNull(response.getContentDescription());
assertEquals(SoapMessageProvider.XML_RESPONSE, response.getContentDescription());
// Check assertions and get the data element
SOAPElement dataElement = assertResponseXML(response, SoapMessageProvider.XML_RESPONSE);
assertTrue(countAttachments(response) == 0);
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
// Try a second time
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
response = dispatch.invoke(request);
// Check for valid content description
assertNotNull(response.getContentDescription());
assertEquals(SoapMessageProvider.XML_RESPONSE, response.getContentDescription());
// Check assertions and get the data element
dataElement = assertResponseXML(response, SoapMessageProvider.XML_RESPONSE);
assertTrue(countAttachments(response) == 0);
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
}catch(Exception e){
e.printStackTrace();
fail("Caught exception " + e);
}
}
/**
* Sends an SOAPMessage containing only xml data to the web service.
* Receives a response containing an empty body
*/
public void testProviderSOAPMessageXMLEmptyBody(){
try{
// Create the dispatch
Dispatch<SOAPMessage> dispatch = createDispatch();
// Create the SOAPMessage
String msg = reqMsgStart + EMPTYBODY_INVOKE + reqMsgEnd;
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage request = factory.createMessage(null,
new ByteArrayInputStream(msg.getBytes()));
// Test the transport headers by sending a content description
request.setContentDescription(SoapMessageProvider.XML_EMPTYBODY_REQUEST);
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
SOAPMessage response = dispatch.invoke(request);
// Check assertions
assertTrue(response !=null);
assertTrue(response.getSOAPBody() != null);
assertTrue(response.getSOAPBody().getFirstChild() == null); // There should be nothing in the body
assertTrue(countAttachments(response) == 0);
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
// Try a second time
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
response = dispatch.invoke(request);
// Check assertions
assertTrue(response !=null);
assertTrue(response.getSOAPBody() != null);
assertTrue(response.getSOAPBody().getFirstChild() == null); // There should be nothing in the body
assertTrue(countAttachments(response) == 0);
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
}catch(Exception e){
e.printStackTrace();
fail("Caught exception " + e);
}
}
/**
* Sends an SOAPMessage containing only xml data
* Provider will throw a Fault
*/
public void testProviderSOAPMessageSOAPFault() throws Exception {
// Create the dispatch
Dispatch<SOAPMessage> dispatch = createDispatch();
// Create the SOAPMessage
String msg = reqMsgStart + XML_FAULT_INVOKE + reqMsgEnd;
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage request = factory.createMessage(null,
new ByteArrayInputStream(msg.getBytes()));
// Test the transport headers by sending a content description
request.setContentDescription(SoapMessageProvider.XML_FAULT_REQUEST);
try {
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
SOAPMessage response = dispatch.invoke(request);
assertTrue("Expected failure", false);
} catch (SOAPFaultException e) {
// Okay
SOAPFault fault = e.getFault();
assertTrue(fault != null);
assertTrue(fault.getFaultString().equals("sample fault"));
QName expectedFaultCode = new QName(SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Client");
assertTrue(fault.getFaultCodeAsQName().equals(expectedFaultCode));
assertTrue(fault.getDetail() != null);
DetailEntry de = (DetailEntry) fault.getDetail().getDetailEntries().next();
assertTrue(de != null);
assertTrue(de.getLocalName().equals("detailEntry"));
assertTrue(de.getValue().equals("sample detail"));
assertTrue(fault.getFaultActor().equals("sample actor"));
}
// Try a second time
try {
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
SOAPMessage response = dispatch.invoke(request);
assertTrue("Expected failure", false);
} catch (SOAPFaultException e) {
// Okay
SOAPFault fault = e.getFault();
assertTrue(fault != null);
assertTrue(fault.getFaultString().equals("sample fault"));
QName expectedFaultCode = new QName(SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Client");
assertTrue(fault.getFaultCodeAsQName().equals(expectedFaultCode));
assertTrue(fault.getDetail() != null);
DetailEntry de = (DetailEntry) fault.getDetail().getDetailEntries().next();
assertTrue(de != null);
assertTrue(de.getLocalName().equals("detailEntry"));
assertTrue(de.getValue().equals("sample detail"));
assertTrue(fault.getFaultActor().equals("sample actor"));
}
}
/**
* Sends an SOAPMessage containing only xml data
* Provider will throw a generic WebServicesException
*/
public void testProviderSOAPMessageWebServiceException() throws Exception {
// Create the dispatch
Dispatch<SOAPMessage> dispatch = createDispatch();
// Create the SOAPMessage
String msg = reqMsgStart + XML_WSE_INVOKE + reqMsgEnd;
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage request = factory.createMessage(null,
new ByteArrayInputStream(msg.getBytes()));
// Test the transport headers by sending a content description
request.setContentDescription(SoapMessageProvider.XML_WSE_REQUEST);
try {
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
SOAPMessage response = dispatch.invoke(request);
assertTrue("Expected failure", false);
} catch (SOAPFaultException e) {
// Okay...SOAPFaultException should be thrown
SOAPFault fault = e.getFault();
assertTrue(fault != null);
assertTrue(fault.getFaultString().equals("A WSE was thrown"));
}
// Try a second time
try {
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
SOAPMessage response = dispatch.invoke(request);
assertTrue("Expected failure", false);
} catch (SOAPFaultException e) {
// Okay...SOAPFaultException should be thrown
SOAPFault fault = e.getFault();
assertTrue(fault != null);
assertTrue(fault.getFaultString().equals("A WSE was thrown"));
}
}
/**
* Sends an SOAPMessage containing xml data and raw attachments to the web service.
* Receives a response containing xml data and the same raw attachments.
*/
public void testProviderSOAPMessageRawAttachment(){
// Raw Attachments are attachments that are not referenced in the xml with MTOM or SWARef.
// Currently there is no support in Axis 2 for these kinds of attachments.
// The belief is that most customers will use MTOM. Some legacy customers will use SWARef.
// Raw Attachments may be so old that no customers need this behavior.
try{
// Create the dispatch
Dispatch<SOAPMessage> dispatch = createDispatch();
// Create the SOAPMessage
String msg = reqMsgStart + ATTACHMENT_INVOKE + reqMsgEnd;
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage request = factory.createMessage(null,
new ByteArrayInputStream(msg.getBytes()));
// Add the Attachment
AttachmentPart ap = request.createAttachmentPart(SoapMessageProvider.TEXT_XML_ATTACHMENT, "text/xml");
ap.setContentId(SoapMessageProvider.ID);
request.addAttachmentPart(ap);
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
SOAPMessage response = dispatch.invoke(request);
// Check assertions and get the data element
SOAPElement dataElement = assertResponseXML(response, SoapMessageProvider.XML_ATTACHMENT_RESPONSE);
assertTrue(countAttachments(response) == 1);
// Get the Attachment
AttachmentPart attachmentPart = (AttachmentPart) response.getAttachments().next();
// Check the attachment
StreamSource contentSS = (StreamSource) attachmentPart.getContent();
String content = SoapMessageProvider.getAsString(contentSS);
assertTrue(content != null);
assertTrue(content.contains(SoapMessageProvider.TEXT_XML_ATTACHMENT));
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
// Try a second time
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
response = dispatch.invoke(request);
// Check assertions and get the data element
dataElement = assertResponseXML(response, SoapMessageProvider.XML_ATTACHMENT_RESPONSE);
assertTrue(countAttachments(response) == 1);
// Get the Attachment
attachmentPart = (AttachmentPart) response.getAttachments().next();
// Check the attachment
contentSS = (StreamSource) attachmentPart.getContent();
content = SoapMessageProvider.getAsString(contentSS);
assertTrue(content != null);
assertTrue(content.contains(SoapMessageProvider.TEXT_XML_ATTACHMENT));
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
}catch(Exception e){
e.printStackTrace();
fail("Caught exception " + e);
}
}
/**
* Sends an SOAPMessage containing xml data and mtom attachment.
* Receives a response containing xml data and the mtom attachment.
*/
public void testProviderSOAPMessageMTOM(){
try{
// Create the dispatch
Dispatch<SOAPMessage> dispatch = createDispatch();
// MTOM should be automatically detected. There is no need to set it
//Binding binding = dispatch.getBinding();
//SOAPBinding soapBinding = (SOAPBinding) binding;
//soapBinding.setMTOMEnabled(true);
// Create the SOAPMessage
String msg = reqMsgStart + MTOM_INVOKE + reqMsgEnd;
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage request = factory.createMessage(null,
new ByteArrayInputStream(msg.getBytes()));
// Add the Attachment
AttachmentPart ap = request.createAttachmentPart(SoapMessageProvider.TEXT_XML_ATTACHMENT, "text/xml");
ap.setContentId(SoapMessageProvider.ID);
request.addAttachmentPart(ap);
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
SOAPMessage response = dispatch.invoke(request);
// Check assertions and get the data element
SOAPElement dataElement = assertResponseXML(response, SoapMessageProvider.XML_MTOM_RESPONSE);
assertTrue(countAttachments(response) == 1);
// Get the Attachment
AttachmentPart attachmentPart = (AttachmentPart) response.getAttachments().next();
// Check the attachment
StreamSource contentSS = (StreamSource) attachmentPart.getContent();
String content = SoapMessageProvider.getAsString(contentSS);
assertTrue(content != null);
assertTrue(content.contains(SoapMessageProvider.TEXT_XML_ATTACHMENT));
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
// Try a second time
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
response = dispatch.invoke(request);
// Check assertions and get the data element
dataElement = assertResponseXML(response, SoapMessageProvider.XML_MTOM_RESPONSE);
assertTrue(countAttachments(response) == 1);
// Get the Attachment
attachmentPart = (AttachmentPart) response.getAttachments().next();
// Check the attachment
contentSS = (StreamSource) attachmentPart.getContent();
content = SoapMessageProvider.getAsString(contentSS);
assertTrue(content != null);
assertTrue(content.contains(SoapMessageProvider.TEXT_XML_ATTACHMENT));
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
}catch(Exception e){
e.printStackTrace();
fail("Caught exception " + e);
}
}
/**
* Sends an SOAPMessage containing xml data and a swaref attachment to the web service.
* Receives a response containing xml data and the swaref attachment attachment.
*/
public void testProviderSOAPMessageSWARef(){
try{
// Create the dispatch
Dispatch<SOAPMessage> dispatch = createDispatch();
// Create the SOAPMessage
String msg = reqMsgStart + SWAREF_INVOKE + reqMsgEnd;
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage request = factory.createMessage(null,
new ByteArrayInputStream(msg.getBytes()));
// Add the Attachment
AttachmentPart ap = request.createAttachmentPart(SoapMessageProvider.TEXT_XML_ATTACHMENT, "text/xml");
ap.setContentId(SoapMessageProvider.ID);
request.addAttachmentPart(ap);
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
SOAPMessage response = dispatch.invoke(request);
// Check assertions and get the data element
SOAPElement dataElement = assertResponseXML(response, SoapMessageProvider.XML_SWAREF_RESPONSE);
assertTrue(countAttachments(response) == 1);
// Get the Attachment
AttachmentPart attachmentPart = (AttachmentPart) response.getAttachments().next();
// Check the attachment
StreamSource contentSS = (StreamSource) attachmentPart.getContent();
String content = SoapMessageProvider.getAsString(contentSS);
assertTrue(content != null);
assertTrue(content.contains(SoapMessageProvider.TEXT_XML_ATTACHMENT));
assertEquals(SoapMessageProvider.ID, attachmentPart.getContentId());
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
// Try a second time
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
response = dispatch.invoke(request);
// Check assertions and get the data element
dataElement = assertResponseXML(response, SoapMessageProvider.XML_SWAREF_RESPONSE);
assertTrue(countAttachments(response) == 1);
// Get the Attachment
attachmentPart = (AttachmentPart) response.getAttachments().next();
// Check the attachment
contentSS = (StreamSource) attachmentPart.getContent();
content = SoapMessageProvider.getAsString(contentSS);
assertTrue(content != null);
assertTrue(content.contains(SoapMessageProvider.TEXT_XML_ATTACHMENT));
assertEquals(SoapMessageProvider.ID, attachmentPart.getContentId());
// Print out the response
TestLogger.logger.debug(">> Response [" + response.toString() + "]");
}catch(Exception e){
e.printStackTrace();
fail("Caught exception " + e);
}
}
/**
* This is a negative test to insure that we don't allow creation of a dispatch with
* type Soap using Payload mode
*/
public void testInvalidTypeWithMode(){
try{
Service svc = Service.create(serviceName);
svc.addPort(portName, null, endpointUrl);
Dispatch<SOAPMessage> dispatch =
svc.createDispatch(portName, SOAPMessage.class, Service.Mode.PAYLOAD);
fail("Did not catch exception for invalid Dispatch with Payload Mode");
}catch(Exception e){
e.printStackTrace();
}
}
/**
* Sends an String payload containing only xml data to the Provider<SOAPMessage>
* The header information is sent using a jaxws.request.soap.header Map
* Receives a response containing xml data
*/
public void testProviderSOAPMessage_RequestHeaders(){
try{
// Create the dispatch
Dispatch<String> dispatch = createStringDispatch();
// Create the String Payload
String request = CHECKHEADERS_INVOKE;
MessageFactory factory = MessageFactory.newInstance();
// Create the request headers
Map<String, Object> requestContext = dispatch.getRequestContext();
Map<QName, List<String>> requestHeaders = new HashMap<QName, List<String>>();
SOAPFactory sf = SOAPFactory.newInstance();
SOAPElement e = sf.createElement(SoapMessageProvider.FOO_HEADER_QNAME);
e.addTextNode(SoapMessageProvider.FOO_HEADER_CONTENT);
String fooHeader = e.toString();
TestLogger.logger.debug("Foo Header:" + fooHeader);
List<String> list = new ArrayList<String>();
list.add(fooHeader);
requestHeaders.put(SoapMessageProvider.FOO_HEADER_QNAME, list);
list = new ArrayList<String>();
e = sf.createElement(SoapMessageProvider.BAR_HEADER_QNAME);
e.addTextNode(SoapMessageProvider.BAR_HEADER_CONTENT1);
String barHeader = e.toString();
TestLogger.logger.debug("Bar Header:" + barHeader);
list.add(barHeader);
e = sf.createElement(SoapMessageProvider.BAR_HEADER_QNAME);
e.addTextNode(SoapMessageProvider.BAR_HEADER_CONTENT2);
barHeader = e.toString();
TestLogger.logger.debug("Bar Header:" + barHeader);
list.add(barHeader);
requestHeaders.put(SoapMessageProvider.BAR_HEADER_QNAME, list);
requestContext.put(Constants.JAXWS_OUTBOUND_SOAP_HEADERS, requestHeaders);
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
String response = dispatch.invoke(request);
// Check assertions and get the data element
assertTrue(response.contains(SoapMessageProvider.XML_CHECKHEADERS_RESPONSE));
// Print out the response
TestLogger.logger.debug(">> Response [" + response + "]");
// Try a second time
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
response = dispatch.invoke(request);
// Check assertions and get the data element
assertTrue(response.contains(SoapMessageProvider.XML_CHECKHEADERS_RESPONSE));
// Print out the response
TestLogger.logger.debug(">> Response [" + response + "]");
}catch(Exception e){
e.printStackTrace();
fail("Caught exception " + e);
}
}
/**
* Sends an String payload containing only xml data to the Provider<SOAPMessage>
* The header information is sent using a jaxws.request.soap.header Map
* Receives a response containing xml data
*/
public void testProviderSOAPMessage_RequestAndResponseHeaders(){
try{
// Create the dispatch
Dispatch<String> dispatch = createStringDispatch();
// Create the String Payload
String request = CHECKHEADERS_INVOKE;
MessageFactory factory = MessageFactory.newInstance();
// Create the request headers
Map<String, Object> requestContext = dispatch.getRequestContext();
Map<QName, List<String>> requestHeaders = new HashMap<QName, List<String>>();
SOAPFactory sf = SOAPFactory.newInstance();
SOAPElement e = sf.createElement(SoapMessageProvider.FOO_HEADER_QNAME);
e.addTextNode(SoapMessageProvider.FOO_HEADER_CONTENT);
String fooHeader = e.toString();
TestLogger.logger.debug("Foo Header:" + fooHeader);
List<String> list = new ArrayList<String>();
list.add(fooHeader);
requestHeaders.put(SoapMessageProvider.FOO_HEADER_QNAME, list);
list = new ArrayList<String>();
e = sf.createElement(SoapMessageProvider.BAR_HEADER_QNAME);
e.addTextNode(SoapMessageProvider.BAR_HEADER_CONTENT1);
String barHeader = e.toString();
TestLogger.logger.debug("Bar Header:" + barHeader);
list.add(barHeader);
e = sf.createElement(SoapMessageProvider.BAR_HEADER_QNAME);
e.addTextNode(SoapMessageProvider.BAR_HEADER_CONTENT2);
barHeader = e.toString();
TestLogger.logger.debug("Bar Header:" + barHeader);
list.add(barHeader);
requestHeaders.put(SoapMessageProvider.BAR_HEADER_QNAME, list);
requestContext.put(Constants.JAXWS_OUTBOUND_SOAP_HEADERS, requestHeaders);
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
String response = dispatch.invoke(request);
// Check assertions and get the data element
assertTrue(response.contains(SoapMessageProvider.XML_CHECKHEADERS_RESPONSE));
// Check outbound headers
Map<String, Object> responseContext = dispatch.getResponseContext();
assertTrue(responseContext != null);
Map<QName, List<String>> responseHeaders = (Map<QName, List<String>>)
responseContext.get(Constants.JAXWS_INBOUND_SOAP_HEADERS);
assertTrue(responseHeaders != null);
assertTrue(responseHeaders.size() >= 2);
List<String> batHeaders = responseHeaders.get(SoapMessageProvider.BAT_HEADER_QNAME);
assertTrue(batHeaders != null && batHeaders.size() == 1);
assertTrue(batHeaders.get(0).contains(SoapMessageProvider.BAT_HEADER_CONTENT));
List<String> barHeaders =responseHeaders.get(SoapMessageProvider.BAR_HEADER_QNAME);
assertTrue(barHeaders != null && barHeaders.size() == 2);
assertTrue(barHeaders.get(0).contains(SoapMessageProvider.BAR_HEADER_CONTENT1));
assertTrue(barHeaders.get(1).contains(SoapMessageProvider.BAR_HEADER_CONTENT2));
// There should be no foo header in the response
List<String> fooHeaders = responseHeaders.get(SoapMessageProvider.FOO_HEADER_QNAME);
assertTrue(fooHeaders == null);
// Print out the response
TestLogger.logger.debug(">> Response [" + response + "]");
// Try a second time
// Dispatch
TestLogger.logger.debug(">> Invoking SOAPMessageProviderDispatch");
response = dispatch.invoke(request);
// Check assertions and get the data element
assertTrue(response.contains(SoapMessageProvider.XML_CHECKHEADERS_RESPONSE));
// Check outbound headers
responseContext = dispatch.getResponseContext();
assertTrue(responseContext != null);
responseHeaders = (Map<QName, List<String>>)
responseContext.get(Constants.JAXWS_INBOUND_SOAP_HEADERS);
assertTrue(responseHeaders != null);
assertTrue(responseHeaders.size() >= 2);
batHeaders = responseHeaders.get(SoapMessageProvider.BAT_HEADER_QNAME);
assertTrue(batHeaders != null && batHeaders.size() == 1);
assertTrue(batHeaders.get(0).contains(SoapMessageProvider.BAT_HEADER_CONTENT));
barHeaders =responseHeaders.get(SoapMessageProvider.BAR_HEADER_QNAME);
assertTrue(barHeaders != null && barHeaders.size() == 2);
assertTrue(barHeaders.get(0).contains(SoapMessageProvider.BAR_HEADER_CONTENT1));
assertTrue(barHeaders.get(1).contains(SoapMessageProvider.BAR_HEADER_CONTENT2));
// There should be no foo header in the response
fooHeaders = responseHeaders.get(SoapMessageProvider.FOO_HEADER_QNAME);
assertTrue(fooHeaders == null);
// Print out the response
TestLogger.logger.debug(">> Response [" + response + "]");
}catch(Exception e){
e.printStackTrace();
fail("Caught exception " + e);
}
}
/**
* @return
* @throws Exception
*/
private Dispatch<SOAPMessage> createDispatch() throws Exception {
Service svc = Service.create(serviceName);
svc.addPort(portName,null, endpointUrl);
Dispatch<SOAPMessage> dispatch =
svc.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
return dispatch;
}
/**
* @return
* @throws Exception
*/
private Dispatch<String> createStringDispatch() throws Exception {
Service svc = Service.create(serviceName);
svc.addPort(portName,null, endpointUrl);
Dispatch<String> dispatch =
svc.createDispatch(portName, String.class, Service.Mode.PAYLOAD);
return dispatch;
}
/**
* Common assertion checking of the response
* @param msg
* @param expectedText
* @return SOAPElement representing the data element
*/
private SOAPElement assertResponseXML(SOAPMessage msg, String expectedText) throws Exception {
assertTrue(msg != null);
SOAPBody body = msg.getSOAPBody();
assertTrue(body != null);
Node invokeElement = (Node) body.getFirstChild();
assertTrue(invokeElement instanceof SOAPElement);
assertEquals(SoapMessageProvider.RESPONSE_NAME, invokeElement.getLocalName());
Node dataElement = (Node) invokeElement.getFirstChild();
assertTrue(dataElement instanceof SOAPElement);
assertEquals(SoapMessageProvider.RESPONSE_DATA_NAME, dataElement.getLocalName());
// TODO AXIS2 SAAJ should (but does not) support the getTextContent();
// String text = dataElement.getTextContent();
String text = dataElement.getValue();
assertEquals("Found ("+ text + ") but expected (" + expectedText + ")", expectedText, text);
return (SOAPElement) dataElement;
}
/**
* Count Attachments
* @param msg
* @return
*/
private int countAttachments(SOAPMessage msg) {
Iterator it = msg.getAttachments();
int count = 0;
assertTrue(it != null);
while (it.hasNext()) {
it.next();
count++;
}
return count;
}
}