Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send MMS with MM7 using Java?

Please let me know is there any way to send MMS using MM7 protocol in Java?

If there is a free API to generate the appropriate SOAP message please let me know it too. I'm in a dead end situation and I really need a way to do this. Your wise suggestions are also welcome.

Thank in advance.

like image 888
Maxi Avatar asked Jul 30 '11 02:07

Maxi


Video Answer


1 Answers

The MMS Soap should look like this: 3GPP MM7 SOAP Spesicifation.

Here is how I'm doing it:

You will need activation.jar, saaj-api.jar, activation.jar, and saaj-impl.jar (and any other dependent jar files).

Here is how you can start out.

package com.pixelandtag.mms.soap;

import java.io.IOException;
import java.net.URL;
import java.sql.Timestamp;
import javax.activation.DataHandler;
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.SOAPFactory;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;



public class MMSGen {

private static final String TxId = "";
private static final String MM7_VERSION = "";
private static final String VASPID = "";
private static final String VASID = "";
private static final String SHORTCODE = "";
private static final String SERVICE_CODE = "";
private static final String LINKED_ID = "";
private static final String MMSCMPMMS0000 = "";
private static final String EARLIEST_DELIVERY_TIME = "2006-11-09T13:01:04+03:00";
private static final String EXPIRY_DATE = "2007-11-10T13:01:04+03:00";
private static final String DELIVERY_REPORT = "false";
private static final String READ_REPLY = "false";
private static final String SUBJECT = "";
private static final String DISTRIBUTION_INDICATION = "false";


/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
    
    
    try {
        
        //SOAP Message created
        MessageFactory factory = MessageFactory.newInstance();
        SOAPMessage message = factory.createMessage(); 
        
        //Now accessing the elements of the soap message
        SOAPPart soapPart = message.getSOAPPart(); 
        
        //Get the envelope
        SOAPEnvelope envelope = soapPart.getEnvelope(); 
        
        
        //You can now use the getHeader and getBody methods 
        //of envelope to retrieve its empty SOAPHeader and SOAPBody objects.
        SOAPHeader header = envelope.getHeader();
        SOAPBody body = envelope.getBody();
        
        //Other ways of getting the body and header
        //header = message.getSOAPHeader();
        //body = message.getSOAPBody();
        
        
        //Deleting a node.
        //header.detachNode(); 
        SOAPFactory soapFactory = SOAPFactory.newInstance();
         
        //================CONSTRUCTING HEADER
        Name headerName = soapFactory.createName("TransactionID",
                  "mm7", "http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2");
         
        SOAPHeaderElement headerElement = header.addHeaderElement(headerName); 
        headerElement.setTextContent("TID."+TxId);
        headerElement.setMustUnderstand(true);
        //===============HEADER DONE======================
        
        
        
        
        //===============CONSTRUCTING BODY==============
        Name bodyName = soapFactory.createName("SubmitReq");
        SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
        Name attributeName = envelope.createName("xmlsn");//change name to proper to xmls, though it does not print out
        bodyElement.addAttribute(attributeName, "http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2");
        
        
        bodyName = soapFactory.createName("MM7Version");
        SOAPElement MM7Version =  bodyElement.addChildElement(bodyName);
        MM7Version.setTextContent(MM7_VERSION);
        
        bodyName = soapFactory.createName("SenderIdentification");
        SOAPElement SenderIdentification =  bodyElement.addChildElement(bodyName);
        
        bodyName = soapFactory.createName("SenderAddress");
        SOAPElement senderAddress =  SenderIdentification.addChildElement(bodyName);
        
        bodyName = soapFactory.createName("ShortCode");
        SOAPElement shortCode =  senderAddress.addChildElement(bodyName);
        shortCode.setTextContent(SHORTCODE);
        
        
        bodyName = soapFactory.createName("Recipients");
        SOAPElement recipients =  bodyElement.addChildElement(bodyName);
       
        
        bodyName = soapFactory.createName("To");
        SOAPElement to =  recipients.addChildElement(bodyName);
        
        
        bodyName = soapFactory.createName("Number");
        SOAPElement number =  to.addChildElement(bodyName);
        number.setTextContent(MMSCMPMMS0000);
        
        
        bodyName = soapFactory.createName("VASPID");
        SOAPElement vaspID =  SenderIdentification.addChildElement(bodyName);
        vaspID.setTextContent(VASPID);
        
        bodyName = soapFactory.createName("VASID");
        SOAPElement vasID =  SenderIdentification.addChildElement(bodyName);
        vasID.setTextContent(VASID);
        
        
        bodyName = soapFactory.createName("ServiceCode");
        SOAPElement serviceCode =  bodyElement.addChildElement(bodyName);
        serviceCode.setTextContent(SERVICE_CODE);
        
        
        bodyName = soapFactory.createName("LinkedID");
        SOAPElement linkedID =  bodyElement.addChildElement(bodyName);
        linkedID.setTextContent(LINKED_ID);
        
        
        bodyName = soapFactory.createName("MessageClass");
        SOAPElement messageClass =  bodyElement.addChildElement(bodyName);
        messageClass.setTextContent(MessageClass.Personal.toString());
        
        
        bodyName = soapFactory.createName("EarliestDeliveryTime");
        SOAPElement earliestDeliveryTime =  bodyElement.addChildElement(bodyName);
        earliestDeliveryTime.setTextContent(EARLIEST_DELIVERY_TIME);
        
        
        bodyName = soapFactory.createName("ExpiryDate");
        SOAPElement expiryDate =  bodyElement.addChildElement(bodyName);
        expiryDate.setTextContent(EXPIRY_DATE);
        
        
        bodyName = soapFactory.createName("DeliveryReport");
        SOAPElement deliveryReport =  bodyElement.addChildElement(bodyName);
        deliveryReport.setTextContent(DELIVERY_REPORT);
        
        bodyName = soapFactory.createName("ReadReply");
        SOAPElement readReply =  bodyElement.addChildElement(bodyName);
        readReply.setTextContent(READ_REPLY);
        
        
        bodyName = soapFactory.createName("Priority");
        SOAPElement priority =  bodyElement.addChildElement(bodyName);
        priority.setTextContent(Priority.Normal.toString());
        
        
        bodyName = soapFactory.createName("Subject");
        SOAPElement subject =  bodyElement.addChildElement(bodyName);
        subject.setTextContent(SUBJECT);
        
        
        bodyName = soapFactory.createName("ChargedParty");
        SOAPElement chargedParty =  bodyElement.addChildElement(bodyName);
        chargedParty.setTextContent(ChargedParty.Recipient.toString());
        
        
        bodyName = soapFactory.createName("DistributionIndicator");
        SOAPElement distributionIndicator =  bodyElement.addChildElement(bodyName);
        distributionIndicator.setTextContent(DISTRIBUTION_INDICATION);
        
        
        bodyName = soapFactory.createName("Content");
        SOAPElement content =  bodyElement.addChildElement(bodyName);
        
        attributeName = envelope.createName("href");//change name to proper to xmls, though it does not print out
        SOAPElement attr = content.addAttribute(attributeName, "cid:A0");
        
        attributeName = envelope.createName("allowAdaptations");//change name to proper to xmls, though it does not print out
        attr = content.addAttribute(attributeName, "false");
        //=====================BODY DONE================
        
        
        
        //=================create attachment===========
        
       // AttachmentPart attachment = message.createAttachmentPart(); 
        
        
        //Simple attach
       /* String stringContent = "Update address for Sunny Skies " + 
        "Inc., to 10 Upbeat Street, Pleasant Grove, CA 95439";

      attachment.setContent(stringContent, "application/smil");
      attachment.setContentId("update_address");

      message.addAttachmentPart(attachment); */
        
        
        URL url = new URL("http://www.petermak.nl/webalbum_peter_mak_aannemersbedrijf011002.jpg");
        DataHandler dataHandler = new DataHandler(url);
        AttachmentPart attachment1 = 
          message.createAttachmentPart(dataHandler);
       // attachment.setContent(stringContent, "application/smil");
        attachment1.setContentId("attached_image");

        message.addAttachmentPart(attachment1); 
        
        
        URL url2 = new URL("file:///C:\\Users\\Timo\\Desktop\\MMS Pis\\pic_test.jpg");
        dataHandler = new DataHandler(url2);
        AttachmentPart attachment2 = message.createAttachmentPart(
                    dataHandler);
        attachment2.setContentId("attached_image2");

        message.addAttachmentPart(attachment2);
        
        
        
        
        
        
        
       
        
       java.net.URL endpoint = new URL("http://theendpoint.");
      
      
      
        
       
         
       SOAPConnectionFactory soapConnectionFactory = 
              SOAPConnectionFactory.newInstance(); 
        
        SOAPConnection connection = 
              soapConnectionFactory.createConnection(); 
        SOAPMessage response = connection.call(message, endpoint); 
         
         
         System.out.println("\nRESPONSE:\n");
         response.writeTo(System.out);
         System.out.println();
         
         connection.close();
        
        
    
    } catch (SOAPException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
}


}
like image 76
Mwangi Avatar answered Nov 14 '22 23:11

Mwangi