function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
rvgrvg 

[{"message":"Could not find a match for URL /getservice1","errorCode":"NOT_FOUND"}]

Hi,

 

I am trying to call REST API from Salesforce Developer Org A ( Source ) to Salesforce Developer Org B ( Target ) but I am running into issue. I went through multiple sites but am getting the same error message. I do get the access_token and have also registered my company domain through My Domain and published it. I still am not able to figure out why I am not able to call the REST API.  Its not able to get to /services/apexrest/getservice1.

 

In Source

<Page>

<apex:page controller="OAuthRestController" action="{!login}">

<apex:form >
<apex:pageBlock >
<apex:pageBlockSection >
<apex:pageBlockSectionItem >
<apex:outputLabel for="name">Name</apex:outputLabel>
<apex:inputText id="name" value="{!name}"/>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
</apex:pageBlock>

<apex:commandButton action="{!submit}" value="Submit"> </apex:commandButton>
<br/><br/> {!getname}
</apex:form>

Get name says "{!getname}"
</apex:page>

 

 

<Created an OAuthRestController>

 

public abstract class OAuthRestController 
{
    static String clientId = '3MVG9A2kN3Bn17huzc3k8LPsmtAMW1btHIyy8rp1RICmQMJB2dr9MnGgeWpKF_66yh2Azg9vDzwRFUVMfcjmp'; // Set this in step 3
    static String clientSecret = '9138556916389229822'; // Set this in step 3
    //static String redirectUri = 'https://mytestdevorg1-dev-ed.my.salesforce.com/apex/RestCall'; 
    static String redirectUri='https://mytestdevorg1-developer-edition.na15.force.com/apex/RestCall';// YOUR PAGE URL IN THE SOURCE ORG
    //static String loginUrl = 'https://mytestdomainorg2-dev-ed.my.salesforce.com'; // YOUR MY DOMAIN URL IN THE TARGET ORG
static String loginUrl = 'https://mytestdevorg2-developer-edition.na15.force.com'; // YOUR MY DOMAIN URL IN THE TARGET ORG    
    static String cookieName = 'oauth';

     
     public PageReference login() {
        // Get a URL for the page without any query params
        String url = ApexPages.currentPage().getUrl().split('\\?')[0];
       
        System.debug('url is '+url);

        String oauth = (ApexPages.currentPage().getCookies().get(cookieName) != null ) ?
            ApexPages.currentPage().getCookies().get(cookieName).getValue() : null;
        if (oauth != null) {
            // TODO - Check for expired token
        }
       
        System.debug('oauth='+oauth);
        if (oauth != null) {
            // All done
            return null;
        }
       
        // If we get here we have no token
        PageReference pageRef;
       
        if (! ApexPages.currentPage().getParameters().containsKey('code')) {
            // Initial step of OAuth - redirect to OAuth service
            System.debug('OAuth Step 1');
       
            String authuri = loginUrl+'/services/oauth2/authorize?'+
                'response_type=code&client_id='+clientId+'&redirect_uri='+redirectUri;
                           
            pageRef = new PageReference(authuri);
        } else {
            // Second step of OAuth - get token from OAuth service
            String code = ApexPages.currentPage().getParameters().get('code');

            System.debug('OAuth Step 2 - code:'+code);
               
            String body = 'grant_type=authorization_code&client_id='+clientId+
                '&redirect_uri='+redirectUri+'&client_secret='+clientSecret+
                '&code='+code;
            System.debug('body is:'+body);
               
            HttpRequest req = new HttpRequest();
            req.setEndpoint(loginUrl+'/services/oauth2/token');
            req.setMethod('POST');
            req.setBody(body);
       
            Http h = new Http();
            HttpResponse res = h.send(req);
   
            String resp = res.getBody();
            System.debug('FINAL RESP IS:'+EncodingUtil.urlDecode(resp, 'UTF-8'));
           
            ApexPages.currentPage().setCookies(new Cookie[]{new Cookie(cookieName,
                res.getBody(), null,-1,false)});
                
              

                getNameMethod(name);
       

            // Come back to this page without the code param
            // This makes things simpler later if you end up doing DML here to            // save the token somewhere           
             pageRef = new PageReference(url);
          pageRef.setRedirect(true);
        }
    return pageRef;   }
   

     public String getname {get;set;}
    public String name{get;set;}
    public PageReference submit() 
    {
        getname=getNameMethod(name);
        return null;
    }
    public static String getNameMethod(String name)
    {
        String oauth = (ApexPages.currentPage().getCookies().get(cookieName) != null ) ?
            ApexPages.currentPage().getCookies().get(cookieName).getValue() : null;
       
        JSONObject oauthObj = new JSONObject( new JSONObject.JSONTokener(oauth));
           
        String accessToken = oauthObj.getValue('access_token').str,
               instanceUrl = oauthObj.getValue('instance_url').str;
        System.debug('Accesstoken'+accessToken);
        System.debug('instance URL'+instanceUrl);
        HttpRequest req = new HttpRequest();
 
        req.setMethod('GET');
        String url = 'https://mytestdevorg2-developer-edition.na15.force.com/services/apexrest/getservice1?name='+name;        
        req.setEndpoint(url);
        //req.setHeader('Authorization', 'Bearer '+'00Di0000000YOBY!ARgAQFCfBkwslWt071wORmSsZT9zcQkgwlxfuzXhqwgXNdgAhYiqcLf8r2oSOTsPVwDqeAGbY1YgwXeh2a2IfCCmzxdBoE_4');
        req.setHeader('Authorization', 'OAuth '+accessToken);
        system.debug(req);
        
        Http http = new Http();
 
        HTTPResponse res = http.send(req);

        System.debug('BODY: '+res.getBody());
        System.debug('STATUS:'+res.getStatus());
        System.debug('STATUS_CODE:'+res.getStatusCode());
       
        return res.getBody();
    }
}

 

In Target:

 

@RestResource(urlMapping='/getservice1/')
global class with sharing getservice1
{
    @HttpGet
    global static String getservice1()
    {
        String name = RestContext.request.params.get('name');
        return 'Hello '+name+',you have invoked your Rest Call';
    }
}

 

I also tried using curl but somehow its not getting to the path /services/apexrest/getservice1. I have also added the target in the Remote Site Settings but still its failing.