/*
* Copyright 2004,2005 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.engine;
import junit.framework.TestCase;
import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.description.TransportInDescription;
import org.apache.axis2.description.TransportOutDescription;
import org.apache.axis2.transport.http.CommonsHTTPTransportSender;
import org.apache.axis2.transport.http.SimpleHTTPServer;
import javax.xml.namespace.QName;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class OptionsSaveTest extends TestCase {
private transient QName serviceName = new QName("NullService");
private transient QName operationName = new QName("DummyOp");
private String testArg = null;
public OptionsSaveTest(String arg0) {
super(arg0);
testArg = new String(arg0);
initAll();
}
protected void initAll() {
}
protected void setUp() throws Exception {
//org.apache.log4j.BasicConfigurator.configure();
}
public void testSaveAndRestore() throws Exception {
File theFile = null;
String theFilename = null;
boolean saved = false;
boolean restored = false;
boolean done = false;
boolean comparesOk = false;
AxisConfiguration axisConfiguration = new AxisConfiguration();
ConfigurationContext configurationContext = new ConfigurationContext(axisConfiguration);
System.out.println("OptionsSaveTest:testSaveAndRestore(): BEGIN ---------------");
// ---------------------------------------------------------
// setup an options object to use
// ---------------------------------------------------------
Options options = new Options();
options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
options.setExceptionToBeThrownOnSOAPFault(true);
options.setTimeOutInMilliSeconds(5000L);
options.setUseSeparateListener(false);
options.setAction("SoapAction");
options.setFaultTo(new EndpointReference("http://ws.apache.org/axis2/faultTo"));
options.setFrom(new EndpointReference("http://ws.apache.org/axis2/from"));
options.setTo(new EndpointReference("http://ws.apache.org/axis2/to"));
options.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
TransportOutDescription transportOut = new TransportOutDescription("null");
TransportOutDescription transportOut2 = new TransportOutDescription("happy");
TransportOutDescription transportOut3 = new TransportOutDescription("golucky");
transportOut.setSender(new CommonsHTTPTransportSender());
transportOut2.setSender(new CommonsHTTPTransportSender());
transportOut3.setSender(new CommonsHTTPTransportSender());
options.setTransportOut(transportOut);
axisConfiguration.addTransportOut(transportOut3);
axisConfiguration.addTransportOut(transportOut2);
axisConfiguration.addTransportOut(transportOut);
TransportInDescription transportIn = new TransportInDescription("null");
TransportInDescription transportIn2 = new TransportInDescription("always");
TransportInDescription transportIn3 = new TransportInDescription("thebest");
transportIn.setReceiver(new SimpleHTTPServer());
transportIn2.setReceiver(new SimpleHTTPServer());
transportIn3.setReceiver(new SimpleHTTPServer());
options.setTransportIn(transportIn);
axisConfiguration.addTransportIn(transportIn2);
axisConfiguration.addTransportIn(transportIn);
axisConfiguration.addTransportIn(transportIn3);
options.setMessageId("msgId012345");
options.setProperty("key01", "value01");
options.setProperty("key02", "value02");
options.setProperty("key03", "value03");
options.setProperty("key04", "value04");
options.setProperty("key05", "value05");
options.setProperty("key06", "value06");
options.setProperty("key07", "value07");
options.setProperty("key08", "value08");
options.setProperty("key09", "value09");
options.setProperty("key10", "value10");
// TODO: setup a parent
// ---------------------------------------------------------
// setup a temporary file to use
// ---------------------------------------------------------
try {
theFile = File.createTempFile("optionsSave", null);
theFilename = theFile.getName();
System.out.println(
"OptionsSaveTest:testSaveAndRestore(): temp file = [" + theFilename + "]");
}
catch (Exception ex) {
System.out.println(
"OptionsSaveTest:testSaveAndRestore(): error creating temp file = [" +
ex.getMessage() + "]");
theFile = null;
}
if (theFile != null) {
// ---------------------------------------------------------
// save to the temporary file
// ---------------------------------------------------------
try {
// setup an output stream to a physical file
FileOutputStream outStream = new FileOutputStream(theFile);
// attach a stream capable of writing objects to the
// stream connected to the file
ObjectOutputStream outObjStream = new ObjectOutputStream(outStream);
// try to save the message context
System.out.println("OptionsSaveTest:testSaveAndRestore(): saving .....");
saved = false;
outObjStream.writeObject(options);
// close out the streams
outObjStream.flush();
outObjStream.close();
outStream.flush();
outStream.close();
saved = true;
System.out.println(
"OptionsSaveTest:testSaveAndRestore(): ....save operation completed.....");
long filesize = theFile.length();
System.out.println("OptionsSaveTest:testSaveAndRestore(): file size after save [" +
filesize + "] temp file = [" + theFilename + "]");
}
catch (Exception ex2) {
if (saved != true) {
System.out.println("OptionsSaveTest:testSaveAndRestore(): error during save [" +
ex2.getClass().getName() + " : " + ex2.getMessage() + "]");
ex2.printStackTrace();
} else {
System.out.println(
"OptionsSaveTest:testSaveAndRestore(): error during restore [" +
ex2.getClass().getName() + " : " + ex2.getMessage() + "]");
ex2.printStackTrace();
}
}
assertTrue(saved);
// ---------------------------------------------------------
// restore from the temporary file
// ---------------------------------------------------------
try {
// setup an input stream to the file
FileInputStream inStream = new FileInputStream(theFile);
// attach a stream capable of reading objects from the
// stream connected to the file
ObjectInputStream inObjStream = new ObjectInputStream(inStream);
// try to restore the options
System.out.println("OptionsSaveTest:testSaveAndRestore(): restoring .....");
restored = false;
Options options_restored = (Options) inObjStream.readObject();
inObjStream.close();
inStream.close();
options_restored.activate(configurationContext);
restored = true;
System.out.println(
"OptionsSaveTest:testSaveAndRestore(): ....restored operation completed.....");
comparesOk = options_restored.isEquivalent(options);
System.out.println("OptionsSaveTest:testSaveAndRestore(): Options equivalency [" +
comparesOk + "]");
}
catch (Exception ex2) {
System.out.println("OptionsSaveTest:testSaveAndRestore(): error during restore [" +
ex2.getClass().getName() + " : " + ex2.getMessage() + "]");
ex2.printStackTrace();
}
assertTrue(restored);
assertTrue(comparesOk);
// if the save/restore of the object succeeded,
// then don't keep the temporary file around
boolean removeTmpFile = saved && restored && comparesOk;
if (removeTmpFile) {
try {
theFile.delete();
}
catch (Exception e) {
// just absorb it
}
}
// indicate that the temp file was created ok
done = true;
}
// this is false when there are problems with the temporary file
assertTrue(done);
System.out.println("OptionsSaveTest:testSaveAndRestore(): END ---------------");
}
}