Howto:SOAP API Java Sample Code: Difference between revisions
(New page: {{FIXME|reason=TODO: work in progress }} ==Applies To== This information applies to * any innovaphone PBX platform * Java Runtime Environment innovaphone PBX web services can be used fr...) |
(No difference)
|
Revision as of 15:20, 23 April 2018
Applies To
This information applies to
- any innovaphone PBX platform
- Java Runtime Environment
innovaphone PBX web services can be used from Java Runtime Environment. Here is how
More Information
Configuration
Modify the global variables SOAPENDPOINTURL, ADMSOAPUSER, ADMSOAPUSERPWD, SOAPUSER and CNUSER according to your specific system.
Running Sample Code
The sample application
This section will discuss the sample code. It is not a decent description of the PBX SOAP API. For this, see the related articles.
import javax.xml.soap.*;
import org.w3c.dom.NodeList;
public class innoSOAP {
/*
The example below demonstrates the use of SOAP integration to innovaphone PBX.
Reference to innovaphone SOAP integration can be found on:
http://wiki.innovaphone.com/index.php?title=Reference:SOAP_API
INSTRUCTIONS:
Modify the global variables below according to your specific system.
The program will perform the following tasks:
1 - Send a SOAP message with the instruction "Initialize" and grab the session ID.
2 - Referencing the session ID it will send a SOAP message with the instruction "UserInitialize" and grab the user ID.
3 - Loop on an SOAP instruction "Poll" to keep looking for information on the user CNUSER (refer to global variables below)
User information and Call information.
(The Poll call remains opened until information is provided or time out. In case of timeout PBX sends an emtpy response
and then another Poll call takes place)
Created by:
Francisco Paletta
Version: 0.1
*/
//innovaphone general information
private static final String MYNAMESPACE = "pbx";
private static final String MYNAMESPACEURI = "http://www.innovaphone.com/pbx";
//specific system information
private static final String SOAPACTION = "";
private static final String SOAPENDPOINTURL = "http://192.168.0.1/PBX0/user.soap";
private static final String ADMSOAPUSER = "admin"; //PBX admin user
private static final String ADMSOAPUSERPWD = "ip311"; //PBX admin password
private static final String SOAPUSER = "SOAP"; //SOAP user object in PBX with group access to other objects
private static final String CNUSER = "User 1"; //CN of user to perform Poll on
// Main function
public static void main(String args[]) {
callSoapWebService(SOAPENDPOINTURL, SOAPACTION);
}
//Prints all nodes on the nodelist
private static void nodeListPrint(NodeList list, String tab){
NodeList childList;
for (int i = 0; i < list.getLength(); i++) {
if(!list.item(i).getNodeName().equals("#text")) {
System.out.println("");
System.out.print(tab+String.valueOf(list.item(i).getNodeName()));
}
childList = list.item(i).getChildNodes();
if(childList.getLength() == 0) {
System.out.print(" -> ");
System.out.print(String.valueOf(list.item(i).getTextContent()));
} else {
nodeListPrint(childList, tab+" ");
}
}
}
//Starts web connection and execute the SOAP calls
private static void callSoapWebService(String soapEndpointUrl, String soapAction) {
try {
String session="";
String user="";
// Create SOAP Connection
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
// Send SOAP Message to SOAP Server
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest_Initialize(soapAction), soapEndpointUrl);
// Print the SOAP Response
System.out.println("Response SOAP Message:");
soapResponse.writeTo(System.out);
System.out.println("\n");
SOAPBody body = soapResponse.getSOAPBody();
NodeList returnList = body.getElementsByTagName("InitializeResponse");
System.out.print("Response Parsed:");
nodeListPrint(returnList,"");
System.out.println("\n");
for (int k = 0; k < returnList.getLength(); k++) {
NodeList innerResultList = returnList.item(k).getChildNodes();
for (int l = 0; l < innerResultList.getLength(); l++) {
if (innerResultList.item(l).getNodeName().equalsIgnoreCase("return")) {
session = String.valueOf(innerResultList.item(l).getTextContent().trim());
}
}
}
soapResponse = soapConnection.call(createSOAPRequest_UserInitialize(soapAction, session), soapEndpointUrl);
// Print the SOAP Response
System.out.println("Response SOAP Message:");
soapResponse.writeTo(System.out);
System.out.println("\n");
body = soapResponse.getSOAPBody();
returnList = body.getElementsByTagName("UserInitializeResponse");
System.out.print("Response Parsed:");
nodeListPrint(returnList,"");
System.out.println("\n");
for (int k = 0; k < returnList.getLength(); k++) {
NodeList innerResultList = returnList.item(k).getChildNodes();
for (int l = 0; l < innerResultList.getLength(); l++) {
if (innerResultList.item(l).getNodeName().equalsIgnoreCase("return")) {
user = String.valueOf(innerResultList.item(l).getTextContent().trim());
}
}
}
boolean returnValue = true;
while(returnValue){
soapResponse = soapConnection.call(createSOAPRequest_Poll(soapAction, session), soapEndpointUrl);
//The call for Poll remains opened until PBX sends a response. In case of timeout PBX sends an empty response.
//The loop will guarantee another Poll call is send to keep "channel" running.
// Print the SOAP Response
System.out.println("Response SOAP Message:");
soapResponse.writeTo(System.out);
System.out.println("\n");
body = soapResponse.getSOAPBody();
returnList = body.getElementsByTagName("PollResponse");
System.out.print("Response Parsed:");
nodeListPrint(returnList,"");
System.out.println("\n");
}
soapConnection.close();
} catch (Exception e) {
System.err.println("\nError occurred while sending SOAP Request to Server!\nMake sure you have the correct endpoint URL and SOAPAction!\n");
e.printStackTrace();
}
}
//Creates a SOAPmessage with the "Initialize" instruction
private static SOAPMessage createSOAPRequest_Initialize(String soapAction) throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration(MYNAMESPACE, MYNAMESPACEURI);
// SOAP Body
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("Initialize");
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("user");
soapBodyElem1.addTextNode(SOAPUSER);
SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("appl");
soapBodyElem2.addTextNode("JAVA SOAP CALL");
SOAPElement soapBodyElem3 = soapBodyElem.addChildElement("bool");
soapBodyElem3.addTextNode("true");
SOAPElement soapBodyElem4 = soapBodyElem.addChildElement("v501");
soapBodyElem4.addTextNode("true");
SOAPElement soapBodyElem5 = soapBodyElem.addChildElement("v700");
soapBodyElem5.addTextNode("true");
SOAPElement soapBodyElem6 = soapBodyElem.addChildElement("v800");
soapBodyElem6.addTextNode("true");
SOAPElement soapBodyElem7 = soapBodyElem.addChildElement("vx1000");
soapBodyElem7.addTextNode("true");
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", soapAction);
String authorization = new sun.misc.BASE64Encoder().encode((ADMSOAPUSER+":"+ADMSOAPUSERPWD).getBytes());
headers.addHeader("Authorization", "Basic " + authorization);
soapMessage.saveChanges();
/* Print the request message, just for debugging purposes */
System.out.println("Request SOAP Message:");
soapMessage.writeTo(System.out);
System.out.println("\n");
return soapMessage;
}
//Creates a SOAPmessage with the "UserInitialize" instruction
private static SOAPMessage createSOAPRequest_UserInitialize(String soapAction, String session) throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration(MYNAMESPACE, MYNAMESPACEURI);
// SOAP Body
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("UserInitialize");
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("session");
soapBodyElem1.addTextNode(session);
SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("user");
soapBodyElem2.addTextNode(CNUSER);
SOAPElement soapBodyElem3 = soapBodyElem.addChildElement("follow");
soapBodyElem3.addTextNode("true");
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", soapAction);
String authorization = new sun.misc.BASE64Encoder().encode((ADMSOAPUSER+":"+ADMSOAPUSERPWD).getBytes());
headers.addHeader("Authorization", "Basic " + authorization);
soapMessage.saveChanges();
/* Print the request message, just for debugging purposes */
System.out.println("Request SOAP Message:");
soapMessage.writeTo(System.out);
System.out.println("\n");
return soapMessage;
}
//Creates a SOAPmessage with the "Poll" instruction
private static SOAPMessage createSOAPRequest_Poll(String soapAction, String session) throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration(MYNAMESPACE, MYNAMESPACEURI);
// SOAP Body
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("Poll");
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("session");
soapBodyElem1.addTextNode(session);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", soapAction);
String authorization = new sun.misc.BASE64Encoder().encode((ADMSOAPUSER+":"+ADMSOAPUSERPWD).getBytes());
headers.addHeader("Authorization", "Basic " + authorization);
soapMessage.saveChanges();
/* Print the request message, just for debugging purposes */
System.out.println("Request SOAP Message:");
soapMessage.writeTo(System.out);
System.out.println("\n");
return soapMessage;
}
}