Manual. Programmer's Guide for Java API



Similar documents
Division of Informatics, University of Edinburgh

ACM Crossroads Student Magazine The ACM's First Electronic Publication

Servlets. Based on Notes by Dave Hollinger & Ethan Cerami Also, the Online Java Tutorial by Sun

Java Web Services SDK

CS506 Web Design and Development Solved Online Quiz No. 01

Java EE Introduction, Content. Component Architecture: Why and How Java EE: Enterprise Java

3.5. cmsg Developer s Guide. Data Acquisition Group JEFFERSON LAB. Version

Spryng Making Business Mobile Mobile Terminated Premium SMS Gateway. Contents:

CSc31800: Internet Programming, CS-CCNY, Spring 2004 Jinzhong Niu May 9, Java Servlets

2. Follow the installation directions and install the server on ccc

INTRODUCTION TO WEB TECHNOLOGY

Configure a SOAScheduler for a composite in SOA Suite 11g. By Robert Baumgartner, Senior Solution Architect ORACLE

Creating a Simple, Multithreaded Chat System with Java

Ciphermail Gateway PDF Encryption Setup Guide

JobScheduler Web Services Executing JobScheduler commands

Penetration from application down to OS

Issue 2EN. Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation

2.8. Session management

No no-argument constructor. No default constructor found

Java Interview Questions and Answers

White Paper March 1, Integrating AR System with Single Sign-On (SSO) authentication systems

Voice Processing Features

Lesson: All About Sockets

SME- Mail to SMS & MMS Gateway with NowSMS Quick Start Guide

Java 2 Web Developer Certification Study Guide Natalie Levi

Building a Multi-Threaded Web Server

Developer Guide: Unwired Server Management API. Sybase Unwired Platform 2.1

Learning Outcomes. Networking. Sockets. TCP/IP Networks. Hostnames and DNS TCP/IP

An introduction to web programming with Java

Java Application Developer Certificate Program Competencies

Database Applications Recitation 10. Project 3: CMUQFlix CMUQ s Movies Recommendation System

Overview of Web Services API

Technical documentation

File class in Java. Scanner reminder. Files 10/19/2012. File Input and Output (Savitch, Chapter 10)

Nokia for Business. Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation

redcoal SMS for MS Outlook and Lotus Notes

Jobs Guide Identity Manager February 10, 2012

Web Container Components Servlet JSP Tag Libraries

Fundamentals of Java Programming

Question1-part2 What undesirable consequences might there be in having too long a DNS cache entry lifetime?

Mail User Agent Project

Principles and Techniques of DBMS 5 Servlet

Developer Guide for Unwired Server Management API. Sybase Unwired Platform 2.0

Amazon Glacier. Developer Guide API Version

Data Pipeline with Kafka

The Sun Certified Associate for the Java Platform, Standard Edition, Exam Version 1.0

Word Count Code using MR2 Classes and API

ResellerPlus - Bulk Http API Specification. (This Document gives details on how to send messages via the Bulk HTTP API for the RouteSms SMPP System)

MSDG Services Integration Document Draft Ver 1.2

Managing Data on the World Wide-Web

Assignment 4 Solutions

FTP Client Engine Library for Visual dbase. Programmer's Manual

CIMHT_006 How to Configure the Database Logger Proficy HMI/SCADA CIMPLICITY

An Android-based Instant Message Application

Intellicus Single Sign-on

FTP API Specification V2.6

Using RADIUS Agent for Transparent User Identification

Communicating with a Barco projector over network. Technical note

LISTSERV Maestro 6.0 Installation Manual for Solaris. June 8, 2015 L-Soft Sweden AB lsoft.com

How to use JavaMail to send

Brekeke PBX Web Service

SMTP-32 Library. Simple Mail Transfer Protocol Dynamic Link Library for Microsoft Windows. Version 5.2

Web Application Programmer's Guide

Transparent Redirection of Network Sockets 1

Introduction to Java. Module 12: Networking (Java Sockets) Prepared by Costantinos Costa for EPL 233. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 1

Owner of the content within this article is Written by Marc Grote

CHAPTER 10: WEB SERVICES

SITRANS RD500 Configuring the RD500 with PSTN or GSM modems and Windows-based servers and clients for communication Objective:

CS5233 Components Models and Engineering

Chulalongkorn University International School of Engineering Department of Computer Engineering Computer Programming Lab.

Follow these steps to prepare the module and evaluation board for testing.

Napster and Gnutella: a Comparison of two Popular Peer-to-Peer Protocols. Anthony J. Howe Supervisor: Dr. Mantis Cheng University of Victoria

WebSphere and Message Driven Beans

Spryng Making Business Mobile (0) Spryng Headquarters: Herengracht BW Amsterdam - The Netherlands

Preet raj Core Java and Databases CS4PR. Time Allotted: 3 Hours. Final Exam: Total Possible Points 75

Java Servlet and JSP Programming. Structure and Deployment China Jiliang University

Java 6 'th. Concepts INTERNATIONAL STUDENT VERSION. edition

CipherMail Gateway Quick Setup Guide

Software Engineering Techniques

Broadcasting Audio Messages with Group Paging and Push-to-Talk

Java the UML Way: Integrating Object-Oriented Design and Programming

SAP Note Configuration of , fax, paging or SMS using SMTP

Evaluation. Copy. Evaluation Copy. Chapter 7: Using JDBC with Spring. 1) A Simpler Approach ) The JdbcTemplate. Class...

Transparent Redirection of Network Sockets 1

CS 111 Classes I 1. Software Organization View to this point:

Implementing SQI via SOAP Web-Services

The Java Logging API and Lumberjack

Essentials of the Java(TM) Programming Language, Part 1

PrettyMay Call Center for Skype

11.1 Web Server Operation

Specialized Programme on Web Application Development using Open Source Tools

Sample copy. Introduction To WebLogic Server Property of Web 10.3 Age Solutions Inc.

Listeners. Formats. Free Form. Formatted

Network Communication

JAVA Program For Processing SMS Messages

Course Number: IAC-SOFT-WDAD Web Design and Application Development

Logging in Java Applications

StreamServe Job Gateway

Transcription:

2013-02-01 1 (15) Programmer's Guide for Java API Description This document describes how to develop Content Gateway services with Java API. TS1209243890 1.0 Company information TeliaSonera Finland Oyj Teollisuuskatu 15, 00510 HELSINKI, FI Registered office: Helsinki Business ID 1475607-9, VAT No. FI14756079

2013-02-01 2 (15) Version history Versions Status Modified by Comments 1.0 Approved 01.02.2013 TeliaSonera Finland Oyj Renewed version Table of contents 1 Introduction... 3 1.1 The Content Gateway API Library... 3 1.2 Additional Information... 3 1.3 General Instructions for Using the Java API... 3 2 Developing Applications with Java API... 3 2.1 Developing a Send Only Application... 4 2.2 Developing a Receive Only Application... 6 2.3 Developing a Query/reply Application... 7 2.3.1 Closing a Message Session... 9 2.3.2 Multiple Reply Messages within One Session... 10 2.4 Developing a Push Application... 10 2.5 Messages... 12 2.6 Implementing Positioning Interface... 12 3 Classes and Methods... 14 4 Error Messages in Java API... 14

2013-02-01 3 (15) 1 Introduction Content Gateway Java API is designed to provide a Java programming interface to the Content Gateway platform. API handles all the connections and data transfer between the platform and content/service provider s applications. This document describes the basic principles of creating and running a Content Gateway service with the Java API. Content Gateway Java API provides you with a simple programming interface for developing mobile value added services and applications. Further and more detailed information about class usage can be found in the JavaDoc documentation. 1.1 The Content Gateway API Library The Content Gateway software contains the C++, ActiveX and Java API libraries. The API libraries offer you the following functionalities: Interpreting the SMSC protocol via Provider Server and Operator Server and controlling the functional features of the application. Changes in the SMSC do not generally affect your applications. Converting messages to a format that Provider Server and SMSC understand. Content Gateway currently supports SMS messages in a text or binary format. In mobile terminated messages, the system also supports Nokia Smart Messaging. Performing character set conversions between the SMSC and API. Controlling message handling and routing messages to the correct session instances or call-back functions. Setting parameters for sending messages. Developing TCP/IP socket client applications. The API library communicates with Provider Server, opens the connection and creates the message structure. Developing TCP/IP socket server applications. The API library communicates with Provider Server, opens the connection and creates the message structure. Deleting unnecessary characters from the recipient s MSID number. The MSID number is currently a mobile station number. Controlling sessions automatically. 1.2 Additional Information The supported service types, billing and general guidelines for service and application development are explained in Service Development Guide. 1.3 General Instructions for Using the Java API CGW Java API requires the installation and proper configuration of Content Gateway Provider Server version 3.0 (or newer) and JDK 1.3 (or newer). 2 Developing Applications with Java API The basic function of the Content Gateway platform is to transfer SMS messages between the SMSC and the content/service provider. The transferred messages can be mobile originated (MO) or mobile terminated (MT). One of the important aspects is billing, i.e. charging transactions between the content/service provider and the subscriber. To create successful Content Gateway applications, it is important to understand the concept of a Content Gateway

2013-02-01 4 (15) session. The term session describes a single money transaction, a single service provided to the subscriber. A session may contain several SMS messages, e.g. a traditional weather service session consists of two SMS messages: a MO query from the subscriber and a MT reply from the content/service provider. The session is billed when the subscriber receives the MT reply successfully. This concept is implemented in the Java API. The following three classes are used to handle the Content Gateway sessions: 1. The base class CGW provides the interface to the Content Gateway platform, it creates the connections and manages the sessions. 2. The CGWMessage class represents the actual SMS messages that can be sent by the content/service provider or received from the subscriber. It contains all the necessary information, such as the sender, the recipient and the message text. 3. The CGWSession class stores the status of the Content Gateway session, i.e. sending a CGWMessage always produces an instance of the CGWSession class containing information on the session success. 2.1 Developing a Send Only Application The Send Only mode is a common and simple way to use the Java API. It provides an easy way to create an application that only needs to send messages, e.g. an intranet page calling a Java servlet to send SMS messages. The API will be automatically in the Send Only mode if the callback interface is not used, i.e the class CGW is instantiated. In addition, send methods are always blocking in the Send Only mode, which means that the session status information is available immediately after the message has been sent. The following example illustrates how this can be done: import cgw.*; public class Sender { public Sender() { // Construct the new CGW instance CGW cgw = new CGW(); // send the message and catch the possible exception cgw.send("007", "0101234567", "CGW Java API"); catch (CGWException e) { System.out.println(e); // The main method used to start the sender public static void main(string[] args) { new Sender();

2013-02-01 5 (15) Note that the class CGW instance was created with no parameters. In this case the Java API uses the default values to connect Provider Server at the localhost in port 21772. The constructor could also have been called using specified Provider Server connection settings: CGW cgw = new CGW( server.company.com, 21772); The actual sending is done within a try-catch block, since the send method throws an exception if the sending fails. When the API is in the Send Only mode, you do not have to care about the CGWSession instance the send method returns. The session status will be correct if no exception is thrown. The next example shows how to use the Java API correctly in a Java servlet. The most important thing to notice is that the class CGW should be constructed only once in an application. In a servlet, the correct location is the init() method. This way the connection to Provider Server is kept open and sending messages is faster. If you wish to create a subclass that sends messages, just pass the CGW instance as a reference; do not create a new instance each time the class is used. import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import cgw.*; public class Sender extends HttpServlet { // Define a global CGW instance CGW cgw; public void init(servletconfig config) throws ServletException { super.init(config); // Construct a new CGW instance in servlet init cgw = new CGW(); public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/plain"); PrintWriter out = new PrintWriter(response.getWriter()); // Read the message and recipient parameters

2013-02-01 6 (15) String recipient = request.getparameter("recipient"); String message = request.getparameter("message"); // send the message and catch the possible exception cgw.send("007", recipient, message); out.println("the message was successfully sent."); catch (CGWException e) { out.println("sending the message failed."); Following examples show how to use Send Only service type with servlet: If you have a servlet engine running in the localhost (default http port 80), you will be able to send SMS messages just by calling the servlet: http://localhost/sms/sender?message=test+message&recipient=0101234567 This would be an easy way to create, for example, a service that sends ringing tones to subscribers. An HTTP interface of Provider Server can be used to receive the SMS request and configured to call the servlet. The Provider Server application type should be set to receive-only for the keyword since the actual ringing tone is sent by the servlet. The application for incoming message configuration would be as follows: http://localhost/sms/sender?message=$(1)&recipient=$(m) The ringing tone could be ordered by sending an SMS, e.g. TONE FINLANDIA and the HTTP request that the servlet gets is: http://localhost/sms/sender?message=finlandia&recipient=0101234567 See the JavaDoc documentation for further details on sending binary Messages. 2.2 Developing a Receive Only Application When an application is designed to receive SMS messages, Java API callback functionality has to be implemented. The callback API is based on an inheritable and overridable architecture. It is very similar to, e.g. the Servlet API. To use the interface in an application, the application class has to be extended from the superclass CGW. The SMS message interface contains two overridable methods in class CGW that handle incoming messages and session status information. By default, the only method that needs to be overridden, is the receive(cgwmessage) method. import cgw.*;

2013-02-01 7 (15) // Inherit the class from superclass CGW public class Receiver extends CGW { public Receiver() { // Start the receiver at default port 21779 this.listen(); catch (CGWException ce) { System.out.println("Receive error: " + ce); // Loop indefinitely while (true) { Thread.sleep(10000); catch (InterruptedException e) { // Override the receive SMS message method public void receive(cgwmessage message) { // Print the text of the incoming message System.out.println("The received message is " + message.getmessage()); // The main method used to start the receiver public static void main(string[] args) { 2.3 Developing a Query/reply Application new Receiver(); The possible reply messages are sent blocked (a confirmation by the SMSC is required before the send() method returns). The following example demonstrates a simple application that receives SMS messages to a local port 21779 from Provider Server and sends back a reply message. The session status information can be found from the returned CGWSession class, although an exception is thrown if an error occurs during the sending.

2013-02-01 8 (15) If you wish to send the reply message non-blocking, you have to set the delivery synchronization off. This can be done with the setdeliverysync() method in the class CGW. In this case the returned CGWSession contains only the message ID of the sent message. The actual session status information has to be received by overriding the receive(cgwsession) method. The information is just printed on the screen: // Override the session status receive method public void receive(cgwsession session) { if (session.isfailed()) { else { System.out.println("Session failed: " + session.getmessageid()); System.out.println("Session ready: " + session.getmessageid()); The previous example assumes that the SMS message was received using a Query/reply type application from Provider Server. This type of a session always requires a reply message in order to close the session and bill the event. The reply can be sent in several ways. The receiver example used the simple send()method that requires only the message text to be able to send the reply. You can send the reply, e.g. by constructing a new CGWMessage. Note that the sender and recipient numbers cannot be altered since the reply should be sent to the actual message sender. public void receive(cgwmessage message) { // Get the text of the incoming message and send a reply CGWMessage reply = new CGWMessage(); reply.settext("from Java API: " + message.gettext()); CGWSession session = this.send(reply); catch (CGWException ce) { System.out.println("Send error: " + ce); It is also possible to reply with the same message instance that was received. Although it would be seemingly possible to change the sender and recipient numbers, the reply will still be sent to the original sender using the same Provider Server application, from which the

2013-02-01 9 (15) message was received. Use this only when the reply is sent to the original sender of the message. public void receive(cgwmessage message) { // Get the text of the incoming message and send a reply message.settext("from Java API: " + message.gettext()); CGWSession session = this.send(message); catch (CGWException ce) { System.out.println("Send error: " + ce); 2.3.1 Closing a Message Session If a reply message has to be sent to a different mobile station than where it came from, the original session has to be either aborted or finished. The session has to be aborted, e.g. in high-priced services where invalid subscriber input would be otherwise billed. However, an informational info message should still be sent to explain the situation. In both cases the reply message has to be sent using a different Provider Server application than from which the message was received. When the incoming message session is aborted or finished, it is possible to freely set the sender and recipient numbers of the new message. You should always create a new message instance when the incoming message session has been finished or aborted, for example to send an error message. public void receive(cgwmessage message) { // Abort the received message (not billed) message.abort(); // Or finish the session (will be billed) message.ready(); // Get the sender of the incoming message and send a reply CGWMessage reply = new CGWMessage("007", message.getsender()); reply.settext("from Java API: " + message.gettext()); CGWSession session = this.send(reply); catch (CGWException ce) { System.out.println("Send error: " + ce);

2013-02-01 10 (15) 2.3.2 Multiple Reply Messages within One Session In some services it is required to send several reply messages to the same subscriber within one session. The number of the replied messages can differ, but the session will be billed as specified in Content Gateway. When all replied messages are sent within the same receivecallback, they will be combined into one session. Provider Server needs to be informed to wait for more messages for the current session by calling the continuesession() method for the incoming message: public void receive(cgwmessage message) { // Create three reply messages and continue session message.continuesession(); CGWMessage reply1 = new CGWMessage("Reply 1: " +message.gettext()); CGWMessage reply2 = new CGWMessage("Reply 2: " + message.gettext()); CGWMessage reply3 = new CGWMessage("Reply 3: " + message.gettext()); CGWSession session1 = this.send(reply1); CGWSession session2 = this.send(reply2); CGWSession session3 = this.send(reply3); catch (CGWException ce) { System.out.println("Send error: " + ce); If the session callback is used, you will receive three separate CGWSession instances, but the session ID will be the same for all of them. The message ID is the same ID that can be found from the returned CGWSession instance for each message. 2.4 Developing a Push Application A Push service with the JAVA API is implemented with the Send Only and Receive Only service types. You can use the same mechanisms as described in chapters 2.1 and 2.2. You need to implement a receiver, which handles incoming push open and close messages (See Service Development Guide). Sending the actual content can be done with the send method. You can define the used application with the method String SetApplication(String application_name). import java.io.*;

2013-02-01 11 (15) import cgw.*; import java.util.*; public class TestSend { // Define a global CGW instance public static void main(string[] args) { CGW cgw; cgw = new CGW(); cgw.sethost("localhost"); cgw.setport(21772); CGWMessage message = new CGWMessage(); // Service name/service id setting message.setapplication("f1"); message.setsender("12121"); message.setrecipient("0101234567"); message.settext("hungary GP result: 1. Fernando Alonso, 2. Kimi Raikkonen, 3. Juan Pablo Montoya."); message.setcharge("78"); message.setbillinginfo("billing info!"); // send the message and catch the possible exception cgw.send(message); System.out.println("The message was successfully sent."); catch (CGWException e) { System.out.println("Sending the message failed."); System.out.println("Exception: " + e);

2013-02-01 12 (15) 2.5 Messages Query/reply service type cannot be used in implementing the whole push functionality, since receiving push orders and sending the actual content needs to be done separately. In order to receive content, the end user needs to have an active push order. There are two possibilities of receiving for example an error message from the API. 1. Java Api has a class CGWException(java.lang.String info). It can be used to catch error messages if message sending fails. As in the following example: // send the message and catch the possible exception cgw.send(message); catch (CGWException e) { System.out.println("Exception: " + e); 2. Class CGWSession has also methods for handling session related messages. Method getinfo() gets a string representation of the message associated with the session. Value is null, if there is no info message available. Otherwise info offers detailed information about the error. For example: // Get detailed info of session if (session.isfailed()) { System.out.println("Session failed: " + session.getmessageid()); System.out.println("Info: " + session.getinfo()); More information about the message handling can be found from JavaDoc documentation. 2.6 Implementing Positioning Interface CGW provides end-user location information if agreed with the operator. The basic positioning data includes end-user coordinates and an estimation of the accuracy. The values (latitude, longitude and estimate) can be read using the methods in the CGWMessage class. Other available position- related data can be read using the getproperty() method. See the JavaDoc documentation for more detailed information. First, configure the service with Provider Admin and ask the operator to add positioning support to your service. Your service ID number is needed. Then write your Java application. For example, an extremely simple Java application that only returns the location coordinates: import cgw.*;

2013-02-01 13 (15) public class SPSExample extends CGW { // Start the listener and loop public SPSExample() throws CGWException { listen(12345); while (true) { Thread.sleep(10000); catch (InterruptedException e) { // Override the receive SMS message method (with positioning) public void receive(cgwmessage message) { // Get parameters from incoming message and send reply String position = "Your position:\n"; position += "Lat: " + message.getlatitude() + "\n"; position += "Lon: " + message.getlongitude() + "\n"; position += "Acc: " + message.getestimate() + "\n"; position += "City: " + message.getproperty("position-city") + "\n"; this.send(position); catch (CGWException ce) { System.err.println("Send error: " + ce); public static void main(string[] args) { new SPSExample(); catch (CGWException e) { System.err.println("Error initializing SPSExample: "+

2013-02-01 14 (15) NOTE e); When positioning is enabled, the end-user MSISDN number is displayed as a position ID that has no relation with the actual MSISDN. However, the ID can be used normally when sending messages to the end-user. 3 Classes and Methods See the JavaDoc documentation about detailed class and method descriptions. 4 Error Messages in Java API Java API can return the following error messages: Error Message listen: Address in use. Change port. listen error Timeout: no response in [ ] seconds Provider Server not responding Connection refused Connection failed op:err session-id: txt:java API: end:err Description The defined port is in use and the listening failed. You need to change the port number or shut down the other listening application. Listening the defined port failed for some other reason. Try again later. The session has not received a response during the defined time -> timeout has occurred. Find out the reason why the response is delayed and fix it. Provider Server does not respond. Check that Provider Server is up and running. Check also that you are trying to connect to it properly. The connection to the defined application is refused. Find out the reason why you cannot connect the application and fix it. The reason can be, for example, insufficient user rights for the application. The connection to the defined application failed for some other reason. CGW error information on the SMS message transaction. An instance of this message is received in the API when sending or receiving a message fails. The error text can be: Error processing message or something that has been defined separately.

2013-02-01 15 (15) Input queue closed Timeout: close processor Message text missing Sender missing Recipient missing Operation type missing Invalid operation type: Operation missing: Message type missing Application missing Cannot open log file Adding customer failed Removing customer failed File read error Cannot read customer file The input queue has been closed for some reason. Try again. The defined timeout has been reached. The message to be sent does not include text. Add the message. The message to be sent does not include the sender. Add the sender. The message to be sent does not include the recipient. Add the recipient. A type for the operation has not been defined (parameter op). You need to define this parameter (delivery, ok, msg, status, err). The defined operation type is unknown. The type should be: Delivery, ok, msg, status or err. A type for the operation has not been defined (parameter end). The message type is missing. Add the message type. The application is missing. Add the application. Opening the log file failed. Try to find out why the log file could not be opened (for example, due to permissions). Adding a customer to the user list failed. Removing a customer from the user list failed. Reading a specified file (text or binary) failed. Reading a customer (User Group) file failed.