Hi Roshan, I'm not developing any APIs in this particular project. This is merely a client side application that would utilize the existing Import/Export APIs. GoLang was selected since it allows creating binaries hence executing directly; sparing the use of any virtual runtime.
Thanks Menuka *Menuka Warushavithana* *Software Engineering Intern* *WSO2* *Moblie: + <%2B%2094%2011%202145345%20%C2%A0Ext.%205737> 94 77 6979690* On Mon, Aug 14, 2017 at 9:19 AM, roshan wijesena <roshan86...@gmail.com> wrote: > Hello Menuka, > > It is Interesting to know why we have selected GoLang to develop this API > rather JAVA? Will it work with a JVM OOTB with out installing any > additional libs? > > Regards > Roshan. > > On Mon, Aug 14, 2017 at 1:39 PM, Isuru Haththotuwa <isu...@wso2.com> > wrote: > >> Just to clarify, is this working with POST? >> >> On Mon, Aug 14, 2017 at 9:01 AM, Isuru Haththotuwa <isu...@wso2.com> >> wrote: >> >>> The best way to figure out this would be to debug the MSF4J layer. >>> >>> @Thusitha/Chanaka: Can you please give some input on where to start >>> debugging for this particular case? >>> >>> On Sun, Aug 13, 2017 at 12:54 PM, Menuka Warushavithana <men...@wso2.com >>> > wrote: >>> >>>> Hi, >>>> I'm working on creating a CLI tool for importing and exporting APIs >>>> between different environments (for WSO2 API Manager 3.0.0) using Golang. >>>> >>>> I have an issue with importing APIs. >>>> The following curl command works fine. >>>> *`curl -k -F "file=@exported.zip" -X PUT -H "Authorization: Bearer >>>> <access_token>" https://localhost:9292/api/am/publisher/v1.0/import/apis >>>> <https://localhost:9292/api/am/publisher/v1.0/import/apis>`* >>>> >>>> The problem is with mapping this to Go code. >>>> Here's what I wrote at first. >>>> >>>> func main() { >>>> data, err := os.Open("./exported.zip") >>>> accessToken := "<access_token>" >>>> if err != nil { >>>> fmt.Println("Error oening file") >>>> panic(err) >>>> } >>>> >>>> req, reqErr := http.NewRequest(http.MethodPut, " >>>> https://localhost:9292/api/am/publisher/v1.0/import/apis", data) >>>> if reqErr != nil { >>>> fmt.Println("Error creating request") >>>> panic(reqErr) >>>> } >>>> >>>> req.Header.Add("Content-Type", "multipart/form-data") // response >>>> is 500 with or without this line >>>> req.Header.Add("Authorization", "Bearer "+accessToken) >>>> >>>> tr := &http.Transport{ >>>> TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // for >>>> skipping errors in https >>>> } >>>> >>>> client := &http.Client{Transport: tr} >>>> res, resErr := client.Do(req) >>>> >>>> if resErr != nil { >>>> fmt.Println("Error in response") >>>> panic(resErr) >>>> } >>>> >>>> body, err := ioutil.ReadAll(res.Body) >>>> >>>> fmt.Println("Response:", res) >>>> fmt.Println("Body:", string(body)) >>>> fmt.Println("Status:", res.Status) >>>> >>>> defer res.Body.Close() >>>> } >>>> >>>> This returns a *500 Internal Server Error.* >>>> >>>> But the request works fine with *Postman* client. Therefore, I tried >>>> putting the extra headers generated by Postman in Go code. >>>> >>>> func main() { >>>> url := "https://localhost:9292/api/am/publisher/v1.0" >>>> accessToken := "<access_token>" >>>> >>>> payload := strings.NewReader("------WebKi >>>> tFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; >>>> name=\"file\"; filename=\"./exported.zip\"\r\nContent-Type: >>>> application/zip\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--") >>>> >>>> req, _ := http.NewRequest(http.MethodPut, url, payload) >>>> >>>> req.Header.Add("content-type", "multipart/form-data; >>>> boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW") >>>> req.Header.Add("authorization", "Bearer "+accessToken) >>>> req.Header.Add("cache-control", "no-cache") >>>> >>>> tr := &http.Transport{ >>>> TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // for >>>> skipping errors in https >>>> } >>>> >>>> client := &http.Client{Transport: tr} >>>> resp, _ := client.Do(req) >>>> >>>> if resp != nil { >>>> >>>> body, _ := ioutil.ReadAll(resp.Body) >>>> >>>> fmt.Println(resp) >>>> fmt.Println(string(body)) >>>> } else { >>>> fmt.Println("Null Response") >>>> } >>>> >>>> fmt.Println(resp.Status) >>>> } >>>> >>>> This returns a *405 - Method Not Allowed* >>>> >>>> So, Postman works. Curl works. Go does not. >>>> I googled on 'multipart/form-data' under HTTP, but that didn't help >>>> either. >>>> >>>> Your advice is much appreciated in solving this issue. >>>> >>>> Thanks and Regards >>>> >>>> *Menuka Warushavithana* >>>> *Software Engineering Intern* >>>> *WSO2* >>>> >>>> *Moblie: + <%2B%2094%2011%202145345%20%C2%A0Ext.%205737> 94 77 >>>> 6979690 <077%20697%209690>* >>>> >>>> >>>> >>> >>> >>> -- >>> Thanks and Regards, >>> >>> Isuru H. >>> +94 716 358 048 <071%20635%208048>* <http://wso2.com/>* >>> >>> >>> >> >> >> -- >> Thanks and Regards, >> >> Isuru H. >> +94 716 358 048 <+94%2071%20635%208048>* <http://wso2.com/>* >> >> >> >> _______________________________________________ >> Dev mailing list >> Dev@wso2.org >> http://wso2.org/cgi-bin/mailman/listinfo/dev >> >> >
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev