Title: Post a Request to a Web Service Post by: Jean G. on October 28, 2010, 10:47:56 pm Hi,
I am new to using web services and xml and I hope someone can help. I am trying to write a client application that will consume a web service. The first thing I need to do is connect to the service using a url and post a request with the login info in an xml file. When I run the test program I get the following error message. ERROR:-15553 (Configuration needed to perform HTTPS connection.) Below is the test program I wrote and the output from my displays. It is stopping at the CALL req.doTextRequest statement. IMPORT COM IMPORT XML MAIN CALL test() EXIT PROGRAM END MAIN FUNCTION test() DEFINE req com.HTTPRequest DEFINE resp com.HTTPResponse DEFINE doc xml.DomDocument TRY LET req = com.HTTPRequest.Create("https://anscert.drfirst.com/getURL") DISPLAY "The URL is created." --CALL req.setMethod("POST/getURL HTTP/1.0") CALL req.setMethod("POST") DISPLAY "The Post Method is set." CALL req.setCharset("UTF-8") CALL req.setKeepConnection(0) DISPLAY "The Keep Connection is set." CALL req.setTimeOut(120) DISPLAY "The Time Out is set." CALL req.setMaximumResponseLength(32768) DISPLAY "The Max Length is set." DISPLAY "Before the doTextRequest Call." CALL req.doTextRequest('<?xml version="1.0" encoding="UTF-8"?><RCExtRequest><Caller><VendorName>vendormc9898</VendorName><VendorPassword>accountmc9898</VendorPassword><Application>MM EMR</Application><Version>1</Version><PracticeName>mc9898</PracticeName><Station>Station A</Station></Caller><RcopiaPracticeUsername>mc9898</RcopiaPracticeUsername><Request><Command>get_url</Command></Request></RCExtRequest>') DISPLAY "Do text request." LET resp = req.getResponse() IF resp.getStatusCode() != 200 THEN DISPLAY "HTTP Error ("||resp.getStatusCode()||") ",resp.getStatusDescription() ELSE DISPLAY "HTTP Response is OK." END IF CATCH DISPLAY "ERROR:",STATUS||" ("||SQLCA.SQLERRM||")" END TRY END FUNCTION Result: The URL is created. The Post Method is set. The Keep Connection is set. The Time Out is set. The Max Length is set. Before the doTextRequest Call. ERROR:-15553 (Configuration needed to perform HTTPS connection.) Thanks, Jean Title: Re: Post a Request to a Web Service Post by: . on October 29, 2010, 03:15:45 pm Hi Jean,
In fact you don't need to write such code, you just have to use the GWS "fglwsdl" tool to achieve what you want. In your case you will have to do a "fglwsdl" of your wsdl; it will generate a 4gl file which will allow you to access to your services. I invite you to take a look at GWS documentation and especially at the tutorial to write your GWS client application. https://4js.com/online_documentation/fjs-gws-2.30.01-manual-html/ https://4js.com/online_documentation/fjs-gws-2.30.01-manual-html/User/WseClientTutorial.html Otherwise, for this kind of issues I think you can ask to your support center to get help. Best regards, Title: Re: Post a Request to a Web Service Post by: Reuben B. on November 01, 2010, 02:40:12 am Guney,
I'm puzzled by your answer. Isn't the issue to do with the configuration needed for HTTPS instead of HTTP. In which case I'd look at https://4js.com/techdocs/genero/gws/devel/DocRoot/User/WseSSLClientTutorial.html in order to create the certificate files and amend FGLPROFILE accordingly Reuben Title: Re: Post a Request to a Web Service Post by: Jean G. on November 01, 2010, 10:11:45 pm They don't have the wsdl files so that is another problem I am facing. I am thinking I will have to create xsd files and use the xml writer and reader to write the functions to do the request and responses.
The error was because I didn't have the certificates created for the client. Thanks for you help. Title: Re: Post a Request to a Web Service Post by: Reuben B. on November 01, 2010, 11:13:04 pm Thanks for letting us know. You are possibly entering the world of RESTful Web Services. http://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services
A few years back I took the demo we provide in $FGLDIR/demo/WebServices/calc which is an example using SOAP, and modified it to be REST based. The source is available here http://code.google.com/p/sourcefourjs/downloads/detail?name=calcrest_1_0.zip . One day I should take that example and modify it to validate the data in/out using an xsd file using the xml.DomDocument.validate method. There are quite a REST based Web Services out there. If you want, have a go at creating a 4gl client to interact with ... http://code.google.com/apis/maps/documentation/geocoding/index.html http://developer.yahoo.com/search/web/V1/webSearch.html I've also got an example somewhere interacting with a REST web service that sends text messages to your phone. ... these can all be interacted with using the low-level methods available in the com and xml libraries. Reuben Title: Re: Post a Request to a Web Service Post by: Jean G. on November 02, 2010, 08:41:18 pm Reuben,
I will take a look at the links you have provided and see if they can help me move forward. I didn't know there was such a thing as RESTful Web Services. I am new to this so I have alot to learn. Thanks, Jean Title: Re: Post a Request to a Web Service Post by: Jean G. on November 03, 2010, 02:39:22 pm Hi Reuben,
I am looking at the client code in calcrest and I see where you are assigning the url string, but I don't recognize the function call SFMT. Can you point me to some documentation? Thanks, Jean Title: Re: Post a Request to a Web Service Post by: . on November 03, 2010, 03:06:42 pm Hi Jean,
actually it's more an operator than a function: https://4js.com/techdocs/genero/fgl/devel/DocRoot/User/Operators.html#OP_SFMT Regards Title: Re: Post a Request to a Web Service Post by: Sisavanh S. on November 03, 2010, 03:48:03 pm Hi Jean,
You have opened a ticket to your local support center. I've just given them the response. There are 2 points you were missing: - doing a "get" request - the url parameter. Your url should be https://myserver/xxx?xml=mydata You can achieve this with: CALL req.doFormEncodedRequest("xml=" || doc.saveToString(),TRUE) More details in your local support center response. Many regards, Sisa. Title: Re: Post a Request to a Web Service Post by: Jean G. on November 03, 2010, 04:29:49 pm Hi Sisa,
I just discovered this about 10 minutes go, this lets me that I am definitely on the right track. Thanks, Jean Title: Re: Post a Request to a Web Service Post by: Reuben B. on November 03, 2010, 09:11:03 pm Hi Jean, actually it's more an operator than a function: https://4js.com/techdocs/genero/fgl/devel/DocRoot/User/Operators.html#OP_SFMT Regards Pierre-Nicolas, There is an english saying, "give a man a fish you have feed him for today, teach a man to fish and you have feed him for a lifetime", Jean, If you're using the HTML documentation there is an index page https://4js.com/techdocs/genero/fgl/devel/DocRoot/User/SearchIndex.html If you're using the PDF documentation you can use the search facilities of the PDF reader. Unfortunately if you are not sure if something is in the FGL, GDC, GAS, Web Services section of the documentation then you may have to repeat that search 4 times. Fortunately if you are using Genero Studio it comes with all the documentation and you can simply press F1, type the expression into the search field, and it will search across all the documentaton for you. Finally you'll see that the URL's we use for the documentation normally start https://4js.com/techdocs, that points to the documentation that is being worked on, rather than the documentation for a specific version that you can find here https://4js.com/en/download/documentation. As all this documentation is on-line, you can also search by entering something like "site:4js.com search-phrase" into Google As for SFMT, I like to use it rather than cluttering the code with a mess of quotes and commas and trying to figure out what is a string and what is a parameter. It also helps with localisation where the order of the parameters could be in a different order. Reuben |