/* * 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.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.SimpleHTTPServer; import org.apache.axis2.transport.http.impl.httpclient4.HTTPClient4TransportSender; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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 { protected static final Log log = LogFactory.getLog(OptionsSaveTest.class); 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); log.debug("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 HTTPClient4TransportSender()); transportOut2.setSender(new HTTPClient4TransportSender()); transportOut3.setSender(new HTTPClient4TransportSender()); 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(); log.debug("OptionsSaveTest:testSaveAndRestore(): temp file = [" + theFilename + "]"); } catch (Exception ex) { log.debug("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 log.debug("OptionsSaveTest:testSaveAndRestore(): saving ....."); saved = false; outObjStream.writeObject(options); // close out the streams outObjStream.flush(); outObjStream.close(); outStream.flush(); outStream.close(); saved = true; log.debug( "OptionsSaveTest:testSaveAndRestore(): ....save operation completed....."); long filesize = theFile.length(); log.debug("OptionsSaveTest:testSaveAndRestore(): file size after save [" + filesize + "] temp file = [" + theFilename + "]"); } catch (Exception ex2) { if (saved != true) { log.debug("OptionsSaveTest:testSaveAndRestore(): error during save [" + ex2.getClass().getName() + " : " + ex2.getMessage() + "]"); ex2.printStackTrace(); } else { log.debug("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 log.debug("OptionsSaveTest:testSaveAndRestore(): restoring ....."); restored = false; Options options_restored = (Options) inObjStream.readObject(); inObjStream.close(); inStream.close(); options_restored.activate(configurationContext); restored = true; log.debug( "OptionsSaveTest:testSaveAndRestore(): ....restored operation completed....."); comparesOk = options_restored.isEquivalent(options); log.debug("OptionsSaveTest:testSaveAndRestore(): Options equivalency [" + comparesOk + "]"); } catch (Exception ex2) { log.debug("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); log.debug("OptionsSaveTest:testSaveAndRestore(): END ---------------"); } }