Package org.apache.sandesha2.mtom

Source Code of org.apache.sandesha2.mtom.MTOMRMTest

/*
* 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.sandesha2.mtom;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMText;
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.description.AxisOperationFactory;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver;
import org.apache.axis2.transport.http.SimpleHTTPServer;
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sandesha2.SandeshaException;
import org.apache.sandesha2.SandeshaTestCase;

public class MTOMRMTest extends SandeshaTestCase {

  SimpleHTTPServer httpServer = null;

  private final String applicationNamespaceName = "http://tempuri.org/";

  private final String MTOMping = "MTOMping";

  private final String Attachment = "Attachment";

  private final String SOURCE_IMAGE_FILE =  "modules"+File.separator+"tests" + "mtom-image.jpg";

  private final String DESTINATION_IMAGE_FILE = "target" + File.separator + "mtom-image1.jpg";

  private final String PING_OPERATION_NAME = "ping";

  private Log log = LogFactory.getLog(getClass());

  int serverPort = DEFAULT_SERVER_TEST_PORT;

  long sourceLength;

  public MTOMRMTest() {
    super("MTOMRMTest");
  }

  public void setUp() throws AxisFault {
    String repoPath = "target" + File.separator + "repos" + File.separator + "server";
    String axis2_xml = "target" + File.separator + "test-classes" + File.separator + "server_mtom_axis2.xml";
    ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(
        repoPath, axis2_xml);

    AxisConfiguration axisConfiguration = configContext.getAxisConfiguration();
    AxisService axisService = axisConfiguration.getService("RMSampleService");
    AxisOperation operation = AxisOperationFactory.getAxisOperation(WSDLConstants.MEP_CONSTANT_IN_ONLY);
    operation.setMessageReceiver(new MTOMTestMessageReceiver());
    operation.setName(new QName(MTOMping));
    axisService.addOperation(operation);

    AxisOperation pingOperation = axisService.getOperation(new QName(PING_OPERATION_NAME));
    if (pingOperation == null)
      throw new AxisFault("Cant find the ping operation");

    // setting the operation specific phase chain
    operation.setRemainingPhasesInFlow(pingOperation.getRemainingPhasesInFlow());

    String serverPortStr = getTestProperty("test.server.port");
    if (serverPortStr != null) {
      try {
        serverPort = Integer.parseInt(serverPortStr);
      } catch (NumberFormatException e) {
        log.error(e);
      }
    }

    httpServer = new SimpleHTTPServer(configContext, serverPort);
    httpServer.start();
    try {
      Thread.sleep(300);
    } catch (InterruptedException e) {
      throw new SandeshaException("sleep interupted");
    }
  }

  public void tearDown() throws SandeshaException {
    if (httpServer != null)
      httpServer.stop();

    try {
      Thread.sleep(300);
    } catch (InterruptedException e) {
      throw new SandeshaException("sleep interupted");
    }
  }

  public void testMTOMPing() throws AxisFault, InterruptedException {

//    String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
//    String transportTo = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
//    String repoPath = "target" + File.separator + "repos" + File.separator + "client";
//    String axis2_xml = "test-resources" + File.separator + "client_mtom_axis2.xml";
//
//    ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(
//        repoPath, axis2_xml);
//    Options clientOptions = new Options();
//    clientOptions.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
//    clientOptions.setTo(new EndpointReference(to));
//    clientOptions.setProperty(MessageContextConstants.TRANSPORT_URL, transportTo);
//    String sequenceKey = "sequence1";
//    clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY, sequenceKey);
//    ServiceClient serviceClient = new ServiceClient(configContext, null);
//    clientOptions.setAction("http://testAction");
//    serviceClient.setOptions(clientOptions);
//
//    clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, "true");
//    serviceClient.fireAndForget(getMTOMPingOMBlock());
//
//    Thread.sleep(10000);
//
//    SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
//    assertTrue(sequenceReport.getCompletedMessages().contains(new Long(1)));
//    assertEquals(sequenceReport.getSequenceStatus(), SequenceReport.SEQUENCE_STATUS_TERMINATED);
//    assertEquals(sequenceReport.getSequenceDirection(), SequenceReport.SEQUENCE_DIRECTION_OUT);
//
//
//    configContext.getListenerManager().stop();
//    serviceClient.cleanup();
   
  }

  private OMElement getMTOMPingOMBlock() throws AxisFault {
    OMFactory fac = OMAbstractFactory.getOMFactory();
    OMNamespace namespace = fac.createOMNamespace(applicationNamespaceName, "ns1");
    OMElement pingElem = fac.createOMElement(MTOMping, namespace);

    OMElement attachElem = fac.createOMElement(Attachment, namespace);

    File file = new File(SOURCE_IMAGE_FILE);
    assertTrue(file.exists());

    sourceLength = file.length();

    DataSource dataSource = new FileDataSource(file);
    assertNotNull(dataSource);
    DataHandler dataHandler = new DataHandler(dataSource);

    OMText textData = fac.createOMText(dataHandler, true);
    attachElem.addChild(textData);
    pingElem.addChild(attachElem);

    return pingElem;
  }

  private class MTOMTestMessageReceiver extends RawXMLINOnlyMessageReceiver {

    public void invokeBusinessLogic(MessageContext msgContext) throws AxisFault {
      try {
        doInvocation(msgContext);
      } catch (Exception e) {
        fail(e.getMessage());
      }
    }

  }

  private void doInvocation(MessageContext mc) throws AxisFault {
    SOAPEnvelope envelope = mc.getEnvelope();

    assertNotNull(envelope);

    SOAPBody body = envelope.getBody();

    OMElement payload = body.getFirstElement();
    OMElement attachmentElem = payload.getFirstChildWithName(new QName(applicationNamespaceName, Attachment));
    if (attachmentElem == null)
      throw new AxisFault("'Attachment' element is not present as a child of the 'Ping' element");

    OMText binaryElem = (OMText) attachmentElem.getFirstOMChild();

    binaryElem.setOptimize(true);
    DataHandler dataHandler = (DataHandler) binaryElem.getDataHandler();

    try {
      File destinationFile = new File(DESTINATION_IMAGE_FILE);
      if (destinationFile.exists())
        destinationFile.delete();

      FileOutputStream fileOutputStream = new FileOutputStream(DESTINATION_IMAGE_FILE);

      InputStream inputStream = dataHandler.getDataSource().getInputStream();
      byte[] bytes = new byte[5000];
      int length = inputStream.read(bytes);
      fileOutputStream.write(bytes, 0, length);
      fileOutputStream.close();

      destinationFile = new File(DESTINATION_IMAGE_FILE);
      assertTrue(destinationFile.exists());
      long destLength = destinationFile.length();
      assertEquals(sourceLength, destLength);

      destinationFile.delete();

    } catch (Exception e) {
      throw AxisFault.makeFault(e);
    }
  }

}
TOP

Related Classes of org.apache.sandesha2.mtom.MTOMRMTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.