请告诉我有没有办法在Java中使用MM7协议发送彩信?
如果有一个免费的API来生成相应的SOAP消息,请告诉我。我处于死胡同状态,我真的需要一种方法来做到这一点。您的明智建议也是受欢迎的。
提前感谢。
答案 0 :(得分:7)
MMS Soap应如下所示:3GPP MM7 SOAP Spesicifation。
以下是我的表现:
您将需要activation.jar,saaj-api.jar,activation.jar和saaj-impl.jar(以及任何其他相关的jar文件)。
以下是如何开始的。
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.");
System.out.println("\nREQUEST:\n");
message.writeTo(System.out);
System.out.println();
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();
}
}
}
答案 1 :(得分:5)
多年来,我不得不使用MM7协议连接到各种MMSC。 SAAJ方法是有效的,但有时你必须手动制作MM7消息,因为MMSC往往对精确的MIME格式,SOAP,甚至二进制与base64编码都很挑剔。
在我的公司,我们开发了一个库,可以根据JDOM管理低级别的MM7 SOAP和附件。无论实际的MM7协议版本/架构如何,它都可以工作。最近我们决定开源,你可以在这里https://github.com/vnesek/instantcom-mm7
示例:
SubmitReq sr = new SubmitReq();
sr.setVaspId("xxx_vaspid");
sr.setVasId("xxx_vasid");
sr.setSubject("Nice weather");
sr.setMessageClass(MessageClass.INFORMATIONAL);
sr.setServiceCode("7007");
sr.addRecipient(new Address("+385910000001", RecipientType.TO));
// Add text content
TextContent text = new TextContent("We got a real nice weather today.");
text.setContentId("text");
sr.setContent(text);
// Initialize MM7 client to MMSC
MMSC mmsc = new BasicMMSC(url);
// Send a message
SubmitRsp submitRsp = mmsc.submit(sr);
System.out.println(submitRsp);