Jump to: navigation, search

Difference between revisions of "EDT:Third Party Service Introduction"

Line 64: Line 64:
 
== Call the 3rd Party Service  ==
 
== Call the 3rd Party Service  ==
  
'''Call Service Function''' <pre>  
+
'''Call Service Function'''
 +
<pre>  
  
function invokeService( e Event in)<br>&nbsp; &nbsp; case( serviceType.getSelection())<br>&nbsp; &nbsp; &nbsp; &nbsp; when( 1 )<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; srvc_GeoName IGeoName?{@Resource{}};<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (serviceTypeCombo.getSelection() == 1)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; call srvc_GeoName.search("London") returning to handleReturn onexception Exceptionhandler;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; call srvc_GeoName.searchJSON("London") returning to handleReturn onexception Exceptionhandler;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end<br>&nbsp; &nbsp; &nbsp; &nbsp; end<br>&nbsp; &nbsp; end
+
function invokeService( e Event in)
 
+
    srvc_GeoName IGeoName?{@Resource{}};
</pre>
+
&nbsp; &nbsp; if (serviceTypeCombo.getSelection() == 1)
 +
&nbsp; &nbsp;     call srvc_GeoName.search("London") returning to handleReturn onexception Exceptionhandler;
 +
&nbsp; &nbsp; else
 +
&nbsp; &nbsp; &nbsp; &nbsp; call srvc_GeoName.searchJSON("London") returning to handleReturn onexception Exceptionhandler;
 +
&nbsp; &nbsp; end
 +
end  
  
 +
</pre>
 
<br>  
 
<br>  
  
'''Handle Return Function''' <pre>  
+
'''Handle Return Function'''
 
+
<pre>  
function handleReturn(resultRecord Geonames in)<br>&nbsp; &nbsp; i int = 0;<br>&nbsp; &nbsp; while (i&lt;resultRecord.geoname.getSize())<br>&nbsp; &nbsp; &nbsp; &nbsp; i += 1;<br>&nbsp; &nbsp; &nbsp; &nbsp; resultList.appendElement(resultRecord.geoname[i]);<br>&nbsp; &nbsp; end<br> end
+
  
 +
function handleReturn(resultRecord Geonames in)
 +
&nbsp; &nbsp; i int = 0;
 +
&nbsp; &nbsp; while (i&lt;resultRecord.geoname.getSize())
 +
&nbsp; &nbsp; &nbsp; &nbsp; i += 1;
 +
&nbsp; &nbsp; &nbsp; &nbsp; resultList.appendElement(resultRecord.geoname[i]);
 +
&nbsp; &nbsp; end
 +
end
 
</pre>  
 
</pre>  
 
 
<br>  
 
<br>  
  
'''Handle Exception Function''' <pre>  
+
'''Handle Exception Function'''
 
+
<pre>  
private function Exceptionhandler( exception AnyException in)<br>&nbsp; &nbsp; handleException();<br> end
+
  
 +
private function Exceptionhandler( exception AnyException in)
 +
&nbsp; &nbsp; handleException();
 +
end
 
</pre>  
 
</pre>  
 
 
[[Category:EDT]]
 
[[Category:EDT]]

Revision as of 22:52, 6 February 2012

 Introduction

Web service is an important web development technical. EGL also supports it. And with the help of EDT, you can easily build up your web service applications.
And also, there are lots of public 3rd party services provided by Google, Yahoo and many other companies. EGL can easily adopt there 3rd party services as well. Here we made an introduction of 3rd party services in EDT.

Create Record for 3rd Party Service

There are two protocols for response data. The XML data or JSON data. If the response data is XML structured, then you need to create the “Record from XML”. The JSON structured data use the “Record from JSON”. For the wizards of these two types are basically the same, we use the “Record from JSON” wizard as demo.


1. Open “New EGL Record” wizard by Right Click on Project/Package --> New --> Record.


2. Fill the EGL Record page of this wizard

The “Source folder” field filled with the EGLSource folder of the project you selected. If you want to change this field, just open the browser by clicking the “Browse…” button at the right of this field

The “Package” field should filled with the package you right click on. If you open this wizard by right clicking on project node, then the “Package” field would be empty. You can also browse the target package by clicking the “Browse…” button at the right of this field. Otherwise the record will be created to the default package.

In this demo, we use the “Record from JSON” wizard as demo. So select the “Record from JSON” template. Then click “Next”.

3. Fill the Records from JSON page

You will see three radio selections in this page. They are “Create from a URL”, “Create from a file” and “Create from a string”. For the third party services are published to the internet, we can get them from a URL. So we use the “Create from a URL” selection when creating record for third party services.

Select Create record from a URL. Input the third party REST service URL to the text field. Then click next, the record will be created automatically.

4. Check the Record Creation result.

When you fill the right third party URL in last page, you should have this result page as the picture shows. The record in Preview TextArea is the third party record created automatically by wizard. The TextArea below shows all errors & warnings. You may check the details by these two information TextAreas. Then click “Finish” to end this wizard. You will find the record created in the target package of the target Source folder. Just open it by source editor to take a review.


Create Interface for 3rd Party Service

Here is a sample interface.

Interface IGeoName     
    function search(query string in) returns(GeoNames) {@GetRest {uriTemplate="http://ws.geonames.org/search?q={query}", responseFormat=XML} };
    function searchJSON(query string in) returns(GeoNames) {@GetRest {uriTemplate="http://ws.geonames.org/searchJSON?q={query}", responseFormat=JSON}};
End 


There are @GetRest and @PostRest. It determined by the third party service you called. And the responseFormat is the XML/JSON issue we mentioned before.


The uriTemplate is the third party service URL. EGL use {} in this URL to link with the input params in interface input. In this sample, parameter “query” in interface declaration will link to the {query} in ruiTemplate.


The returns declaration defines the return type of this interface, the GeoNames in sample is the record we created in last section.

Bind resource for 3rd Party Service

For details of Resource Binding, see Resource Binding Introduction.

Notes: If you have set the uriTemplate field in interface declarations, then the “Base URI” field in Deployment Descriptor file can be empty. EDT will concat uriTemplate behind the Base URI as the final URL.


Call the 3rd Party Service

Call Service Function

 

function invokeService( e Event in)
    srvc_GeoName IGeoName?{@Resource{}};
    if (serviceTypeCombo.getSelection() == 1)
        call srvc_GeoName.search("London") returning to handleReturn onexception Exceptionhandler;
    else
        call srvc_GeoName.searchJSON("London") returning to handleReturn onexception Exceptionhandler;
    end
end 


Handle Return Function

 

function handleReturn(resultRecord Geonames in)
    i int = 0;
    while (i<resultRecord.geoname.getSize())
        i += 1;
        resultList.appendElement(resultRecord.geoname[i]);
    end
end 


Handle Exception Function

 

private function Exceptionhandler( exception AnyException in)
    handleException();
end