LANSA Integrator JSON Headers
LANSA Integrator JSON Headers
Using LANSA Integrator Version 14.2 on IBMi and loading the service HTTPOutboundJSONBindService.
According the LANSA Integrator documentation the SET PROPERTIES is valid to use with that service to create header field/value to send with the JSON.
I populate the property name (Authorization) and value (Bearer + Token) into two fields in a list.
* Set Properties
Clr_List Named(#PLST)
Change Field(#PNME) To('''Authorization''')
Change Field(#PVAL) To('Bearer ' + #WSTOKEN)
Add_Entry To_List(#PLST)
#JSMXCMD := 'SET PROPERTY(*LIST) SERVICE_LIST(PNAME,PVAL)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMXSTS #JSMXMSG #PLST)
All goes well except the SEND command.
In the tracefile HTTP_PROTOCOL.TXT I see two Authorization lines instead of one:
POST /v2/shipments/DEVDOCS/BOOK HTTP/1.1
Host: accept-api.transsmart.com
User-Agent: LANSA-UserAgent/14.2.0 (Server)
Content-Type: application/json; charset=utf-8
Content-Length: 3939
X-User-Agent-Locale: nl_BE
Authorization: Basic dHJhbnNzbWFydEBjYXNhc2hvcHMuY29tOkp5SHJmVDdF
Authorization: Bearer eyJhbGciOiJIUzUxMiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAAAL1ZbW8aORD-Kys-3UlJWiAkkE8lkOQqAUUs7el6iSqzOwtWvPbK9ublovz3G78AC-3daU16VaQutseeeTzvfmmUCuS3QoqMMmhcNF5u7cjH9LZx0T5vnnXbR7cNkiSi5NoOdlq9bvP8yC0bE8pw7LahJeFK5UTqDwlRRK1EoU4Skd82_MrpSmiBS3nJGA5xkoMlnG8I7dKCKPUoZGrnFt12p73o9bJeK2mSNOlkaaudtVvp- ...
And in the HTTP_RESPONSE_CONTENT.TXT file :
token layout error, must be 'Bearer <token>' .
How can I replace or overwrite the first line with the new one?
According the LANSA Integrator documentation the SET PROPERTIES is valid to use with that service to create header field/value to send with the JSON.
I populate the property name (Authorization) and value (Bearer + Token) into two fields in a list.
* Set Properties
Clr_List Named(#PLST)
Change Field(#PNME) To('''Authorization''')
Change Field(#PVAL) To('Bearer ' + #WSTOKEN)
Add_Entry To_List(#PLST)
#JSMXCMD := 'SET PROPERTY(*LIST) SERVICE_LIST(PNAME,PVAL)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMXSTS #JSMXMSG #PLST)
All goes well except the SEND command.
In the tracefile HTTP_PROTOCOL.TXT I see two Authorization lines instead of one:
POST /v2/shipments/DEVDOCS/BOOK HTTP/1.1
Host: accept-api.transsmart.com
User-Agent: LANSA-UserAgent/14.2.0 (Server)
Content-Type: application/json; charset=utf-8
Content-Length: 3939
X-User-Agent-Locale: nl_BE
Authorization: Basic dHJhbnNzbWFydEBjYXNhc2hvcHMuY29tOkp5SHJmVDdF
Authorization: Bearer eyJhbGciOiJIUzUxMiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAAAL1ZbW8aORD-Kys-3UlJWiAkkE8lkOQqAUUs7el6iSqzOwtWvPbK9ublovz3G78AC-3daU16VaQutseeeTzvfmmUCuS3QoqMMmhcNF5u7cjH9LZx0T5vnnXbR7cNkiSi5NoOdlq9bvP8yC0bE8pw7LahJeFK5UTqDwlRRK1EoU4Skd82_MrpSmiBS3nJGA5xkoMlnG8I7dKCKPUoZGrnFt12p73o9bJeK2mSNOlkaaudtVvp- ...
And in the HTTP_RESPONSE_CONTENT.TXT file :
token layout error, must be 'Bearer <token>' .
How can I replace or overwrite the first line with the new one?
-
caseywhite
- Posts: 192
- Joined: Thu May 26, 2016 1:17 am
Re: LANSA Integrator JSON Headers
What does your #JSMXCMD look like for the SEND command? Are you using the USER or PASSWORD keyword of the command? If you are that could be the issue.
-
Theo de Bruin
- Posts: 29
- Joined: Wed Feb 10, 2016 8:41 pm
Re: LANSA Integrator JSON Headers
Hi Casey,
You have given the correct solution: Do NOT use user or password in the SEND command !
Furthermore note that the defintion of the field (in this case #PVAL) has sufficient length to accommodate for the
Bearer Token, so advice is to set the length of the field at least to 512
Bearer Token, so advice is to set the length of the field at least to 512
-
faridah.belandres
- Posts: 11
- Joined: Wed Jul 13, 2016 1:57 pm
Re: LANSA Integrator JSON Headers
Hi,
I have a question related to HTTPInboundJSONBindService.
I was reading this page earlier and saw that KoenDP was able to set the Authorization using:
#JSMXCMD := 'SET PROPERTY(*LIST) SERVICE_LIST(PNAME,PVAL)'
I was wondering if we could get the (inbound) Authorization using the : GET PROPERTY(*LIST) command ?
I tried this code earlier:
It was able to get the other properties (ex. Content-Type, Accept, etc) in the header except for the Authorization?
I included Authorization in my Postman (request) Header.
Could you advise if I missed anything?
Thank you in advance,
Faridah
I have a question related to HTTPInboundJSONBindService.
I was reading this page earlier and saw that KoenDP was able to set the Authorization using:
#JSMXCMD := 'SET PROPERTY(*LIST) SERVICE_LIST(PNAME,PVAL)'
I was wondering if we could get the (inbound) Authorization using the : GET PROPERTY(*LIST) command ?
I tried this code earlier:
Code: Select all
#JSMXCMD := "GET PROPERTY(*LIST) SERVICE_LIST(PNAME,PVAL)"
Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMXSTS #JSMXMSG #LS_PROPERTIES)
Selectlist Named(#LS_PROPERTIES)
#LW3MSGTXT := "(PROPERTY): " + #PNAME + " - " + #PVAL
Execute Subroutine(CHECK) With_Parms(#JSMXSTS #JSMXMSG)
Insert Fields(#WAMNAM #LW3MSGTXT) To_File(LW3DEBUG) Io_Error(*NEXT) Val_Error(*NEXT)
EndselectI included Authorization in my Postman (request) Header.
Could you advise if I missed anything?
Thank you in advance,
Faridah
Re: LANSA Integrator JSON Headers
I am using HTTPOutboundJSONBindService to send a request to Fedex to get the days in transit info. I am getting the below error when I try to pass the Bearer token.. What does it mean? Should I need to define something in the JSON Binding Wizard (Refer attachment)?
Command : SET PROPERTY(*LIST) SERVICE_LIST(PNME,PVAL)
Command : ERROR "Unsupported SET command"
Thank You!
Command : SET PROPERTY(*LIST) SERVICE_LIST(PNME,PVAL)
Command : ERROR "Unsupported SET command"
Thank You!
- Attachments
-
- JSON Binding
- Screenshot 2025-11-05 110618.png (42.41 KiB) Viewed 8936 times
-
caseywhite
- Posts: 192
- Joined: Thu May 26, 2016 1:17 am
Re: LANSA Integrator JSON Headers
If you are using RDMLX you should be able to do it this way. Length of FF_PTYVAL would be whatever size you want.
Define Field(#FF_PTYNME) Type(*CHAR) Length(256)
Define Field(#FF_PTYVAL) Type(*CHAR) Length(4096)
Def_List Name(#PTYLST_WL) Fields(#FF_PTYNME #FF_PTYVAL) Type(*WORKING) Entrys(*MAX)
#SA_JSXCMD := 'SET PROPERTY(*LIST)'
Use Builtin(JSMX_COMMAND) With_Args(#SA_JSMHND #SA_JSXCMD) To_Get(#SA_JSMSTS #SA_JSMMSG #PTYLST_WL)
If it still doesn't work can you share a bit more of your code to see in what order you are executing the commands.
Define Field(#FF_PTYNME) Type(*CHAR) Length(256)
Define Field(#FF_PTYVAL) Type(*CHAR) Length(4096)
Def_List Name(#PTYLST_WL) Fields(#FF_PTYNME #FF_PTYVAL) Type(*WORKING) Entrys(*MAX)
#SA_JSXCMD := 'SET PROPERTY(*LIST)'
Use Builtin(JSMX_COMMAND) With_Args(#SA_JSMHND #SA_JSXCMD) To_Get(#SA_JSMSTS #SA_JSMMSG #PTYLST_WL)
If it still doesn't work can you share a bit more of your code to see in what order you are executing the commands.
Re: LANSA Integrator JSON Headers
#JSMXCMD := 'SERVICE_LOAD SERVICE(HTTPOutboundJSONBindService) SERVICE_CONTENT(*HTTP) TRACE(*YES) TRACE_NAME(*FUNCTION)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'LOADSVC')
CONTINUE IF(*JSMERROR)
#JSMXCMD := 'BIND SERVICE(' + #JSMSVCE + ') TYPE(*OUTBOUND) SERVICE_EXCHANGE(*FIELD)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'BIND_SVC')
CLR_LIST NAMED(#PLST)
#PNME := 'Authorization'
#PVAL := 'Bearer ' + #@TOKEN
ADD_ENTRY TO_LIST(#PLST)
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDL 'SET PROPERTY(*LIST)') TO_GET(#JSMSTS #JSMMSG #PLST)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'SET_PLST')
CONTINUE IF(*JSMERROR)
* Set fragment - BODY
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(BODY)
CONTINUE IF(*JSMERROR)
* Set fragment - ACCOUNTNUMBER
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(ACCOUNTNUMBER)
CONTINUE IF(*JSMERROR)
* Set fragment - RATEREQUESTCONTROLPARAMETERS
#@RTDITFL := '1'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RATEREQUESTCONTROLPARAMETERS)
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDSHIPMENT
#@SVCTYP := 'FEDEX_GROUND'
#@PKUTYP := 'DROPOFF_AT_FEDEX_LOCATION'
#@SHPDTTM := '2025-11-08'
#@PKGCNT := 1
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(REQUESTEDSHIPMENT)
CONTINUE IF(*JSMERROR)
CLR_LIST NAMED(#RATELST)
#RATETYP := 'ACCOUNT'
ADD_ENTRY TO_LIST(#RATELST)
#RATETYP := 'LIST'
ADD_ENTRY TO_LIST(#RATELST)
#JSMXCMD := 'SET PROPERTY(*LIST) LIST(RATELST)'
EXECUTE SUBROUTINE(DO_JSMXWL1)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'SET_RATELST')
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDPACKAGELINEITEMS
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(REQUESTEDPACKAGELINEITEMS)
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDPACKAGELINEITEMS
CLR_LIST NAMED(#@WGTLST)
#@WGTUNT := 'LB'
#@WGTVAL := 1
ADD_ENTRY TO_LIST(#@WGTLST)
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(WEIGHT)
CONTINUE IF(*JSMERROR)
* Set fragment - SHIPPER
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(SHIPPER)
CONTINUE IF(*JSMERROR)
* Set fragment - SHIPADDRESS
#@SHPZIP := '80134'
#@SHPCNTY := 'US'
#@SHPSTCD := 'CO'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(SHIPADDRESS)
CONTINUE IF(*JSMERROR)
* Set fragment - RECIPIENT
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RECIPIENT)
CONTINUE IF(*JSMERROR)
* Set fragment - RCPADDRESS
#@RecZIP := '30103'
#@RCPCNTY := 'US'
#@RCPSTCD := 'GA'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RCPADDRESS)
CONTINUE IF(*JSMERROR)
* Execute the CALL for the addressValidation operation.
#JSMXCMD := 'WRITE BINDTRACE(*YES)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'LOADSVC')
CONTINUE IF(*JSMERROR)
#JSMXCMD := 'SEND HOST(' + #JSMURL + ')' + 'URI(' + #@JSMURI + ')' + 'METHOD(POST)' + 'TIMEOUT(' + #@TIMEOUT + ')' + 'BINDTRACE(*YES) SECURE(*YES)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
IF COND(#JSMXSTS *NE OK)
#W_CODE := '9999'
#W_MESG := 'URL Not accessible'
CONTINUE
ENDIF
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'LOADSVC')
CONTINUE IF(*JSMERROR)
#JSMXCMD := 'BIND SERVICE(' + #JSMSVCE + ') TYPE(*OUTBOUND) SERVICE_EXCHANGE(*FIELD)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'BIND_SVC')
CLR_LIST NAMED(#PLST)
#PNME := 'Authorization'
#PVAL := 'Bearer ' + #@TOKEN
ADD_ENTRY TO_LIST(#PLST)
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDL 'SET PROPERTY(*LIST)') TO_GET(#JSMSTS #JSMMSG #PLST)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'SET_PLST')
CONTINUE IF(*JSMERROR)
* Set fragment - BODY
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(BODY)
CONTINUE IF(*JSMERROR)
* Set fragment - ACCOUNTNUMBER
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(ACCOUNTNUMBER)
CONTINUE IF(*JSMERROR)
* Set fragment - RATEREQUESTCONTROLPARAMETERS
#@RTDITFL := '1'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RATEREQUESTCONTROLPARAMETERS)
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDSHIPMENT
#@SVCTYP := 'FEDEX_GROUND'
#@PKUTYP := 'DROPOFF_AT_FEDEX_LOCATION'
#@SHPDTTM := '2025-11-08'
#@PKGCNT := 1
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(REQUESTEDSHIPMENT)
CONTINUE IF(*JSMERROR)
CLR_LIST NAMED(#RATELST)
#RATETYP := 'ACCOUNT'
ADD_ENTRY TO_LIST(#RATELST)
#RATETYP := 'LIST'
ADD_ENTRY TO_LIST(#RATELST)
#JSMXCMD := 'SET PROPERTY(*LIST) LIST(RATELST)'
EXECUTE SUBROUTINE(DO_JSMXWL1)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'SET_RATELST')
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDPACKAGELINEITEMS
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(REQUESTEDPACKAGELINEITEMS)
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDPACKAGELINEITEMS
CLR_LIST NAMED(#@WGTLST)
#@WGTUNT := 'LB'
#@WGTVAL := 1
ADD_ENTRY TO_LIST(#@WGTLST)
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(WEIGHT)
CONTINUE IF(*JSMERROR)
* Set fragment - SHIPPER
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(SHIPPER)
CONTINUE IF(*JSMERROR)
* Set fragment - SHIPADDRESS
#@SHPZIP := '80134'
#@SHPCNTY := 'US'
#@SHPSTCD := 'CO'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(SHIPADDRESS)
CONTINUE IF(*JSMERROR)
* Set fragment - RECIPIENT
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RECIPIENT)
CONTINUE IF(*JSMERROR)
* Set fragment - RCPADDRESS
#@RecZIP := '30103'
#@RCPCNTY := 'US'
#@RCPSTCD := 'GA'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RCPADDRESS)
CONTINUE IF(*JSMERROR)
* Execute the CALL for the addressValidation operation.
#JSMXCMD := 'WRITE BINDTRACE(*YES)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'LOADSVC')
CONTINUE IF(*JSMERROR)
#JSMXCMD := 'SEND HOST(' + #JSMURL + ')' + 'URI(' + #@JSMURI + ')' + 'METHOD(POST)' + 'TIMEOUT(' + #@TIMEOUT + ')' + 'BINDTRACE(*YES) SECURE(*YES)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
IF COND(#JSMXSTS *NE OK)
#W_CODE := '9999'
#W_MESG := 'URL Not accessible'
CONTINUE
ENDIF
-
caseywhite
- Posts: 192
- Joined: Thu May 26, 2016 1:17 am
Re: LANSA Integrator JSON Headers
Strange that it doesn't work.
The only difference in my code is that I don't have SERVICE_CONTENT(*HTTP) in the service load. I don't think that is it but you could try removing it.
What version of LANSA Integrator are you using. I am using 14.0.
The only difference in my code is that I don't have SERVICE_CONTENT(*HTTP) in the service load. I don't think that is it but you could try removing it.
What version of LANSA Integrator are you using. I am using 14.0.
Re: LANSA Integrator JSON Headers
My LI version is 13.2 . I tried removing SERVICE_CONTENT(*HTTP) but got the same result. Should I need to define something in the JSON Binding Wizard to include the headers ?
-
caseywhite
- Posts: 192
- Joined: Thu May 26, 2016 1:17 am
Re: LANSA Integrator JSON Headers
I found some old documentation before the OutboundJSON bind existed and the SET command has always been supported for the header.
You don't need to do anything in the binding Wizard.
You could try to use the HTTPService instead of the HTTPOutboundJSON bind service and then use the OutboundJSONBind handler. Maybe there is a bug in 13.2 that is preventing the SET from working.
You don't need to do anything in the binding Wizard.
You could try to use the HTTPService instead of the HTTPOutboundJSON bind service and then use the OutboundJSONBind handler. Maybe there is a bug in 13.2 that is preventing the SET from working.
Re: LANSA Integrator JSON Headers
Thanks for the suggestion. Now I got passed the header property issue but getting the below error. Jar looks good.
Command : SEND HOST(APIS-SANDBOX.FEDEX.COM) SECURE(*YES) URI(/rate/v1/rates/quotes) HANDLER(FdxDaysInTransitRequestService) TIMEOUT(60) METHOD(POST)
Command handler resource is missing
Command : ERROR "Transaction incorrecte, pas de classe contenu du gestionnaire" Command handler resource is missing
Here is the code:
#JSMXCMD := 'SERVICE_LOAD SERVICE(HTTPService) SERVICE_CONTENT(*HTTP) TRACE(*YES) TRACE_NAME(*FUNCTION)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'LOADSVC')
CONTINUE IF(*JSMERROR)
#JSMXCMD := 'BIND SERVICE(' + #JSMSVCE + ') TYPE(*OUTBOUND) SERVICE_EXCHANGE(*FIELD)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'BIND_SVC')
* Set fragment - ACCOUNTNUMBER
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(ACCOUNTNUMBER)
CONTINUE IF(*JSMERROR)
* Set fragment - RATEREQUESTCONTROLPARAMETERS
#@RTDITFL := '1'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RATEREQUESTCONTROLPARAMETERS)
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDSHIPMENT
#@SVCTYP := 'FEDEX_GROUND'
#@PKUTYP := 'DROPOFF_AT_FEDEX_LOCATION'
#@SHPDTTM := '2025-11-08'
#@PKGCNT := 1
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(REQUESTEDSHIPMENT)
CONTINUE IF(*JSMERROR)
CLR_LIST NAMED(#RATELST)
#RATETYP := 'ACCOUNT'
ADD_ENTRY TO_LIST(#RATELST)
#RATETYP := 'LIST'
ADD_ENTRY TO_LIST(#RATELST)
#JSMXCMD := 'SET PROPERTY(*LIST) LIST(RATELST)'
EXECUTE SUBROUTINE(DO_JSMXWL1)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'SET_RATELST')
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDPACKAGELINEITEMS
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(REQUESTEDPACKAGELINEITEMS)
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDPACKAGELINEITEMS
CLR_LIST NAMED(#@WGTLST)
#@WGTUNT := 'LB'
#@WGTVAL := 1
ADD_ENTRY TO_LIST(#@WGTLST)
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(WEIGHT)
CONTINUE IF(*JSMERROR)
* Set fragment - SHIPPER
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(SHIPPER)
CONTINUE IF(*JSMERROR)
* Set fragment - SHIPADDRESS
#@SHPZIP := '80134'
#@SHPCNTY := 'US'
#@SHPSTCD := 'CO'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(SHIPADDRESS)
CONTINUE IF(*JSMERROR)
* Set fragment - RECIPIENT
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RECIPIENT)
CONTINUE IF(*JSMERROR)
* Set fragment - RCPADDRESS
#@RCPZIP := '30103'
#@RCPCNTY := 'US'
#@RCPSTCD := 'GA'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RCPADDRESS)
CONTINUE IF(*JSMERROR)
CLR_LIST NAMED(#PLST)
#PNME := 'Authorization'
#PVAL := 'Bearer ' + #@TOKEN
ADD_ENTRY TO_LIST(#PLST)
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDL 'SET PROPERTY(*LIST)') TO_GET(#JSMSTS #JSMMSG #PLST)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'SET_PLST')
CONTINUE IF(*JSMERROR)
* Execute the CALL for the addressValidation operation.
#JSMXCMD := 'WRITE BINDTRACE(*YES)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'LOADSVC')
CONTINUE IF(*JSMERROR)
#JSMXCMD := 'SEND HANDLER(FdxDaysInTransitRequestService) HOST(' + #JSMURL + ')' + 'URI(' + #@JSMURI + ')' + 'METHOD(POST)' + 'TIMEOUT(' + #@TIMEOUT + ')' + 'SECURE(*YES)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
IF COND(#JSMXSTS *NE OK)
#W_CODE := '9999'
#W_MESG := 'URL Not accessible'
CONTINUE
ENDIF
Command : SEND HOST(APIS-SANDBOX.FEDEX.COM) SECURE(*YES) URI(/rate/v1/rates/quotes) HANDLER(FdxDaysInTransitRequestService) TIMEOUT(60) METHOD(POST)
Command handler resource is missing
Command : ERROR "Transaction incorrecte, pas de classe contenu du gestionnaire" Command handler resource is missing
Here is the code:
#JSMXCMD := 'SERVICE_LOAD SERVICE(HTTPService) SERVICE_CONTENT(*HTTP) TRACE(*YES) TRACE_NAME(*FUNCTION)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'LOADSVC')
CONTINUE IF(*JSMERROR)
#JSMXCMD := 'BIND SERVICE(' + #JSMSVCE + ') TYPE(*OUTBOUND) SERVICE_EXCHANGE(*FIELD)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'BIND_SVC')
* Set fragment - ACCOUNTNUMBER
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(ACCOUNTNUMBER)
CONTINUE IF(*JSMERROR)
* Set fragment - RATEREQUESTCONTROLPARAMETERS
#@RTDITFL := '1'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RATEREQUESTCONTROLPARAMETERS)
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDSHIPMENT
#@SVCTYP := 'FEDEX_GROUND'
#@PKUTYP := 'DROPOFF_AT_FEDEX_LOCATION'
#@SHPDTTM := '2025-11-08'
#@PKGCNT := 1
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(REQUESTEDSHIPMENT)
CONTINUE IF(*JSMERROR)
CLR_LIST NAMED(#RATELST)
#RATETYP := 'ACCOUNT'
ADD_ENTRY TO_LIST(#RATELST)
#RATETYP := 'LIST'
ADD_ENTRY TO_LIST(#RATELST)
#JSMXCMD := 'SET PROPERTY(*LIST) LIST(RATELST)'
EXECUTE SUBROUTINE(DO_JSMXWL1)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'SET_RATELST')
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDPACKAGELINEITEMS
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(REQUESTEDPACKAGELINEITEMS)
CONTINUE IF(*JSMERROR)
* Set fragment - REQUESTEDPACKAGELINEITEMS
CLR_LIST NAMED(#@WGTLST)
#@WGTUNT := 'LB'
#@WGTVAL := 1
ADD_ENTRY TO_LIST(#@WGTLST)
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(WEIGHT)
CONTINUE IF(*JSMERROR)
* Set fragment - SHIPPER
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(SHIPPER)
CONTINUE IF(*JSMERROR)
* Set fragment - SHIPADDRESS
#@SHPZIP := '80134'
#@SHPCNTY := 'US'
#@SHPSTCD := 'CO'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(SHIPADDRESS)
CONTINUE IF(*JSMERROR)
* Set fragment - RECIPIENT
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RECIPIENT)
CONTINUE IF(*JSMERROR)
* Set fragment - RCPADDRESS
#@RCPZIP := '30103'
#@RCPCNTY := 'US'
#@RCPSTCD := 'GA'
EXECUTE SUBROUTINE(SET_FRAG) WITH_PARMS(RCPADDRESS)
CONTINUE IF(*JSMERROR)
CLR_LIST NAMED(#PLST)
#PNME := 'Authorization'
#PVAL := 'Bearer ' + #@TOKEN
ADD_ENTRY TO_LIST(#PLST)
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDL 'SET PROPERTY(*LIST)') TO_GET(#JSMSTS #JSMMSG #PLST)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'SET_PLST')
CONTINUE IF(*JSMERROR)
* Execute the CALL for the addressValidation operation.
#JSMXCMD := 'WRITE BINDTRACE(*YES)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXSTS #JSMXMSG 'LOADSVC')
CONTINUE IF(*JSMERROR)
#JSMXCMD := 'SEND HANDLER(FdxDaysInTransitRequestService) HOST(' + #JSMURL + ')' + 'URI(' + #@JSMURI + ')' + 'METHOD(POST)' + 'TIMEOUT(' + #@TIMEOUT + ')' + 'SECURE(*YES)'
EXECUTE SUBROUTINE(DO_JSMXCMD)
IF COND(#JSMXSTS *NE OK)
#W_CODE := '9999'
#W_MESG := 'URL Not accessible'
CONTINUE
ENDIF
Re: LANSA Integrator JSON Headers
Just a quick question, as I am not familiar with the specifics for "SEND HOST", but does the handler utilize a properties file that might have changed or be missing? For the integrator services I utilize, I have missed updating the properties file (in IFS = LANSA_install/jsm/instance/properties/xxx) and seen a similar error.
Arlyn Dale
Servias LLC
Servias LLC
Re: LANSA Integrator JSON Headers
Thanks Arlyn for your input. I have published all the 4 properties . Also, I verified that it is in the jsm library as well.