why i get apikit:router not found 404 error in mule eventhough it requests an already running and deployed api

6k views Asked by At

i have created 2 apis: system and experience for a project. The system had already been deployed into the cloudhub and running successfully. The experience api needs to invoke the system api through a router using the URL:

http://demo-insurance-system-api.us-e2.cloudhub.io and uriparam is :customer and queryparams are:?fname=James&lname=Butt Its working perfectly fine. but when i want to hit the same url from experience api's requester it gives me

ERROR 2020-05-18 01:58:15,217 [[muleinsurance-exp-api].http.requester.requestConfig.04 SelectorRunner] [event: ] org.mule.runtime.core.internal.exception.OnErrorPropagateHandler: 
********************************************************************************
Message               : HTTP OPTIONS on resource 'http://demo-insurance-system-api.us-e2.cloudhub.io' failed: not found (404).
Error type            : HTTP:NOT_FOUND
Element               : muleinsurance-experience-api-main/processors/0 @ muleinsurance-exp-api:muleinsurance-experience-api.xml:17
Element XML           : <apikit:router config-ref="muleinsurance-experience-api-config"></apikit:router>

  (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

the onpremise testing is done in using postman and the experience url is: http://localhost:8081/demoapi/customer?fname=James

the experience api raml is:

#%RAML 1.0
title: muleinsurance-experience-api
version: 1.0.0

traits:
  client-id-required:
    headers:
      client_id:
        type: string
      client_secret:
        type: string

    responses:
      401:
        description: Unauthorized, The client_id or client_secret are not valid or the client does not have access.
      404:
        description: No Record found.
      429:
        description: The client used all of it's request quota for the current period.
      500:
        description: Server error ocurred
      503:
        description: Contracts Information Unreachable.
/demoapi:
  /{searchString}:
      get:
        description: invokes either customer or policy request
        queryParameters:
          fname:
            description: first name
            example: Sumitra
            required: false
            type: string
          lname:
            description: Last name
            example: Ojha
            required: false
            type: string
          dob:
            description: Date of Birth
            example: 1/2/2003
            required: false
            type: string
          customerID:
            description: CustomerID
            example: BU79786
            required: false
            type: string
          policytype:
            description: type of policy taken
            example: Personal Auto
            required: false
            type: string            
        responses:
          200:
            body:
              application/json:
                example: 
                  {"message": "connecting to System API"}

here i am adding the HTTP request xml snippet:

   <choice doc:name="Choice" doc:id="444a5cd6-4aee-441a-8736-2d2fff681e2e" >
            <when expression="#[attributes.uriParams.searchString == 'customer']"> 
                 <http:request method="GET" doc:name="Request" doc:id="30958d05-467a-41b1-bef3-83426359f2aa" url="http://demo-insurance-system-api.us-e2.cloudhub.io"><http:uri-params ><![CDATA[#[output application/java
---
{   customer : attributes.uriParams.searchString}]]]></http:uri-params>
    <http:query-params ><![CDATA[#[output application/java
---
{   fname : vars.fname,
    lname : vars.lname,
    dob : vars.dob}]]]>

kindly point out where i need to improve. thanks in advance.

1

There are 1 answers

0
aled On

The problem is indicated in the error message: HTTP OPTIONS on resource 'http://demo-insurance-system-api.us-e2.cloudhub.io' failed: not found (404).

It looks like your HTTP Request in the experience API is using the HTTP Options method. The RAML indicates that the API only accepts the HTTP GET method. In the XML it should look like: <http:request method="GET" ...