blob: e54800f9cd5049aeefcfe2ec34584ac5931c6270 [file] [log] [blame]
/*
* Copyright 2006 The Apache Software Foundation.
*
* Licensed 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.saaj.integration;
import junit.extensions.TestSetup;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.Parameter;
import org.apache.axis2.util.Utils;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
public class IntegrationTest extends TestCase {
private static final String ADDRESS = "http://127.0.0.1:" +
(UtilServer.TESTING_PORT) +
"/axis2/services/Echo";
// private static final String ADDRESS = "http://127.0.0.1:8081" +
// "/axis2/services/Echo";
public static final EndpointReference TARGET_EPR = new EndpointReference(ADDRESS);
public static final QName SERVICE_NAME = new QName("Echo");
public static final QName OPERATION_NAME = new QName("echo");
public static final String SAAJ_REPO = "target/test-resources/saaj-repo";
public IntegrationTest(String name) {
super(name);
}
public static Test suite() {
return new TestSetup(new TestSuite(IntegrationTest.class)) {
public void setUp() throws Exception {
UtilServer.start(SAAJ_REPO);
Parameter eneblemtom = new Parameter("enableMTOM","true");
UtilServer.getConfigurationContext().getAxisConfiguration().addParameter(eneblemtom);
}
public void tearDown() throws Exception {
UtilServer.stop();
}
};
}
protected void setUp() throws Exception {
final AxisService service = Utils.createSimpleService(SERVICE_NAME,
EchoService.class.getName(),
OPERATION_NAME);
UtilServer.deployService(service);
}
protected void tearDown() throws Exception {
UtilServer.unDeployService(SERVICE_NAME);
UtilServer.unDeployClientService();
}
public void testSendReceiveSimpleSOAPMessage() {
try {
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage request = mf.createMessage();
createSimpleSOAPPart(request);
SOAPConnection sCon = SOAPConnectionFactory.newInstance().createConnection();
SOAPMessage response = sCon.call(request, ADDRESS);
assertFalse(response.getAttachments().hasNext());
assertEquals(0, response.countAttachments());
String requestStr = printSOAPMessage(request);
String responseStr = printSOAPMessage(response);
// assertEquals(requestStr, responseStr);
assertTrue(responseStr.indexOf("echo") != -1);
sCon.close();
} catch (SOAPException e) {
e.printStackTrace();
fail("Unexpected Exception while running test: " + e);
} catch (IOException e) {
fail("Unexpected Exception while running test: " + e);
}
}
private String printSOAPMessage(final SOAPMessage msg) throws SOAPException, IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
msg.writeTo(baos);
String responseStr = baos.toString();
System.out.println("\n\n----------------------Message-------------------------\n" +
responseStr);
System.out.println("-------------------------------------------------------\n\n");
assertTrue(responseStr.indexOf("This is some text") != -1);
return responseStr;
}
public void testSendReceiveMessageWithAttachment() throws Exception {
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage request = mf.createMessage();
//create the SOAPPart
createSOAPPart(request);
//Attach a text/plain object with the SOAP request
String sampleMessage = "Sample Message: Hello World!";
AttachmentPart textAttach = request.createAttachmentPart(sampleMessage, "text/plain");
textAttach.addMimeHeader("Content-Transfer-Encoding", "binary");
textAttach.setContentId("submitSampleText@apache.org");
request.addAttachmentPart(textAttach);
//Attach a java.awt.Image object to the SOAP request
String jpgfilename = "test-resources/axis2.jpg";
File myfile = new File(jpgfilename);
FileDataSource fds = new FileDataSource(myfile);
DataHandler imageDH = new DataHandler(fds);
AttachmentPart jpegAttach = request.createAttachmentPart(imageDH);
jpegAttach.addMimeHeader("Content-Transfer-Encoding", "binary");
jpegAttach.setContentId("submitSampleImage@apache.org");
jpegAttach.setContentType("image/jpg");
request.addAttachmentPart(jpegAttach);
SOAPConnection sCon = SOAPConnectionFactory.newInstance().createConnection();
SOAPMessage response = sCon.call(request, ADDRESS);
int attachmentCount = response.countAttachments();
assertTrue(attachmentCount == 2);
Iterator attachIter = response.getAttachments();
int i = 0;
while (attachIter.hasNext()) {
AttachmentPart attachment = (AttachmentPart) attachIter.next();
final Object content = attachment.getDataHandler().getContent();
if (content instanceof String) {
assertEquals(sampleMessage, (String) content);
} else if (content instanceof ByteArrayInputStream) {
ByteArrayInputStream bais = (ByteArrayInputStream) content;
byte[] b = new byte[15000];
final int lengthRead = bais.read(b);
FileOutputStream fos =
new FileOutputStream(new File("target/test-resources/result" + (i++) + ".jpg"));
fos.write(b, 0, lengthRead);
fos.flush();
fos.close();
assertTrue(attachment.getContentType().equals("image/jpeg")
|| attachment.getContentType().equals("text/plain"));
}
}
sCon.close();
/*final SOAPBody respBody = response.getSOAPPart().getEnvelope().getBody();
System.out.println("------------------------------------");
for (Iterator childEleIter = respBody.getChildElements(); childEleIter.hasNext();) {
SOAPElement o = (SOAPElement) childEleIter.next();
System.out.println("@@@@@@@@@ o.tn=" + o.getTagName());
System.out.println("------------------------------------------");
for (Iterator iter = o.getChildElements(); iter.hasNext();) {
SOAPElement p = (SOAPElement) iter.next();
System.out.println("@@@@@@@@@ p.o=" + p);
System.out.println("@@@@@@@@@ p.pre=" + p.getPrefix());
System.out.println("@@@@@@@@@ p.ln=" + p.getLocalName());
System.out.println("@@@@@@@@@ p.tn=" + p.getTagName());
System.out.println("@@@@@@@@@ p.ns URI=" + p.getNamespaceURI());
System.out.println("@@@@@@@@@ p.Val=" + p.getValue());
}
}
System.out.println("------------------------------------");*/
// response.getSOAPPart().getEnvelope().getHeader().extractAllHeaderElements();
// sCon.call(response, ADDRESS);
// printSOAPMessage(response);
}
public void testSendReceiveNonRefAttachment() throws Exception {
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage request = mf.createMessage();
//create the SOAPPart
createSimpleSOAPPart(request);
//Attach a text/plain object with the SOAP request
String sampleMessage = "Sample Message: Hello World!";
AttachmentPart textAttach = request.createAttachmentPart(sampleMessage, "text/plain");
// textAttach.addMimeHeader("Content-Transfer-Encoding", "binary");
request.addAttachmentPart(textAttach);
SOAPConnection sCon = SOAPConnectionFactory.newInstance().createConnection();
SOAPMessage response = sCon.call(request, ADDRESS);
/*
int attachmentCount = response.countAttachments();
assertTrue(attachmentCount == 2);
Iterator attachIter = response.getAttachments();
int i = 0;
while (attachIter.hasNext()) {
AttachmentPart attachment = (AttachmentPart) attachIter.next();
final Object content = attachment.getDataHandler().getContent();
if (content instanceof String) {
assertEquals(sampleMessage, (String) content);
} else if (content instanceof ByteArrayInputStream) {
ByteArrayInputStream bais = (ByteArrayInputStream) content;
byte[] b = new byte[15000];
final int lengthRead = bais.read(b);
FileOutputStream fos =
new FileOutputStream(new File("target/test-resources/result" + (i++) + ".jpg"));
fos.write(b, 0, lengthRead);
fos.flush();
fos.close();
assertTrue(attachment.getContentType().equals("image/jpeg")
|| attachment.getContentType().equals("text/plain"));
}
}*/
sCon.close();
}
private void createSOAPPart(SOAPMessage message) throws SOAPException {
SOAPPart sPart = message.getSOAPPart();
SOAPEnvelope env = sPart.getEnvelope();
SOAPBody body = env.getBody();
final SOAPHeader soapHeader = env.getHeader();
soapHeader.addHeaderElement(env.createName("TestHeader1", "swa", "http://fakeNamespace.org"));
soapHeader.addHeaderElement(env.createName("TestHeader2", "swa", "http://fakeNamespace.org"));
final SOAPHeaderElement headerEle3 =
soapHeader.addHeaderElement(env.createName("TestHeader3", "swa", "http://fakeNamespace.org"));
final SOAPElement ch1 = headerEle3.addChildElement("he3", "swa");
ch1.addTextNode("Im Header Element of header3");
Name ns = env.createName("echo", "swa", "http://fakeNamespace.org");
SOAPBodyElement bodyElement = body.addBodyElement(ns);
Name nameMain = env.createName("internal");
SOAPElement mainChildEle = bodyElement.addChildElement(nameMain);
Name ns2 = env.createName("text");
SOAPElement textReference = mainChildEle.addChildElement(ns2);
Name hrefAttr = env.createName("href");
textReference.addAttribute(hrefAttr, "cid:submitSampleText@apache.org");
Name ns3 = env.createName("image");
SOAPElement imageReference = mainChildEle.addChildElement(ns3);
Name ns31 = env.createName("inner");
final SOAPElement img = imageReference.addChildElement(ns31);
img.addAttribute(hrefAttr, "cid:submitSampleImage@apache.org");
Name ns4 = env.createName("plaintxt");
SOAPElement plainTxt = mainChildEle.addChildElement(ns4);
plainTxt.addTextNode("This is simple plain text");
Name ns5 = env.createName("nested");
SOAPElement nested = mainChildEle.addChildElement(ns5);
nested.addTextNode("Nested1 Plain Text");
Name ns6 = env.createName("nested2");
SOAPElement nested2 = nested.addChildElement(ns6);
nested2.addTextNode("Nested2 Plain Text");
}
private void createSimpleSOAPPart(SOAPMessage message) throws SOAPException {
SOAPPart sPart = message.getSOAPPart();
SOAPEnvelope env = sPart.getEnvelope();
SOAPBody body = env.getBody();
SOAPHeader header = env.getHeader();
header.addHeaderElement(env.createName("Header1",
"pref",
"http://test.apach.org/test")).addTextNode("This is header1");
Name ns = env.createName("echo", "swa2", "http://fakeNamespace2.org");
final SOAPBodyElement bodyElement = body.addBodyElement(ns);
Name ns2 = env.createName("something");
final SOAPElement ele1 = bodyElement.addChildElement(ns2);
ele1.addTextNode("This is some text");
Name ns3 = env.createName("ping", "swa3", "http://fakeNamespace3.org");
final SOAPBodyElement bodyElement2 = body.addBodyElement(ns3);
Name ns4 = env.createName("another");
final SOAPElement ele2 = bodyElement2.addChildElement(ns4);
ele2.addTextNode("This is another text");
}
}