Keywords

.NET (3) .rb (1) *.cod (1) 3110c (1) Algorithm (1) Amazon Cloud Drive (1) amkette (1) Android (1) Apex (6) apex:dynamic (1) API (1) API version (1) Application Development Contest (2) Artificial Intelligence (2) Atricore (1) b2g (1) Binary Search Tree (1) Blackberry Application Development (1) Blackberry Java Development Environment (1) Blender Game Engine (1) bluetooth (2) Boot2Gecko (1) bug fix (1) C (1) C++ (2) Cloud computing (1) Cloud Storage (1) Code Blocks (1) Code for a Cause (2) codejam (1) Coding (1) const_cast (1) Custom Help (1) Dancing With the Googlers (1) Data Structures (1) desktop environment (5) Doubly Linked List (1) Dropbox (1) dynamic visualforce component (1) dynamic_cast (1) Enterprise WSDL (1) Execution Context (1) fedora 14 (1) fedora 17 (5) Firefox OS (1) Flashing Nokia 3110c handset (1) Force.com (7) Gaia (1) Game Developement (1) GCC (2) GDG (2) Goank (1) Google (4) Google Developer Group (2) Google Drive (1) GTK+ (5) HACK2012 (2) Hall of Mirrors (1) help for this page (1) HTML5 (2) HTTP Web Server (1) IDE (1) Identity Provider (1) Intelligent Systems (1) Java (1) JDE (1) JOSSO (1) location based social network (1) me.social (1) MinGW (1) Natural Language Processing (1) Natural Language Toolkit (1) neckphone (1) NLKT (1) Nokia Pheonix (1) Notebook (1) Numeric XML Tags (1) OAuth2.0 (1) OLPC (7) OLPC-XO-1 (7) One Laptop per Child (5) Override custom help (1) Paas (1) Partner WSDL (1) Polymorphism (1) programming contest (1) PyGTK (4) Python (10) Recycled Numbers (1) reinterpret_cast (1) Research (1) REST (1) RM-237 (1) Robotics (1) Ruby (1) Saas (2) Salesforce.com (7) SDK (1) Service Provider (1) Single sign on (1) SOAP (3) Speaking in Tongues (1) SSO Agent (1) SSO Gateway (1) static_const (1) sugar (7) sugar activity (4) sugarlabs (7) SVG (2) Symbiotic AI (1) Tabbed container (1) TCP/IP (1) TCP/IP stack (1) Typecasting (1) typeid (1) ubuntu 13.10 (1) UDP (1) Upgrade Assembly (1) Visualforce (2) Web Server (1) Web Services (3) Web2.0 (1) wikipedia (1) wikipediaHI (1) WSDL (1) XML tags (1)
Showing posts with label SOAP. Show all posts
Showing posts with label SOAP. Show all posts

Friday, October 26, 2012

Force.com API demystified using SoapUI

I am working on a project to create Salesforce.com library for Python. I always wished for fastest web service invocation when it comes to multiple systems interacting with each other. Salesforce.com's Force.com platform exposes its API through enterprise, partner and metadata WSDL. For this purpose I scrutinized the WSDL file very closely and used SoapUI to generate the stub.

Lets jump into steps on how we do it:
1. Create a new project and select WSDL file to load and generate stub by hitting OK button.


 Once the stub is generated you can expand the node to see the list of operations exposed by the server as SOAP interface :

3. Login method:
On expanding any service node, you will see "Request" under it. Double click it to open new window on right side pane. This window will allow you to make HTTP POST requests to server. You can see the SOAP enevelope is already created in left pane in new window. All you need to do is fill in the parameters for the request and hit submit button. IMP: Make sure you set the endpoint properly. You can find this endpoint in bottom part of WSDL file as an attribute of any of SOAP 1.1 or 1.2 binding.
I entered my username and password(password+security token) here and submitted the request. On right side pane you can see the response envelope with my data like sessionId, serverURL, userInfo.

4. Creating Sobject records:
In case you need to perform further operations you need to pay extra attention here. Consider we need to create a case record through SoapUI. Double click on create operation and get the request window. Fill the parameter values as shown. Before submitting make sure you set the endpoint as the URL returned as serverUrl in the response of login method.
On successfully executing this server will return the recordId of Sobject record.


I hope this blog helps you get started on understanding how API works and more specifically the detailed flow of data on HTTP using SoapUI.

Cheers!
Kartik

Sunday, July 1, 2012

Create SOAP based Web Service on Microsoft .NET Framework

Have you ever thought of sharing your functionality to outside world where someone like you would like to consume that functionality in his app ? How you have been doing that till now....by sharing shared library or by dynamic link libraries or by sharing the actual code ? :) And how many times you got feedback asking to resolve compatibility issues due to language constraints? 

The best way to share your functionality/logic with others is through Web Services. W3C established two frameworks SOAP and REST for web services. They have defined the standard format in which two systems will interact using web services. 

The main differences between SOAP and REST based services:
  1. REST based services are light weight as compared to SOAP
  2. SOAP based services are secured as compared to REST. If you are creating a REST based service, then you need to explicitly take care of securing it.
  3. REST based services work closely with OAuth: the open authentication model that is followed by most Web2.0 apps.
  4. SOAP and REST based services accept input in XML and JSON format.
  5. REST based services provides response in XML and JSON. SOAP does the same but the response is wrapped within SOAP envelop with header and body.
In this post we will see how to create a web service in Microsoft .Net framework using Visual Basic language. 

NOTE: I have used Visual Studio 2010 for describing this.

Steps: 

1. Goto File>New Website> ASP.Net Empty Website.
2. Right click on solution in Solution explorer> click on Add New Item
3. Select Web Service, set its name as MyService.asmx and click ok:

4. Now you can see the web service "MyService.asmx" file and code file "MyService.vb" is added to solution

5. Double click on MyService.asmx to open it :
    I have written web service method "Greetings" as example. You can write your own web service method in similar manner. 

The important thing to keep in mind is that when you are publishing your web service make sure you set the appropriate namespace for your service. Currently it is by default value "http://tempuri.org". 

6. Hit Run(F5) to start Cassini( your local web server that comes with VS). This will take you to the service description page where service is available for consumption:


7. Click on the service name "Greetings" to open the page from where you can test the web service:

Enter the name parameter and hit "Invoke" button and see the result :

8. You can hit navigate to the URL : http://localhost:30149/WebSite1/MyService.asmx?WSDL 
to view the WSDL file for this service:

You may then share this WSDL with the consumer of your service. Then it is very easy to generate the client using WSDL to invoke the service.

I hope you find this post helpful in understanding how to create SOAP based web services on the fly with .Net framework.

Cheers!

Sunday, September 11, 2011

Creating Custom Apex SOAP based Web Service in Salesforce.com's Force.com platform


This blog describes how to create a Custom web service in Salesforce using Apex.

Steps:
  • Navigate to Setup>Develop>Apex Classes  and create new class by clicking new button.
  • Write a class with "global" access modifier with methods (to be exposed) with "webService" keyword
        eg.

global class KartikService
{
    webService static String hello(String Name) 
    {
        return 'Hello '+Name+' ! :D';
    }
}

  • Then save this class. After saving the class you will view a button "Generate WSDL". Click on that to get WSDL for web service you just created. Save the WSDL file. Let say file name is "KartikService.wsdl"
  • Now we will consider how we generate clients to call this service in Java and in .Net.



 For Java:



  • We will create new project in Eclipse with name "ApexCustomWS"
  • You need Enterprise/Partner WSDL to access your Salesforce org. by getting a valid sessionId.
  • Import Enterprise or Partner WSDL file into the project and generate the web service client for that.
  • Import the "KartikService.wsdl" into project and  generate web service client by right clicking on the WSDL file.
  • Image below shows code generated for Partner WSDL in Blue box and code for Custom Web service in Red Box

Above step will generate few Java files. Now add a class "Test.java" and write following code:

package com.sforce.soap.schemas._class.KartikService;
 
import java.net.URL;
import org.apache.axis.AxisFault;
import com.sforce.soap.partner.LoginResult;
import com.sforce.soap.partner.SessionHeader;
import com.sforce.soap.partner.SforceServiceLocator;
import com.sforce.soap.partner.SoapBindingStub;
 
public class Test 
{
   public static void main(String[] args) 
   {
       try 
       {
         //Get a stub for calling partner WSDL's login method in order to get SessionID
         SoapBindingStub bind= (SoapBindingStub)new SforceServiceLocator().getSoap();
         LoginResult lr=bind.login("your_username_here", "your_Password+SecurityToken");
 
         //Create a sessionHeader object and set its sessioId property to sessionId 
         //received in loginResult object                        
         SessionHeader sh=new SessionHeader();
         sh.setSessionId(lr.getSessionId());
 
         //Create a service locator object for your custom web service
         KartikServiceServiceLocator locator=new KartikServiceServiceLocator();
 
         //Get URL for your custom web service
         URL url=new URL(locator.getKartikServiceAddress());
 
         //Create a stub for your custom web service with URL for your service and locator as parameters
         KartikServiceBindingStub stub=new KartikServiceBindingStub(url, locator);
 
         //Set the header property of stub with name "SessionHeader" and value as sh-sessionHeader 
         //object created above 
         stub.setHeader(locator.getKartikServiceAddress(), "SessionHeader", sh);
 
         //now make call to custom service-in our case its "Hello(String name)"
         System.out.println(stub.hello("KARTIK"));
        }
        catch (Exception e) 
        {e.printStackTrace(); }  
   } 
}


Its output:

Hello KARTIK !


For VB.NET:

    • Create a new Winows project or ASP.net project with name "ApexCustomWS"
    • Add Web Service Reference using Partner.wsdl with namespace name as "sForceService"
    • Add Web Service Reference using KartikService.wsdl with namespace name as "MyCustomApexWS"


               

    • Now the project in solution explorer with these references will look like :


               

    • Now we write a procedure "callCustomApexService" that first calls login service and get a sessionID and then make call to custom web service.
    • Code:
    • Imports ApexCustomWS.sForceService
      Imports ApexCustomWS.MyCustomApexWS
       
      Public Class Form1
          Public Sub callCustomApexService()
              Dim stub As New ApexCustomWS.sForceService.SforceService
              Dim lr As LoginResult
              Dim sh As New ApexCustomWS.sForceService.SessionHeader
       
              'make call to login service to get sessionId
              lr = stub.login("your_username_here", "your_Password+SecurityToken")        sh.sessionId = lr.sessionId
              stub.Url = lr.serverUrl
              stub.SessionHeaderValue = sh
       
              'Create stub to call custom web service
              Dim myserviceStub As New MyCustomApexWS.KartikServiceService
              myserviceStub.SessionHeaderValue = New MyCustomApexWS.SessionHeader
              myserviceStub.SessionHeaderValue.sessionId = sh.sessionId
       
              MsgBox(myserviceStub.hello("KARTIK"))
       
          End Sub
          Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
              callCustomApexService()
          End Sub
      End Class
Output of above code will be a MessageBox when the Winform will load in memory.