[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Ftpapi Digest, Vol 62, Issue 20



Thanks for the advise on activating the http log, Thomas.

Now then, I suspect the problems occur in the parsing and/or presentation of the response from the web service.  Given that it's not a publicly accessible server, I guess the next step is for me to share the stub, caller, and log data, and hope someone knows what to make of it.  The Northbound Interface shows a fairly extensive set of key/value pairs returned for this request.  It appears from the returned xml in the log that there are indeed many, many key/value pairs.  I would have figured the Stub would return a data structure much like the one sent to the service (e.g., comprised of an integer to indicate the number of pairs, and an array of key/value pairs).  But the Stub does not reflect that.  Perhaps from a failing in the WSDL itself? 

We run version 6.1, with WSDL2RPG 1.14 beta 11.  Httpapi is version 1.24.  Expat was loaded with Httpapi, and appears to be circa 05/2007.
 
Provided below are the stub, caller, and httplog data.

If I don't see a reply before 6 PM (US-Eastern), I'll be back at it on Monday.
Thanks.
   Michael
__________________________________

The Stub source (modified to imbed log on credentials in the URL) is as follows:

      /IF NOT DEFINED(PROTOTYPE_TSTINVEN01)
      *======================================================================
      *  Generated by WSDL2RPG 1.14beta11 / 23.07.2011
      *  Built on Aug 18, 2011 (13:20:52)
      *  Built for V6R1M0
      *  Based on WS_STUB v1.14
      *======================================================================
      *
      *   Please search for 'INFO:' to get basic information how to call
      *   the web service.
      *
      *   Default attachment handling (for demonstration) was added to
      *   WS_STUB but is disabled by default.
      *
      *   In order to enable or disable default attachment handling you have
      *   to define or undefine the following compiler condition name:
      *      DEFAULT_ATTACHMENT_HANDLING
      /UNDEFINE DEFAULT_ATTACHMENT_HANDLING
      *
      *   By default attachments are stored in folder:
      *      '/tmp/attachments'
      *
      *   You can change the default attachment folder by calling the
      *   following procedure before calling the web service:
      *      Inventory_setAttachmentFolder()
      *
      *   Default attachment handling was added to demonstrate how
      *   to manage attachments. Please search the generate stub
      *   module for 'TODO:' to see what code belongs to attachment
      *   support.
      *
      *   Log4rpg:
      /UNDEFINE LOGGING_SERVICE
      *
      *======================================================================
      *   Pre-Compiler tags used by STRPREPRC to retrieve creation
      *   commands from the source member.
      * ---------------------------------------------------------------------
      * >>PRE-COMPILER<<
      *   >>CRTCMD<< CRTRPGMOD    MODULE(&LI/&OB) +
      *                           SRCFILE(&SL/&SF) +
      *                           SRCMBR(&SM);
      *   >>COMPILE<<
      *     >>PARM<< TRUNCNBR(*NO);
      *     >>PARM<< DBGVIEW(*LIST);
      *   >>END-COMPILE<<
      *   >>EXECUTE<<
      *   >>CMD<<    CRTSRVPGM +
      *              SRVPGM(&LI/&OB) +
      *              MODULE(&LI/&OB) +
      *              EXPORT(*ALL) +
      *              BNDSRVPGM(*LIBL/WSDL2RPGRT +
      *                        *LIBL/MIME     +
      *                        *LIBL/HTTPMIME +
      *                        *LIBL/BASICS1) +
      *              TEXT('+
      *              Web Service: getProfiles()+
      *              ') +
      *              DETAIL(*BASIC);
      * >>END-PRE-COMPILER<<
      *======================================================================
     H NOMAIN
     H DEBUG
     H BNDDIR('HTTPAPI' : 'QC2LE' : 'TFSUTILS')
     H OPTION(*SRCSTMT : *NODEBUGIO)
     H EXTBININT(*YES)
      /ENDIF
      *
      * INFO:
      * This is the procedure you call to consume the Web Service:
      * ----------------------------------------------------------
      * Operation: impl:getProfiles
      * Returns  : impl_getProfilesRpc
      *
      * INFO:
      * Include fields in your test/production programs referring to the *_t
      * type templates used in this prototype, using a LIKE(*_t) or LIKEDS(*_t).
      * These fields will be your request and response messages.
      *
     D Inventory_getProfiles...
     D                 PR                  likeds(impl_getProfilesRpc_t)
     D                                     extproc('Inventory_getProfiles')
     D  i_in0                              likeds(apachesoap_Map_t)
     D  o_msg                              like(wsdl_errText_t )
      *
      *   Array dimensions:
     D DIM_A1          C                   256
     D DIM_A2          C                   256
      *
      *   Types:
      *
     D apachesoap_mapItem_t...
     D                 DS                  template
     D                                     qualified
     D  key                        4096A   varying
     D  value                      4096A   varying
      *
      *
     D apachesoap_Map_t...
     D                 DS                  template
     D                                     qualified
     D  item                               likeds(apachesoap_RpgArrayOfItem_t)
      *
      *
     D apachesoap_RpgArrayOfItem_t...
     D                 DS                  template
     D                                     qualified
     D  x                            10I 0
     D  mapItem                            likeds(apachesoap_mapItem_t)
     D                                     dim(DIM_A2)
      *
      *
     D impl_getProfilesRpc_t...
     D                 DS                  template
     D                                     qualified
     D  getProfilesReturn...
     D                                     likeds(impl_RpgArrayOfArrayOf_xsd_...
     D                                     anyType_t)
      *
     D impl_item_of_anyType_t...
     D                 S           4096A   varying
     D                                     template
      *
     D impl_RpgArrayOfArrayOf_xsd_anyType_t...
     D                 DS                  template
     D                                     qualified
     D  x                            10I 0
     D  item                               like(impl_item_of_anyType_t)
     D                                     dim(DIM_A1)
      /IF DEFINED(LOGGING_SERVICE)
      *
      *   Starts the Log4rpg logging service.
     D Inventory_startLoggingService...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _startLoggingService+
     D                                     ')
     D  i_path                             const  like(LOG4RPG_path_t   )
     D                                            options(*nopass)
     D  i_waitMinutes                10I 0 const  options(*nopass)
     D  i_unit                       10A   const  options(*nopass)
      /ENDIF
      *
      *   Web service: Enables/disables the debug log of HTTP API
     D Inventory_setHttpDebug...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _setHttpDebug+
     D                                     ')
     D   i_status                      N   const
     D   i_fileName                 500A   const  varying  options(*nopass)
      *
      *   Web service: Sets the proxy server to use for the connection
     D Inventory_setProxy...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _setProxy+
     D                                     ')
     D  i_server                    256A   const
     D  i_port                       10I 0 const
      *
      *   Web service: Returns the endpoint of the Web service
     D Inventory_getEndpoint...
     D                 PR         32767A          varying
     D                                     extproc('+
     D                                     Inventory+
     D                                     _getEndpoint+
     D                                     ')
      *
      *   Web service: Sets the endpoint of the Web service
     D Inventory_setEndpoint...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _setEndpoint+
     D                                     ')
     D  i_url                     32767A   const varying  options(*varsize)
      *
      *   Web service: Returns the host name of the Web Service endpoint
     D Inventory_getHost...
     D                 PR         32767A          varying
     D                                     extproc('+
     D                                     Inventory+
     D                                     _getHost+
     D                                     ')
      *
      *   Web service: Sets the host name of the Web service endpoint
     D Inventory_setHost...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _setHost+
     D                                     ')
     D  i_url                     32767A   const varying  options(*varsize)
      *
      *   Web service: Returns the port of the Web Service endpoint
     D Inventory_getPort...
     D                 PR            10I 0
     D                                     extproc('+
     D                                     Inventory+
     D                                     _getPort+
     D                                     ')
      *
      *   Web service: Sets the port of the Web service endpoint
     D Inventory_setPort...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _setPort+
     D                                     ')
     D  i_port                       10I 0 const
      *
      *   Registers an user callback procedure, that is called whenever
      *   a web service requires user authentification.
     D Inventory_registerLoginCallback...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _registerLoginCallback+
     D                                     ')
     D  i_pLoginProc                   *   value  procptr
      *
      *   Http: Returns cTrue in case of an error, else cFalse.
     D Inventory_isError...
     D                 PR              N
     D                                     extproc('+
     D                                     Inventory+
     D                                     _isError+
     D                                     ')
      *
      *   Http: Returns the last HTTP error (code) that occurred.
     D Inventory_HttpError_getCode...
     D                 PR                  like(wsdl_http_ErrorNo_t  )
     D                                     extproc('+
     D                                     Inventory+
     D                                     _HttpError_getCode+
     D                                     ')
      *
      *   Http: Returns the last HTTP error (text) that occurred.
     D Inventory_HttpError_getText...
     D                 PR                  like(wsdl_http_ErrorText_t)
     D                                     extproc('+
     D                                     Inventory+
     D                                     _HttpError_getText+
     D                                     ')
      *
      *   Soap: Returns the last SOAP error (code) that occurred.
     D Inventory_SoapError_getCode...
     D                 PR                  like(wsdl_soap_faultcode_t  )
     D                                     extproc('+
     D                                     Inventory+
     D                                     _SoapError_getCode+
     D                                     ')
      *
      *   Soap: Returns the last SOAP error (text) that occurred.
     D Inventory_SoapError_getText...
     D                 PR                  like(wsdl_soap_faultstring_t)
     D                                     extproc('+
     D                                     Inventory+
     D                                     _SoapError_getText+
     D                                     ')
      *
      *   Soap: Returns the last XML error (code) that occurred.
     D Inventory_XmlError_getCode...
     D                 PR                  like(wsdl_xml_errorNo_t    )
     D                                     extproc('+
     D                                     Inventory+
     D                                     _XmlError_getCode+
     D                                     ')
      *
      *   Soap: Returns the last XML error (text) that occurred.
     D Inventory_XmlError_getText...
     D                 PR                  like(wsdl_xml_ErrorText_t  )
     D                                     extproc('+
     D                                     Inventory+
     D                                     _XmlError_getText+
     D                                     ')
      *
      *   Returns the file name of the attachment that is associated to
      *   a given content ID.
     D Inventory_Attachments_get...
     D                 PR                  like(wsdl_path_t     )
     D                                     extproc('+
     D                                     Inventory+
     D                                     _Attachments_get+
     D                                     ')
     D  i_attachmentID...
     D                                     const  like(wsdl_attachmentID_t )
      *
      *   Returns the file name of the attachment that is associated to
      *   a given index.
     D Inventory_Attachments_getAtPos...
     D                 PR                  likeds(wsdl_attachment_t )
     D                                     extproc('+
     D                                     Inventory+
     D                                     _Attachments_getAtPos+
     D                                     ')
     D  i_index                      10I 0 const
      *
      *   Returns the number of attachments that were downloaded with the
      *   last call to the web service.
     D Inventory_Attachments_getNumE...
     D                 PR            10I 0
     D                                     extproc('+
     D                                     Inventory+
     D                                     _Attachments_getNumE+
     D                                     ')
      *
      *   Removes all attachments from the list of attachments of this web service.
     D Inventory_Attachments_removeAll...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _Attachments_removeAll+
     D                                     ')
      *
      *   Enables/disables a workaround for Web services that are driven
      *   by Axis and that are affected by the AXIS-2095 bug.
     D Inventory_enableAxis2095...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _enableAxis2095+
     D                                     ')
     D  i_isEnabled                    N   const
      *
      *   User callback to supply login information
      *   Returns WSDL_SUCCESS if successful, WSDL_ERROR upon error.
      *
      *   Parameter description:
      *     i_authType         Authentication type:
      *                          WSDL_AUTH_TYPE_HTTP  - HTTP server.
      *                          WSDL_AUTH_TYPE_PROXY - Proxy server.
      *     i_realm            Authentication realm.
      *     i_numAttempts      Number of login attempts.
      *     o_user             UserName to use.
      *     o_password         Password to use.
      *
     D Inventory_supplyLoginData...
     D                 PR            10I 0
     D                                     extproc('+
     D                                     Inventory+
     D                                     _supplyLoginData+
     D                                     ')
     D  i_authType                   14A          const  varying
     D  i_realm                     126A          const  varying
     D  i_numAttempts                10I 0        const
     D  o_user                       50A                 varying
     D  o_password                   50A                 varying
      *
      *   Specifies the name of the folder where to put attachments in.
     D Inventory_setAttachmentFolder...
     D                 PR
     D                                     extproc('+
     D                                     Inventory+
     D                                     _setAttachmentFolder+
     D                                     ')
     D  i_folder                   1024A   const  varying options(*varsize)
      *
 CPY  /COPY QWSDL2RPG,TYPES_H
      *
      /IF DEFINED(PROTOTYPE_TSTINVEN01)
      /EOF
      /ENDIF
      * ---------------------------------------------------------------------
      *
 CPY  /COPY QBASICS1,PBASICS1                      Tools/400 Runtime Library
 CPY  /COPY QMIME,PMIME                            Tools/400 MIME Parser
 CPY  /COPY QMIME,HTTPMIME_H                       Tools/400 MIME Parser to HTTP API adapter
 CPY  /COPY QRPGLESRC,HTTPAPI_H                    HTTP-API Service Program
 CPY  /COPY QWSDL2RPG,PWSDL2R70                    WSDL2RPG: HTTP API Header Extensions
 CPY  /COPY QWSDL2RPG,PWSDL2R71                    WSDL2RPG: HTTP Debug Log
 CPY  /COPY QWSDL2RPG,PWSDL2R86                    WSDL2RPG: Stream
 CPY  /COPY QWSDL2RPG,PWSDL2R87                    WSDL2RPG: ManagedMemoryDataSource
 CPY  /COPY QWSDL2RPG,PWSDL2R89                    WSDL2RPG: List of attachments
 CPY  /COPY QWSDL2RPG,PWSDL2R90                    WSDL2RPG: AppMsg
 CPY  /COPY QWSDL2RPG,PWSDL2R94                    WSDL2RPG: MultiRef
 CPY  /COPY QWSDL2RPG,PWSDL2R97                    WSDL2RPG: eXpat Adapter
 CPY  /COPY QWSDL2RPG,PWSDL2R98                    WSDL2RPG: UnMarshaller/Marshaller
 CPY  /COPY QWSDL2RPG,PWSDL2R42                    WSDL2RPG: User name and password
      *
      /IF DEFINED(LOGGING_SERVICE)
 CPY  /COPY QWSDL2RPG,PLOG4RPG                     Log4rpg: The Log4rpg service program
 CPY  /COPY QWSDL2RPG,PLOG4RPG00                   Log4rpg: The Log4rpg stub module
      /ENDIF
      *
      * ------------------------------------
      *  Internal prototypes
      * ------------------------------------
      *
      *   Reopens a given input stream in order to send it over
      *   the wire again.
     D reOpenInputStream...
     D                 PR                         like(wsdl_hStream_t    )
     D                                     extproc('+
     D                                     reOpenInputStream+
     D                                     ')
     D  i_hDataSource                      const  like(wsdl_hDataSource_t)
     D  i_hInpStream                       value  like(wsdl_hStream_t    )
      *
      *   Login in to proxy server or http server.
     D login...
     D                 PR            10I 0
     D                                     extproc('+
     D                                     login+
     D                                     ')
     D  i_http_err                   10I 0 value
     D  i_numAttempts                10I 0 value
      *
      *   Sets the content type and the SOAP action of the POST message.
     D HTTP_setContentTypeAndSOAPAction...
     D                 PR
     D                                     extproc('+
     D                                     HTTP_setContentTypeAndSOAPAction+
     D                                     ')
     D  o_addlHdrs                 1024A          varying
     D  i_pUserData                    *   value
      *
     D impl_getProfilesRpcStart...
     D                 PR
     D                                     extproc('impl_getProfilesRpcStart')
     D  userdata                       *   value
     D  depth                        10I 0 value
     D  namespace                  1024A   varying const
     D  name                       1024A   varying const
     D  path                      24576A   varying const
     D  attrs                          *   dim(32767)
     D                                     const options(*varsize)
     D impl_getProfilesRpcEnd...
     D                 PR
     D                                     extproc('impl_getProfilesRpcEnd')
     D  userdata                       *   value
     D  depth                        10I 0 value
     D  namespace                  1024A   varying const
     D  name                       1024A   varying const
     D  path                      24576A   varying const
     D  value                     65535A   varying
     D  attrs                          *   dim(32767)
     D                                     const options(*varsize)
     D impl_item_of_anyTypeStart_of_impl_getProfilesRpc...
     D                 PR
     D                                     extproc('impl_item_of_anyTypeStart_o+
     D                                     f_impl_getProfilesRpc')
     D  userdata                       *   value
     D  depth                        10I 0 value
     D  namespace                  1024A   varying const
     D  name                       1024A   varying const
     D  path                      24576A   varying const
     D  attrs                          *   dim(32767)
     D                                     const options(*varsize)
     D impl_item_of_anyTypeEnd_of_impl_getProfilesRpc...
     D                 PR
     D                                     extproc('impl_item_of_anyTypeEnd_of_+
     D                                     impl_getProfilesRpc')
     D  userdata                       *   value
     D  depth                        10I 0 value
     D  namespace                  1024A   varying const
     D  name                       1024A   varying const
     D  path                      24576A   varying const
     D  value                     65535A   varying
     D  attrs                          *   dim(32767)
     D                                     const options(*varsize)
      *
      *   Receice response of HTTP post operation.
     D HTTP_receiveResponse...
     D                 PR            10I 0 extproc('+
     D                                     HTTP_receiveResponse+
     D                                     ')
     D  i_hStream                    10I 0 value
     D  i_data                         *   value
     D  i_length                     10I 0 value
      *
      *   SOAP message: Envelope
     D SOAPMessage_Envelope...
     D                 PR                  extproc('+
     D                                     SOAPMessage_Envelope+
     D                                     ')
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
      *   SOAP message: fault information
     D SOAPMessage_FaultStart...
     D                 PR                  extproc('+
     D                                     SOAPMessage_FaultStart+
     D                                     ')
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
      *   SOAP message: fault information
     D SOAPMessage_FaultEnd...
     D                 PR                  extproc('+
     D                                     SOAPMessage_FaultEnd+
     D                                     ')
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   value                    65535A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
      *   SOAP message: fault details
     D SOAPMessage_FaultDetailStart...
     D                 PR                  extproc('+
     D                                     SOAPMessage_FaultDetailStart+
     D                                     ')
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
      *   SOAP message: fault details
     D SOAPMessage_FaultDetailEnd...
     D                 PR                  extproc('+
     D                                     SOAPMessage_FaultDetailEnd+
     D                                     ')
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   value                    65535A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
      *   SOAP message: NULL callback procedure
     D SOAPMessage_unexpectedElementStart...
     D                 PR
     D                                     extproc('+
     D                                     SOAPMessage_unexpectedElementStart+
     D                                     ')
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
      *   SOAP message: NULL callback procedure
     D SOAPMessage_unexpectedElementEnd...
     D                 PR
     D                                     extproc('+
     D                                     SOAPMessage_unexpectedElementEnd+
     D                                     ')
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   value                    65535A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
     D ignoreUnexpectedSoapHeader...
     D                 PR              N
     D                                     extproc('+
     D                                     ignoreUnexpectedSoapHeader+
     D                                     ')

      *   DataEast customizations

mk    *   Set the URL based on data in the EPequipmnt 'DSLAM' record
mk   D BuildURLfromEPequipmnt...
mk   D                 PR         32767a   varying
mk   D                                     extproc('DSLAM_URL')
mk   D WebServiceName               256a   varying
mk   D                                     const
mk   D LoginNeeded                     n   const

      * ------------------------------------
      *  Global fields & constants
      * ------------------------------------
      *
      *   Web service port name
     D cWEB_SERVICE_PORT...
     D                 C                   'Inventory'
      *
      *   UUID of the web service as generated by WSDL2RPG
     D cSERVICE_UUID   C                   '30A56001C640194DA35A0004AC101091'
      *
      *   SOAP response header
      *
      *   Reference to the 'respSoapHeader' field.
     D g_pRespSoapHeader...
     D                 S               *   inz
      *
      *   XMLSAXParser handle
     D g_hSAXParser    S                   like(xmlSaxParser_handle_t) inz
      *
      *   MIME parser
     D g_hMIMEParser   S                   like(mime_hMime_t ) inz
      *
      *   MIME message indicator
     D g_isMimeMessage...
     D                 S               N   inz(cFalse)
      *
      *   Content ID of the SOAP message part
     D g_SOAPMessageID...
     D                 S            512A   varying inz
      *
      *   Indicator "parse SOAP message"
     D g_doParseSOAPMessage...
     D                 S               N   inz(cFalse)
      *
      *   Indicator "SOAP message parsed"
     D g_SOAPMessage_done...
     D                 S               N   inz(cFalse)
      *
      *   Body part counter
     D g_BodyPart_counter...
     D                 S             10I 0 inz
      *
      *   Default and current attachment folder
     D cATTACHMENT_FOLDER...
     D                 C                   '/tmp/attachments/'
      *
     D g_attachmentFolder...
     D                 S           1024A   varying inz(cATTACHMENT_FOLDER)
      *
      *   HTTP response "initialized" indicator
     D g_HTTP_isInit...
     D                 S               N   inz(cFalse)
      *
      *   POST data CCSID (1208 = UTF-8)
     D g_post_ccsid...
     D                 S             10I 0 inz(1208)
      *
      *   HTTP debug log settings
     D g_httpDebug     DS                  qualified
     D  status                         N   inz
     D  fileName                    500A   inz varying
      *
      *   Proxy server to use
     D g_proxy         DS                  qualified
     D  server                      256A   inz
     D  port                         10I 0 inz
      *
      *   Switch for AXIS bug AXIS-2095
     D g_isAXIS_2095   S               N   inz(cFalse)
      *
      *   Error information
     D g_errors        DS                  likeds(wsdl_errors_t    ) inz
      *
      *   User callback to supply login information
      *   Returns WSDL_SUCCESS if successful, WSDL_ERROR upon error.
     D g_getLoginDataImpl...
     D                 S               *   procptr inz
      *
     D getLoginDataImpl...
     D                 PR            10I 0
     D                                     extproc(g_getLoginDataImpl)
     D  i_authType                   14A          const  varying
     D  i_realm                     126A          const  varying
     D  i_numAttempts                10I 0        const
     D  o_user                       50A                 varying
     D  o_password                   50A                 varying
      *
      *   Web service endpoint as specified in the WSDL file.
     D cURL            C                   'http://192.168.41.252:9090/axis/ser+
     D                                     vices/Inventory'
      *
      *   Web service endpoint
     D g_url           S          32767A   varying inz(cURL)
      *
      * -------------------------------------------
      *  TODO: Added to implement default
      *        attachment handling.
      * -------------------------------------------
      /IF DEFINED(DEFAULT_ATTACHMENT_HANDLING)
 CPY  /COPY QWSDL2RPG,CLIB                         C Runtime Library
      *
      *  User data scoped to the current part
     D partUserData_t...
     D                 DS                  qualified               based(pDummy)
     D  FD                           10i 0
      *
      /ENDIF
      * =====================================================================
      * Operation: impl:getProfiles
      * Returns  : impl_getProfilesRpc
      * =====================================================================
     P Inventory_getProfiles...
     P                 B                   export
     D Inventory_getProfiles...
     D                 PI                  likeds(impl_getProfilesRpc_t)
     D  i_in0                              likeds(apachesoap_Map_t)
     D  o_msg                       128A   varying
      *
      *  Return value
     D rtnValue        DS                  likeds(impl_getProfilesRpc_t)
     D                                     inz
      *
      *  Local fields
     D isUnexpectedError...
     D                 S               N   inz(cFalse)
     D isRedirect      S               N   inz(cFalse)
     D request         S          65535A   varying inz
     D url             S                   like(g_url) inz
     D rc              S             10I 0 inz
     D rcvm0200        DS                  likeds(rcvm0200_t ) inz
     D msg             DS                  likeds(msg_t      ) inz
     D headers         DS                  likeds(headers_t  ) inz
      *
     D hDataSource     S                   like(wsdl_hDataSource_t   ) inz
     D hOutStream      S                   like(wsdl_hStream_t       ) inz
     D hSAXParser      S                   like(xmlSaxParser_handle_t) inz
     D hMIMEParser     S                   like(mime_hMime_t         ) inz
     D hInpStream      S                   like(wsdl_hStream_t       ) inz
     D contentType     S                   like(wsdl_contentType_t   ) inz
      *
      *  Login helper fields
     D err             S             10I 0 inz
     D lastErr         S             10I 0 inz(-1)
     D numAttempts     S             10I 0 inz
      *
      *  Array iterator fields
     D X_A1            S             10I 0 inz
     D X_A2            S             10I 0 inz
      *
     D curItem_of_anyType_A1...
     D                 S                   like(impl_item_of_anyType_t)
     D                                     inz
      *
     D curMapItem_A2   DS                  likeds(apachesoap_mapItem_t)
     D                                     inz
      *
     D userData        DS                  likeds(impl_getProfilesRpc_t)
     D                                     inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         // Set url to include login credentials
mk       g_url = BuildURLfromEPequipmnt('Inventory' : cTrue);
mk       if g_url = 'ERROR';
mk          // unable to build the URL from the EPequipmnt record.
mk          // Use the default value in the cURL constant;
mk          g_url = cURL;
mk       endif;
       //  ----  End DataEast custom code...

         o_msg = '';

         monitor;

            // Initialize map to manage <multiRef> elements
            MultiRef_new();

            // Remove all attachments of this service from the list of attachments
            Attachments_removeAll(Attachments_theInstance(): cSERVICE_UUID);

            // Enable/disable HTTP debug log
 B01        if (g_httpDebug.status = *ON);
 B02           if (g_httpDebug.fileName <> '');
                  http_debug(*ON: g_httpDebug.fileName);
 X02           else;
                  http_debug(*ON);
 E02           endif;
 X01        else;
               http_debug(*OFF);
 E01        endif;

            // Set proxy server to use
 B01        if (g_proxy.server <> '');
               http_setproxy(g_proxy.server: g_proxy.port);
 X01        else;
               http_setproxy('': 0);
 E01        endif;

            // Set CCSID for POST data according
            // to the encoding of the SOAP envelope
            HTTP_SetCCSIDs(g_post_ccsid: HTTP_EBCDIC);

            // Create and open data source to store the request message
            hDataSource = ManagedMemoryDataSource_new();

            contentType = 'text/xml';
            hOutStream = ManagedMemoryDataSource_OutputStream_open(
                               hDataSource: contentType: g_post_ccsid);

            // Produce SOAP request message
            request =
               '<?xml version="1.0" encoding="UTF-8"?>'                     +
               '<soapenv:Envelope'                                          +
               ' xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";' +
            ' xmlns:apachesoap="http://xml.apache.org/xml-soap";' +
            ' xmlns:impl="urn:Inventory"' +
            ' xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";' +
            ' xmlns:xsd="http://www.w3.org/2001/XMLSchema";' +
            ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";' +
               '>'                                                          +
               '<soapenv:Body>'                                             +
            '';

         if (%len(request) > 0);
            // Add previous bytes of request message to output stream
            ManagedMemoryDataSource_OutputStream_write(hOutStream: %addr(requ...
            est: *DATA): %len(request));
            clear request;
         endif;

         request = request +
         '<impl:getProfiles' +
               ' soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/e+
               ncoding/"' +
         '>' +
         '<in0' +
               ' xsi:type="apachesoap:Map"' +
         '>' +
            '';

         if (%len(request) > 0);
            // Add previous bytes of request message to output stream
            ManagedMemoryDataSource_OutputStream_write(hOutStream: %addr(requ...
            est: *DATA): %len(request));
            clear request;
         endif;

         for X_A2 = 1 to i_in0.item.x;
            curMapItem_A2 = i_in0.item.mapItem(X_A2);

            request = request +
            '<item' +
               ' xsi:type="apachesoap:mapItem"' +
            '>' +
            '<key>' +
               '';

            if (%len(request) > 0);
               // Add previous bytes of request message to output stream
               ManagedMemoryDataSource_OutputStream_write(hOutStream: %addr(
               request: *DATA): %len(request));
               clear request;
            endif;
            Marshaller_toAnyTypeV6(
               %addr(curMapItem_A2.key)
               : %addr(curMapItem_A2.key: *DATA)
               : %len(curMapItem_A2.key)
               : hOutStream);

            request = request +
            '</key>' +
            '<value>' +
               '';

            if (%len(request) > 0);
               // Add previous bytes of request message to output stream
               ManagedMemoryDataSource_OutputStream_write(hOutStream: %addr(
               request: *DATA): %len(request));
               clear request;
            endif;
            Marshaller_toAnyTypeV6(
               %addr(curMapItem_A2.value)
               : %addr(curMapItem_A2.value: *DATA)
               : %len(curMapItem_A2.value)
               : hOutStream);

            request = request +
            '</value>' +
            '</item>' +
               '';

            if (%len(request) > 0);
               // Add previous bytes of request message to output stream
               ManagedMemoryDataSource_OutputStream_write(hOutStream: %addr(
               request: *DATA): %len(request));
               clear request;
            endif;
         endfor;

         request = request +
         '</in0>' +
         '</impl:getProfiles>' +
               '</soapenv:Body>'                                            +
               '</soapenv:Envelope>';

            // Add remaining bytes of request message to output stream
 B01        if (%len(request) > 0);
               ManagedMemoryDataSource_OutputStream_write(
                     hOutStream: %addr(request) + 2: %len(request));
 E01        endif;

            // Close output stream and finish the request message
            ManagedMemoryDataSource_OutputStream_close(hOutStream);

            // Open input stream
            hInpStream = ManagedMemoryDataSource_InputStream_open(hDataSource);

            // Clear error code
            clear g_errors;
            g_errors.errType = WSDL_HTTP_SUCCESS;

            // HTTPAPI: Enables additional headers
            http_xproc(HTTP_POINT_ADDL_HEADER
                       : %paddr('HTTP_setContentTypeAndSOAPAction')
                       : %addr(headers));

            headers.contentType =
                  ManagedMemoryDataSource_getContentType(hDataSource);
            headers.soapAction  = '';

            // ---------------------------------------
            //   Post request and parse response
            // ---------------------------------------

            // Create parser (callbacks style: HTTP API)
            XMLSAXParser_new(hSAXParser: cTrue);
            XMLSAXParser_setDoNamespaces(hSAXParser: cTrue);
            XMLSAXParser_registerCallback(hSAXParser
               : cXML_CB_SAX_STARTELEMENT
               : %paddr('SOAPMessage_Envelope'));
            XMLSAXParser_prepareParse(hSAXParser: %addr(userData));

            // Create MIME parser in case we need it
            hMIMEParser = MIMEParser_new();
            MIMEParser_setDecodeData(hMIMEParser: cTrue);
            http_mime_DataSink_initialize(hMIMEParser
                                          : *NULL
                                          : %paddr('HTTPDataSink_startPart')
                                          : %paddr('HTTPDataSink_bodyData')
                                          : %paddr('HTTPDataSink_endPart'));

            // Make parser available for HTTP_receiveResponse()
            g_hSAXParser    = hSAXParser;
            g_hMIMEParser   = hMIMEParser;
            g_isMimeMessage = cFalse;
            g_HTTP_isInit   = cFalse;
            g_SOAPMessageID = '';
            g_doParseSOAPMessage = cFalse;
            g_SOAPMessage_done   = cFalse;
            g_BodyPart_counter   = 0;

            // Make SOAP response header available to SOAPMessage_Envelope
            g_pRespSoapHeader = *NULL;

            // eXpat: Post request and parse response
            url = Inventory_getEndpoint();
 B01        dou (err <> HTTP_NDAUTH and err <> HTTP_PXNDAUTH);
               // Get document from server and handle http redirects
               //   301 Moved Permanently
               //   302 Found
               //   303 See Other
               //   307 Temporary Redirect
 B02           dou (not isRedirect);
                  rc = http_url_post_raw2(
                     url
                     : hInpStream
                     : %paddr(
                          'WSDL2R87_ManagedMemoryDataSource_InputStream_read')
                     : ManagedMemoryDataSource_getSize(hDataSource)
                     : 0
                     : %paddr('HTTP_receiveResponse')
                     : HTTP_TIMEOUT
                     : HTTP_USERAGENT
                     : '');
 B03              if (rc = 301 or rc = 302 or rc = 303 or rc = 307);
                     url = http_redir_loc();
                     // Reopen data stream
                     hInpStream = reOpenInputStream(hDataSource: hInpStream);
                     isRedirect = cTrue;
 X03              else;
                     isRedirect = cFalse;
 E03              endif;
 E02           enddo;

               // The first time we request a document that requires user/password
               // it will return a HTTP_NDAUTH error.
 B02           if (rc <> 1);
                  http_error(err);
 B03              if (err = HTTP_NDAUTH or err = HTTP_PXNDAUTH);
 B04                 if (g_getLoginDataImpl = *NULL);
                        leave;
 E04                 endif;

 B04                 if (err <> lastErr);
                        lastErr = err;
                        numAttempts = 0;
 E04                 endif;
                     numAttempts = numAttempts + 1;

 B04                 if (login(err: numAttempts) <> 1);
                        leave;
 E04                 endif;

                     // Reopen data stream
                     hInpStream = reOpenInputStream(hDataSource: hInpStream);
 E03              endif;
 X02           else;
                  MultiRef_finalize();
                  err = 0;
 E02           endif;
 E01        enddo;

            // Preserve parser error code and message text
 B01        if (err = HTTP_RDWERR);
               g_errors.xmlError.code = XMLToolkit_getError(
                                              hSAXParser
                                              : g_errors.xmlError.text
                                              : g_errors.xmlError.line
                                              : g_errors.xmlError.column);
 E01        endif;

            XMLSAXParser_endParse(hSAXParser);

 B01        if (g_isMimeMessage);
               MIMEParser_endParse(hMIMEParser);
               g_isMimeMessage = cFalse;
 E01        endif;

            g_HTTP_isInit = cFalse;

         on-error;
            isUnexpectedError = cTrue;
            rcvm0200 = f_rcvPgmMsg(cMsg_Any: *: cMsg_Act_Same: 0
                                   : cMsg_Same: cMsg_ToMyself);
            http_DebugLog_appendRcvMsg(rcvm0200);
            msg = f_cvtRcvMsgToMsg(rcvm0200);
            g_errors.errType        = WSDL_HTTP_ERROR_UNEXPECTED;
            g_errors.httpError.no   = WSDL_HTTP_ERROR_UNEXPECTED;
            g_errors.httpError.text = f_rtvMsgText(msg);
            rc    = g_errors.httpError.no;
            o_msg = g_errors.httpError.text;
         endmon;

         g_hSAXParser  = *NULL;
         g_hMIMEParser = *NULL;

 B01     if (not isUnexpectedError);
 B02        if (err <> 0);
               g_errors.errType = WSDL_HTTP_ERROR;

               // Set http error code and message text
               g_errors.httpError.no   = err;
               g_errors.httpError.text = http_error();

               // Return error message text to caller
 B03           if (g_errors.httpError.text <> '');
                  o_msg = g_errors.httpError.text;
 X03           else;
                  o_msg = Inventory_SoapError_getText();
 E03           endif;
               clear rtnValue;
            else;
               o_msg = '';
               rtnValue = userData;
            endif;
 E02     endif;

 B02     if (not XMLSAXParser_isNull(hSAXParser));
            XMLSAXParser_delete(hSAXParser);
 E02     endif;

 B02     if (not MIMEParser_isNull(hMIMEParser));
            MIMEParser_delete(hMIMEParser);
 E02     endif;

 B02     if (not ManagedMemoryDataSource_isNull(hDataSource));
 B03        if (ManagedMemoryDataSource_Stream_isOpen(hInpStream));
               ManagedMemoryDataSource_InputStream_close(hInpStream);
 E03        endif;
 B03        if (ManagedMemoryDataSource_Stream_isOpen(hOutStream));
               ManagedMemoryDataSource_OutputStream_close(hOutStream);
 E03        endif;
            ManagedMemoryDataSource_delete(hDataSource);
 E02     endif;

 B02     if (not MultiRef_isNull());
            MultiRef_delete();
 E02     endif;

 B02     if (http_DebugLog_isOpen());
            http_DebugLog_close();
 E02     endif;

         return rtnValue;

      /end-free
      *
     P Inventory_getProfiles...
     P                 E
      *
      *
      * ==================================================================
      * Return value: impl:getProfilesRpc
      * ==================================================================
     P impl_getProfilesRpcStart...
     P                 B
     D impl_getProfilesRpcStart...
     D                 PI
     D  userdata                       *   value
     D  depth                        10I 0 value
     D  namespace                  1024A   varying const
     D  name                       1024A   varying const
     D  path                      24576A   varying const
     D  attrs                          *   dim(32767)
     D                                     const options(*varsize)
      *
     D currentItem     DS                  likeds(impl_getProfilesRpc_t)
     D                                     based(pCurrentItem)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         // Get access to current item
         pCurrentItem = userdata;

         select;
         when (depth = 1
                and
                name = 'getProfilesRpc');
            if (MultiRef_isReference(attrs));
               MultiRef_put(
                  attrs
                  : XMLSAXParser_getUserData()
                  : depth
                  : namespace
                  : name
                  : path
                  : XMLSAXParser_getStartCallback()
                  : XMLSAXParser_getEndCallback()
                  : *omit
                  : %addr(currentItem)
                  : %size(currentItem)
                  );
            endif;
            return;

         when (depth = 2
                and
                name = 'getProfilesReturn'
                and
                namespace = '');
            XMLSAXParser_delegateElementProcessing(
               %addr(currentItem.getProfilesReturn)
               : %paddr('impl_item_of_anyTypeStart_of_impl_getProfilesRpc')
               : %paddr('impl_item_of_anyTypeEnd_of_impl_getProfilesRpc')
               );
            return;

         endsl;

         return;

      /end-free
      *
     P impl_getProfilesRpcStart...
     P                 E
      *
      * ==================================================================
      * Return value: impl:getProfilesRpc
      * ==================================================================
     P impl_getProfilesRpcEnd...
     P                 B
     D impl_getProfilesRpcEnd...
     D                 PI
     D  userdata                       *   value
     D  depth                        10I 0 value
     D  namespace                  1024A   varying const
     D  name                       1024A   varying const
     D  path                      24576A   varying const
     D  value                     65535A   varying
     D  attrs                          *   dim(32767)
     D                                     const options(*varsize)
      *
     D currentItem     DS                  likeds(impl_getProfilesRpc_t)
     D                                     based(pCurrentItem)
      *
     D itemValue       DS                  likeds(wsdl_fullElementData_t)
     D                                     inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         // Get access to current item
         pCurrentItem = userdata;

         // Get full element data
         itemValue = XMLSAXParser_getFullElementData();

         select;
         endsl;

         return;

      /end-free
      *
     P impl_getProfilesRpcEnd...
     P                 E
      *
      * ==================================================================
      * Return value: impl:getProfilesReturn
      * ==================================================================
     P impl_item_of_anyTypeStart_of_impl_getProfilesRpc...
     P                 B
     D impl_item_of_anyTypeStart_of_impl_getProfilesRpc...
     D                 PI
     D  userdata                       *   value
     D  depth                        10I 0 value
     D  namespace                  1024A   varying const
     D  name                       1024A   varying const
     D  path                      24576A   varying const
     D  attrs                          *   dim(32767)
     D                                     const options(*varsize)
      *
     D x               S             10I 0 inz
      *
     D impl_getProfilesReturn...
     D                 DS                  likeds(impl_RpgArrayOfArrayOf_xsd_...
     D                                     anyType_t)
     D                                     based(userdata)
      *
     D currentItem     S                   like(impl_item_of_anyType_t)
     D                                     based(pCurrentItem)
      *
     D emptyItem       S                   like(impl_item_of_anyType_t)
     D                                     inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         // Return to caller if array is SOAP encoded.
         // Depth=1 indicates that we are at the top
         // of the array but not on item level.
         if (depth = 1);
            if (MultiRef_isReference(attrs));
               MultiRef_put(
                  attrs
                  : XMLSAXParser_getUserData()
                  : depth
                  : namespace
                  : name
                  : path
                  : XMLSAXParser_getStartCallback()
                  : XMLSAXParser_getEndCallback()
                  : *omit
                  : %addr(impl_getProfilesReturn)
                  : %size(impl_getProfilesReturn)
                  );
            endif;
            return;
         endif;

         // Get access to current array item
         if (MultiRef_doCaptureData() and MultiRef_hasItemIndex());
            x = MultiRef_getItemIndex();
         else;
            if (depth = 2);
               impl_getProfilesReturn.x = impl_getProfilesReturn.x + 1;
            endif;
            x = impl_getProfilesReturn.x;
         endif;

         pCurrentItem = %addr(impl_getProfilesReturn.item(x));

         select;
         when (depth = 2);
            if (MultiRef_isReference(attrs));
               MultiRef_put(
                  attrs
                  : XMLSAXParser_getUserData()
                  : depth
                  : namespace
                  : name
                  : path
                  : XMLSAXParser_getStartCallback()
                  : XMLSAXParser_getEndCallback()
                  : x
                  : %addr(currentItem)
                  : %size(currentItem)
                  );
            endif;
            return;

         endsl;

         return;

      /end-free
      *
     P impl_item_of_anyTypeStart_of_impl_getProfilesRpc...
     P                 E
      *
      * ==================================================================
      * Return value: impl:getProfilesReturn
      * ==================================================================
     P impl_item_of_anyTypeEnd_of_impl_getProfilesRpc...
     P                 B
     D impl_item_of_anyTypeEnd_of_impl_getProfilesRpc...
     D                 PI
     D  userdata                       *   value
     D  depth                        10I 0 value
     D  namespace                  1024A   varying const
     D  name                       1024A   varying const
     D  path                      24576A   varying const
     D  value                     65535A   varying
     D  attrs                          *   dim(32767)
     D                                     const options(*varsize)
      *
     D x               S             10I 0 inz
      *
     D impl_getProfilesReturn...
     D                 DS                  likeds(impl_RpgArrayOfArrayOf_xsd_...
     D                                     anyType_t)
     D                                     based(userdata)
      *
     D currentItem     S                   like(impl_item_of_anyType_t)
     D                                     based(pCurrentItem)
      *
     D itemValue       DS                  likeds(wsdl_fullElementData_t)
     D                                     inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         // Return to caller if array is SOAP encoded.
         // Depth=1 indicates that we are at the top
         // of the array but not on item level.
         if (depth = 1);
            return;
         endif;

         // Get access to current array item
         if (MultiRef_doCaptureData() and MultiRef_hasItemIndex());
            x = MultiRef_getItemIndex();
         else;
            x = impl_getProfilesReturn.x;
         endif;

         pCurrentItem = %addr(impl_getProfilesReturn.item(x));

         // Get full element data
         itemValue = XMLSAXParser_getFullElementData();

         select;
         when (depth = 2);
            if (not Value_isNil(attrs));
               UnMarshaller_toStringV6(
                  %addr(currentItem)
                  : %addr(currentItem: *DATA)
                  : %size(currentItem)
                  : itemValue.pData
                  : itemValue.size);
            endif;

         endsl;

         return;

      /end-free
      *
     P impl_item_of_anyTypeEnd_of_impl_getProfilesRpc...
     P                 E
      *
      * =====================================================================
      *   Reopens a given input stream in order to send it over
      *   the wire again.
      * =====================================================================
     P reOpenInputStream...
 ERR P                 B
      *
     D reOpenInputStream...
     D                 PI                         like(wsdl_hStream_t    )
     D  i_hDataSource                      const  like(wsdl_hDataSource_t)
     D  i_hInpStream                       value  like(wsdl_hStream_t    )
      *
      *  Return value
     D hInpStream      S                   like(wsdl_hStream_t       ) inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         ManagedMemoryDataSource_InputStream_close(i_hInpStream);
         hInpStream =
               ManagedMemoryDataSource_InputStream_open(i_hDataSource);

         return hInpStream;

      /end-free
      *
     P reOpenInputStream...
     P                 E
      *
      * =====================================================================
      *   Login in to proxy server or http server.
      * =====================================================================
     P login...
     P                 B
      *
     D login...
     D                 PI            10I 0
     D  i_http_err                   10I 0 value
     D  i_numAttempts                10I 0 value
      *
      *  Return value
     D rc              S             10I 0 inz
      *
      *  Helper fields
     D basic           S               N   inz
     D digest          S               N   inz
     D realm           S            124A   inz
     D authType        S             14A   inz varying
     D userid          S             50A   inz varying
     D password        S             50A   inz varying
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (i_http_err = HTTP_NDAUTH);
            http_getauth(basic: digest: realm);
            authType = WSDL_AUTH_TYPE_HTTP;
         else;
            http_proxy_getauth(basic: realm);
            authType = WSDL_AUTH_TYPE_PROXY;
         endif;

         rc = getLoginDataImpl(authType: realm
                               : i_numAttempts: userid: password);
         if (rc <> 1);
            userid = '';
            password = '';
            return rc;
         endif;

         if (i_http_err = HTTP_NDAUTH);
            if (digest);
               http_setAuth(HTTP_AUTH_MD5_DIGEST
                            : userid: password);
            else;
               http_setAuth(HTTP_AUTH_BASIC
                            : userid: password);
            endif;
         else;
            if (digest);
               http_proxy_setAuth(HTTP_AUTH_MD5_DIGEST
                                  : userid: password);
            else;
               http_proxy_setAuth(HTTP_AUTH_BASIC
                                  : userid: password);
            endif;
         endif;

         userid = '';
         password = '';

         return rc;

      /end-free
      *
     P login...
     P                 E
      *
      * =====================================================================
      *   Sets the content type and the SOAP action of the POST message.
      * =====================================================================
     P HTTP_setContentTypeAndSOAPAction...
     P                 B
      *
     D HTTP_setContentTypeAndSOAPAction...
     D                 PI
     D  o_addlHdrs                 1024A          varying
     D  i_pUserData                    *   value
      *
      *  User Data
     D headers         DS                  likeds(headers_t) based(i_pUserData)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         o_addlHdrs = cHTTP_HEADER_CONTENT_TYPE + ': ' +
                      headers.contentType + cEBCDIC_CRLF +
                      cHTTP_HEADER_SOAP_ACTION + ': ' +
                      headers.soapAction + cEBCDIC_CRLF;

      /end-free
      *
     P HTTP_setContentTypeAndSOAPAction...
     P                 E
      *
      * =====================================================================
      *   Receice response of HTTP post operation.
      * =====================================================================
     P HTTP_receiveResponse...
     P                 B
      *
     D HTTP_receiveResponse...
     D                 PI            10I 0
     D  i_hStream                    10I 0 value
     D  i_data                         *   value
     D  i_length                     10I 0 value
      *
     D contentType     S           1024A   inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (not g_HTTP_isInit);
            select;
            when (http_getContentType() = 'text');
               if (http_getContentSubType() = 'html');
                  if (f_exist('WSDL2RPG': '*LIBL': '*MSGF'));
                     clear USR0030;
                     USR00301 = cWEB_SERVICE_PORT;
                     AppMsg_sendCancelMsg(AppMsg_newError('USR0030': USR0030));
                  else;
                     AppMsg_sendCancelMsg(
                        f_newMsg('CPF9898'
                              : 'Unexpected HTML data received from web service'
                              : '*ESCAPE'
                              : 'QCPFMSG'));
                  endif;
               endif;
            when (http_getContentType() = 'multipart');
               contentType = %trim(http_header('content-type'));
               MIMEParser_beginParse(g_hMIMEParser);
               MIMEParser_setContentType(g_hMIMEParser: contentType);
               g_SOAPMessageID = http_getContentTypeAttr('start': cTrue);
               g_isMimeMessage = cTrue;
            endsl;
            g_HTTP_isInit = cTrue;
         endif;

         if (g_isMimeMessage);
            if (MIMEParser_parse(g_hMIMEParser: i_data: i_length) = cTrue);
               return i_length;
            else;
               return -1;
            endif;
         else;
            if (XMLSAXParser_parse(g_hSAXParser: i_data: i_length) = cTrue);
               return i_length;
            else;
               return -1;
               // return i_length;
            endif;
         endif;

      /end-free
      *
     P HTTP_receiveResponse...
     P                 E
      *
      * =====================================================================
      *   Starts a MIME body part.
      *   This procedure is called whenever a new part is started.
      * =====================================================================
      *   Parameters:
      *     i_pPart            Handle of the current part.
      *     i_pUserData        Pointer to user data as specified at
      *                        http_mime_DataSink_initialize().
      * =====================================================================
     P HTTPDataSink_startPart...
     P                 B
      *
     D HTTPDataSink_startPart...
     D                 PI
     D  i_pPart                        *   const
     D  i_pUserData                    *   const
      *
     D contentID       S            512A   varying inz
     D contentSubType  S             16A   varying inz
      *
      * -------------------------------------------
      *  TODO: Add fields to open
      *        the file and to store the
      *        file descriptor.
      * -------------------------------------------
      /IF DEFINED(DEFAULT_ATTACHMENT_HANDLING)
     D contentType     S             10I 0 inz
     D fileName        S           1024A   varying inz
     D fileExt         S             10A   varying inz
      *
     D partUserData    DS                  likeds(partUserData_t )
     D                                     based(pPartUserData)
      /ENDIF
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (http_mime_Part_getType(i_pPart) <> cMIME_BASICPART);
            return;
         endif;

         g_BodyPart_counter = g_BodyPart_counter + 1;

         contentID      = http_mime_Part_getContentID(i_pPart);
         contentSubType = http_mime_Part_getContentSubType(i_pPart);

         if (not g_SOAPMessage_done);
            if (g_SOAPMessageID <> '');
               if (contentSubType = 'xml' and contentID = g_SOAPMessageID);
                  g_doParseSOAPMessage = cTrue;
                  return;
               endif;
            else;
               if (g_BodyPart_counter = 1);
                  g_doParseSOAPMessage = cTrue;
                  return;
               endif;
            endif;
         endif;

         // -----------------------------------------
         // TODO:
         // Add your code to handle attachments here|
         // E.g.: Open output file.
         // -----------------------------------------
      /IF DEFINED(DEFAULT_ATTACHMENT_HANDLING)

         // Ignore all attachments that are not a BasicPart
         if (http_mime_Part_getType(i_pPart) <> cMIME_BASICPART);
            return;
         endif;

         fileName       = http_mime_Part_getFileName(i_pPart);
         contentID      = http_mime_Part_getContentID(i_pPart);
         contentType    = http_mime_Part_getContentType(i_pPart);
         contentSubType = http_mime_Part_getContentSubType(i_pPart);

         if (contentType = cMIME_TYPE_TEXT);
            fileExt = 'txt';
         else;
            fileExt = contentSubType;
         endif;

         fileName = g_attachmentFolder +
                    %char(%timestamp()) + '_' + contentID + '_' +
                    fileName  + '.' + fileExt;
         fileName = %xlate(':<>': '___': fileName);

         // Assign filename to content-ID and put it into the list of attachments
         Attachments_put(Attachments_theInstance()
                         : cSERVICE_UUID
                         : contentID
                         : fileName);

         // Produce the user data of that Part to
         // store the file descriptor of the open file.
         pPartUserData = %alloc(%size(partUserData_t));
         clear partUserData;

         partUserData.FD = open(fileName
                                : O_CREAT + O_EXCL +
                                  O_SHARE_RDONLY + O_WRONLY + O_CCSID
                                : S_IRWXU + S_IRWXG + S_IRWXO
                                : 819);   // CCSID does not matter because
                                          // we write binary data

         // Set user data of the current Part.
         http_mime_Part_setUserData(i_pPart: pPartUserData);
      /ENDIF

         return;

      /end-free
      *
     P HTTPDataSink_startPart...
     P                 E
      *
      * =====================================================================
      *   Receices MIME part body data.
      *   This procedure is called whenever new body data is available.
      * =====================================================================
      *   Parameters:
      *     i_pPart            Handle of the current part.
      *     i_pUserData        Pointer to user data as specified at
      *                        http_mime_DataSink_initialize().
      *     i_data             Pointer to decoded body data.
      *     i_size             Size of decoded body data.
      * =====================================================================
     P HTTPDataSink_bodyData...
     P                 B
      *
     D HTTPDataSink_bodyData...
     D                 PI
     D  i_pPart                        *   const
     D  i_pUserData                    *   const
     D  i_data                         *   const
     D  i_size                       10I 0 const
      *
      * -------------------------------------------
      *  TODO: Add fields to write
      *        the attachment to the file
      *        opened in HTTPDataSink_startPart().
      * -------------------------------------------
      /IF DEFINED(DEFAULT_ATTACHMENT_HANDLING)
     D rc              S             10I 0 inz
      *
     D partUserData    DS                  likeds(partUserData_t )
     D                                     based(pPartUserData)
      /ENDIF
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (g_doParseSOAPMessage);
            XMLSAXParser_parse(g_hSAXParser: i_data: i_size);
            return;
         endif;

         // -----------------------------------------
         // TODO:
         // Add your code to handle attachments here|
         // E.g.: Write received data to output file.
         // -----------------------------------------

      /IF DEFINED(DEFAULT_ATTACHMENT_HANDLING)
         // Gain access to the user data of the current Part.
         pPartUserData = http_mime_Part_getUserData(i_pPart);
         if (pPartUserData = *NULL);
            return;
         endif;

         // Return to caller if no file is open.
         if (partUserData.FD <= 0);
            return;
         endif;

         // Append attachment data to the file.
         rc = write(partUserData.FD: i_data: i_size);
      /ENDIF

         return;

      /end-free
      *
     P HTTPDataSink_bodyData...
     P                 E
      *
      * =====================================================================
      *   Ends a MIME body part.
      *   This procedure is called whenever a new part ends.
      * =====================================================================
      *   Parameters:
      *     i_pPart            Handle of the current part.
      *     i_pUserData        Pointer to user data as specified at
      *                        http_mime_DataSink_initialize().
      * =====================================================================
     P HTTPDataSink_endPart...
     P                 B
      *
     D HTTPDataSink_endPart...
     D                 PI
     D  i_pPart                        *   const
     D  i_pUserData                    *   const
      *
      * -------------------------------------------
      *  TODO: Add fields to close the file
      *        opened in HTTPDataSink_startPart().
      * -------------------------------------------
      /IF DEFINED(DEFAULT_ATTACHMENT_HANDLING)
     D rc              S             10I 0 inz
      *
     D partUserData    DS                  likeds(partUserData_t )
     D                                     based(pPartUserData)
      /ENDIF
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (http_mime_Part_getType(i_pPart) <> cMIME_BASICPART);
            return;
         endif;

         if (g_doParseSOAPMessage);
            g_doParseSOAPMessage = cFalse;
            g_SOAPMessage_done   = cTrue;
            return;
         endif;

         // -----------------------------------------
         // TODO:
         // Add your code to handle attachments here|
         // E.g.: Close output file.
         // -----------------------------------------
      /IF DEFINED(DEFAULT_ATTACHMENT_HANDLING)

         // Gain access to the user data of the current Part.
         pPartUserData = http_mime_Part_getUserData(i_pPart);
         if (pPartUserData = *NULL);
            return;
         endif;

         // Return to caller if no file is open.
         if (partUserData.FD <= 0);
            return;
         endif;

         // Close the file.
         callp close(partUserData.FD);
         partUserData.FD = 0;

         // Free memory allocated in HTTPDataSink_startPart()
         dealloc(N) pPartUserData;
      /ENDIF

         return;

      /end-free
      *
     P HTTPDataSink_endPart...
     P                 E
      *
      * =====================================================================
      *   SOAP message: Envelope
      * =====================================================================
     P SOAPMessage_Envelope...
     P                 B
      *
     D SOAPMessage_Envelope...
     D                 PI
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (depth = 1 and f_lcase(name) = 'html');
            if (f_exist('WSDL2RPG': '*LIBL': '*MSGF'));
               clear USR0030;
               USR00301 = cWEB_SERVICE_PORT;
               AppMsg_sendCancelMsg(AppMsg_newError('USR0030': USR0030));
            else;
               AppMsg_sendCancelMsg(
                     f_newMsg('CPF9898'
                              : 'Unexpected HTML data received from web service'
                              : '*ESCAPE'
                              : 'QCPFMSG'));
            endif;
         endif;

         select;
         when (path = '/Envelope/Header');
            XMLSAXParser_delegateElementProcessing(
               g_pRespSoapHeader
               : %paddr('SOAPMessage_unexpectedElementStart')
               : %paddr('SOAPMessage_unexpectedElementEnd'));
           return;

         when (path = '/Envelope/Body');

            select;
            when (name = 'Fault');
               XMLSAXParser_delegateElementProcessing(
                  %addr(g_errors.soapFault)
                  : %paddr('SOAPMessage_FaultStart')
                  : %paddr('SOAPMessage_FaultEnd'));
              return;

            when (MultiRef_isData(attrs));
               XMLSAXParser_delegateElementProcessing(
                  *NULL
                  : MultiRef_getStartCallback()
                  : MultiRef_getEndCallback());
               return;

            other;
               XMLSAXParser_delegateElementProcessing(
                  userdata
                  : %paddr('impl_getProfilesRpcStart')
                  : %paddr('impl_getProfilesRpcEnd'));
              return;
            endsl;

         endsl;

         return;

      /end-free
      *
     P SOAPMessage_Envelope...
     P                 E
      *
      * =====================================================================
      *   SOAP message: fault information
      * =====================================================================
     P SOAPMessage_FaultStart...
     P                 B
      *
     D SOAPMessage_FaultStart...
     D                 PI
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
     D fault...
     D                 DS                  based(userdata)
     D                                     likeds(wsdl_soapFault_t )
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (depth = 1);
            return;
         endif;

         select;
         when (name = 'detail');
            XMLSAXParser_delegateElementProcessing(
               %addr(fault.detail)
               : %paddr('SOAPMessage_FaultDetailStart')
               : %paddr('SOAPMessage_FaultDetailEnd'));
         endsl;

      /end-free
      *
     P SOAPMessage_FaultStart...
     P                 E
      *
      * =====================================================================
      *   SOAP message: fault information
      * =====================================================================
     P SOAPMessage_FaultEnd...
     P                 B
      *
     D SOAPMessage_FaultEnd...
     D                 PI
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   value                    65535A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
     D fault...
     D                 DS                  based(userdata)
     D                                     likeds(wsdl_soapFault_t )
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (depth = 1);
            return;
         endif;

         select;
         when (name = 'faultcode');
            fault.code = value;
         when (name = 'faultstring');
            fault.string = value;
         endsl;

      /end-free
      *
     P SOAPMessage_FaultEnd...
     P                 E
      *
      * =====================================================================
      *   SOAP message: fault details
      * =====================================================================
     P SOAPMessage_FaultDetailStart...
     P                 B
      *
     D SOAPMessage_FaultDetailStart...
     D                 PI
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
     D detail...
     D                 DS                  based(userdata)
     D                                     likeds(wsdl_soap_faultDetail_t)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (depth = 1);
            return;
         endif;

         select;
         endsl;

      /end-free
      *
     P SOAPMessage_FaultDetailStart...
     P                 E
      *
      * =====================================================================
      *   SOAP message: fault details
      * =====================================================================
     P SOAPMessage_FaultDetailEnd...
     P                 B
      *
     D SOAPMessage_FaultDetailEnd...
     D                 PI
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   value                    65535A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      *
     D detail...
     D                 DS                  based(userdata)
     D                                     likeds(wsdl_soap_faultDetail_t)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (depth = 1);
            return;
         endif;

         select;
         when (name = 'hostname');
            detail.hostname = value;
         endsl;

      /end-free
      *
     P SOAPMessage_FaultDetailEnd...
     P                 E
      *
      * =====================================================================
      *   SOAP message: NULL callback procedure
      * =====================================================================
     P SOAPMessage_unexpectedElementStart...
     P                 B
      *
     D SOAPMessage_unexpectedElementStart...
     D                 PI
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (ignoreUnexpectedSoapHeader());
            http_DebugLog_appendText(
               'Warning: Received unexpected Soap header: <' + name + '>');
            return;
         endif;

         if (f_exist('WSDL2RPG': '*LIBL': '*MSGF'));
            clear USR0042;
            USR00421 = 'SOAPMessage_unexpectedElementStart';
            USR00422 = 'SOAPMessage_unexpectedElementEnd';
            AppMsg_sendCancelMsg(AppMsg_newError('USR0042': USR0042));
         else;
            AppMsg_sendCancelMsg(
               f_newMsg('CPF9898'
                     : 'Unexpected Soap element received from web service.'
                     : '*ESCAPE'
                     : 'QCPFMSG'));
         endif;

         return;

      /end-free
      *
     P SOAPMessage_unexpectedElementStart...
     P                 E
      *
      * =====================================================================
      *   SOAP message: NULL callback procedure
      * =====================================================================
     P SOAPMessage_unexpectedElementEnd...
     P                 B
      *
     D SOAPMessage_unexpectedElementEnd...
     D                 PI
     D   userdata                      *   value
     D   depth                       10I 0 value
     D   namespace                 1024A   varying const
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   value                    65535A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (ignoreUnexpectedSoapHeader());
            http_DebugLog_appendText(
               'Warning: Received unexpected Soap header: ' + value);
            http_DebugLog_appendText(
               'Warning: Received unexpected Soap header: </' + name + '>');
            return;
         endif;

         if (f_exist('WSDL2RPG': '*LIBL': '*MSGF'));
            clear USR0042;
            USR00421 = 'SOAPMessage_unexpectedElementStart';
            USR00422 = 'SOAPMessage_unexpectedElementEnd';
            AppMsg_sendCancelMsg(AppMsg_newError('USR0042': USR0042));
         else;
            AppMsg_sendCancelMsg(
               f_newMsg('CPF9898'
                     : 'Unexpected Soap element received from web service.'
                     : '*ESCAPE'
                     : 'QCPFMSG'));
         endif;

         return;

      /end-free
      *
     P SOAPMessage_unexpectedElementEnd...
     P                 E
      *
      * =====================================================================
      *   Specifies, whether unexpected Soap headers are ignored or not.
      * =====================================================================
     P ignoreUnexpectedSoapHeader...
     P                 B
      *
     D ignoreUnexpectedSoapHeader...
     D                 PI              N
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         return cFalse;

      /end-free
      *
     P ignoreUnexpectedSoapHeader...
     P                 E
      *
      * =====================================================================
      *   Registers an user callback procedure, that is called whenever
      *   a web service requires user authentification.
      * =====================================================================
     P Inventory_registerLoginCallback...
     P                 B                   export
      *
     D Inventory_registerLoginCallback...
     D                 PI
  D  D  i_pLoginProc                   *   value  procptr
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         g_getLoginDataImpl = i_pLoginProc;

         return;

      /end-free
      *
     P Inventory_registerLoginCallback...
     P                 E
      *
      * =====================================================================
      *   Http: Returns the last HTTP error (code) that occurred.
      * =====================================================================
     P Inventory_isError...
     P                 B                   export
      *
     D Inventory_isError...
     D                 PI              N
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         if (g_errors.errType = WSDL_HTTP_SUCCESS);
            return cFalse;
         else;
            return cTrue;
         endif;

      /end-free
      *
     P Inventory_isError...
     P                 E
      *
      * =====================================================================
      *   Http: Returns the last HTTP error (code) that occurred.
      * =====================================================================
     P Inventory_HttpError_getCode...
     P                 B                   export
      *
     D Inventory_HttpError_getCode...
     D                 PI                  like(wsdl_http_ErrorNo_t  )
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         return g_errors.httpError.no;

      /end-free
      *
     P Inventory_HttpError_getCode...
     P                 E
      *
      * =====================================================================
      *   Http: Returns the last HTTP error (text) that occurred.
      * =====================================================================
     P Inventory_HttpError_getText...
     P                 B                   export
      *
     D Inventory_HttpError_getText...
     D                 PI                  like(wsdl_http_ErrorText_t)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         return g_errors.httpError.text;

      /end-free
      *
     P Inventory_HttpError_getText...
     P                 E
      *
      * =====================================================================
      *   Soap: Returns the last SOAP error (code) that occurred.
      * =====================================================================
     P Inventory_SoapError_getCode...
     P                 B                   export
      *
     D Inventory_SoapError_getCode...
     D                 PI                  like(wsdl_soap_faultcode_t  )
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         return g_errors.soapFault.code;

      /end-free
      *
     P Inventory_SoapError_getCode...
     P                 E
      *
      * =====================================================================
      *   Soap: Returns the last SOAP error (text) that occurred.
      * =====================================================================
     P Inventory_SoapError_getText...
     P                 B                   export
      *
     D Inventory_SoapError_getText...
     D                 PI                  like(wsdl_soap_faultstring_t)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         return g_errors.soapFault.string;

      /end-free
      *
     P Inventory_SoapError_getText...
     P                 E
      *
      * =====================================================================
      *   XML: Returns the last XML error (code) that occurred.
      * =====================================================================
     P Inventory_XmlError_getCode...
     P                 B                   export
      *
     D Inventory_XmlError_getCode...
     D                 PI                  like(wsdl_xml_ErrorNo_t    )
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         return g_errors.xmlError.code;

      /end-free
      *
     P Inventory_XmlError_getCode...
     P                 E
      *
      * =====================================================================
      *   XML: Returns the last XML error (text) that occurred.
      * =====================================================================
     P Inventory_XmlError_getText...
     P                 B                   export
      *
     D Inventory_XmlError_getText...
     D                 PI                  like(wsdl_xml_ErrorText_t  )
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         return g_errors.xmlError.text;

      /end-free
      *
     P Inventory_XmlError_getText...
     P                 E
      *
      * =====================================================================
      *   Returns the file name of the attachment that is associated to
      *   a given content ID.
      * =====================================================================
     P Inventory_Attachments_get...
     P                 B                   export
      *
     D Inventory_Attachments_get...
     D                 PI                  like(wsdl_path_t     )
     D  i_attachmentID...
     D                                     const  like(wsdl_attachmentID_t )
      *
     D fileName        S                   like(wsdl_path_t     ) inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         fileName = Attachments_get(Attachments_theInstance()
                                    : cSERVICE_UUID
                                    : i_attachmentID);
         return fileName;

      /end-free
      *
     P Inventory_Attachments_get...
     P                 E
      *
      * =====================================================================
      *   Returns the file name of the attachment that is associated to
      *   a given index.
      * =====================================================================
     P Inventory_Attachments_getAtPos...
     P                 B                   export
      *
     D Inventory_Attachments_getAtPos...
     D                 PI                  likeds(wsdl_attachment_t )
     D  i_index                      10I 0 const
      *
     D attachment      DS                  likeds(wsdl_attachment_t ) inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         attachment = Attachments_getAtPos(Attachments_theInstance()
                                           : cSERVICE_UUID
                                           : i_index);
         return attachment;

      /end-free
      *
     P Inventory_Attachments_getAtPos...
     P                 E
      *
      * =====================================================================
      *   Returns the number of attachments that were downloaded with
      *   the last call of the web service.
      * =====================================================================
     P Inventory_Attachments_getNumE...
     P                 B                   export
      *
     D Inventory_Attachments_getNumE...
     D                 PI            10I 0
      *
     D numE            S             10I 0 inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         numE = Attachments_getNumAttachments(Attachments_theInstance()
                                              : cSERVICE_UUID);
         return numE;

      /end-free
      *
     P Inventory_Attachments_getNumE...
     P                 E
      *
      * =====================================================================
      *   Removes all attachments from the list of attachments of
      *   this web service.
      * =====================================================================
     P Inventory_Attachments_removeAll...
     P                 B                   export
      *
     D Inventory_Attachments_removeAll...
     D                 PI
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         Attachments_removeAll(Attachments_theInstance()
                               : cSERVICE_UUID);
         return;

      /end-free
      *
     P Inventory_Attachments_removeAll...
     P                 E
      *
      * =====================================================================
    R *   *** private/experimental ***
      *   Enables/disables a workaround for Web services that are driven
      *   by Axis and that are affected by the AXIS-2095 bug.
      *   Export this procedure if you really need it.
      * =====================================================================
     P Inventory_enableAxis2095...
     P                 B
      *
     D Inventory_enableAxis2095...
     D                 PI
     D  i_isEnabled                    N   const
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         deprecated();

         g_isAXIS_2095 = i_isEnabled;

         return;

      /end-free
      *
     P Inventory_enableAxis2095...
     P                 E
      *
      * =====================================================================
      *   Specifies the name of the folder where to put attachments in.
      * =====================================================================
     P Inventory_setAttachmentFolder...
     P                 B                   export
      *
     D Inventory_setAttachmentFolder...
     D                 PI
     D  i_folder                   1024A   const  varying options(*varsize)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         g_attachmentFolder = i_folder;

         g_attachmentFolder = %trimR(%xlate('Ö': '/': g_attachmentFolder));
         if (not f_endsWith('/': g_attachmentFolder));
            g_attachmentFolder = g_attachmentFolder + '/';
         endif;

         return;

      /end-free
      *
     P Inventory_setAttachmentFolder...
     P                 E
      /IF DEFINED(LOGGING_SERVICE)
      *
      * =====================================================================
      *   Starts the Log4rpg logging service.
      * =====================================================================
     P Inventory_startLoggingService...
     P                 B                   export
      *
     D Inventory_startLoggingService...
     D                 PI
     D  i_path                             const  like(LOG4RPG_path_t   )
     D                                            options(*nopass)
     D  i_waitMinutes                10I 0 const  options(*nopass)
     D  i_unit                       10A   const  options(*nopass)
      *
      *  Parameter positions
     D p_path          C                   1
     D p_waitMinutes   C                   2
     D p_unit          C                   3
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         LoggerStub_loadSrvPgm();

         select;
         when (%parms() >= p_unit);
            Configurator_loadAndWatchPropertiesConfiguration(
                                                i_path: i_waitMinutes: i_unit);
         when (%parms() >= p_waitMinutes);
            Configurator_loadAndWatchPropertiesConfiguration(
                                                i_path: i_waitMinutes);
         when (%parms() >= p_path);
            Configurator_loadPropertiesConfiguration(i_path);
         other;
            Configurator_loadDefaultConfiguration();
         endsl;

         return;

      /end-free
      *
     P Inventory_startLoggingService...
     P                 E
      /ENDIF
      *
      * =====================================================================
      *   Web service: Enables/disables the debug log of HTTP API
      * =====================================================================
     P Inventory_setHttpDebug...
     P                 B                   export
      *
     D Inventory_setHttpDebug...
     D                 PI
     D   i_status                      N   const
     D   i_fileName                 500A   const  varying  options(*nopass)
      *
      *  Parameter positions
     D p_fileName      C                   2
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         g_httpDebug.status = i_status;

         if (%parms() >= p_fileName);
            g_httpDebug.fileName = i_fileName;
         else;
            g_httpDebug.fileName = HTTP_API_DEFAULT_LOG_FILE;
         endif;

         if (i_status);
            http_DebugLog_open(g_httpDebug.fileName);
         else;
            http_DebugLog_close();
         endif;

         return;

      /end-free
      *
     P Inventory_setHttpDebug...
     P                 E
      *
      * =====================================================================
      *   Web service: Sets the proxy server to use for the connection
      * =====================================================================
     P Inventory_setProxy...
     P                 B                   export
      *
     D Inventory_setProxy...
     D                 PI
     D  i_server                    256A   const
     D  i_port                       10I 0 const
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         g_proxy.server = i_server;
         g_proxy.port   = i_port;

         return;

      /end-free
      *
     P Inventory_setProxy...
     P                 E
      *
      * =====================================================================
      *   Web service: Returns the endpoint of the Web service
      * =====================================================================
     P Inventory_getEndpoint...
     P                 B                   export
      *
     D Inventory_getEndpoint...
     D                 PI         32767A          varying
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         return g_url;

      /end-free
      *
     P Inventory_getEndpoint...
     P                 E
      *
      * =====================================================================
      *   Web service: Sets the endpoint of the Web service
      * =====================================================================
     P Inventory_setEndpoint...
     P                 B                   export
      *
     D Inventory_setEndpoint...
     D                 PI
     D  i_url                     32767A   const varying  options(*varsize)
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         g_url = %subst(i_url: 1: %len(i_url));

         return;

      /end-free
      *
     P Inventory_setEndpoint...
     P                 E
      *
      * =====================================================================
      *   Web service: Returns the host name of the Web Service endpoint
      * =====================================================================
     P Inventory_getHost...
     P                 B                   export
      *
     D Inventory_getHost...
     D                 PI         32767A          varying
      *
     D tmpUrl          S                   like(url_t ) inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         tmpUrl = URL_new(g_url);

         return URL_getHost(tmpUrl);

      /end-free
      *
     P Inventory_getHost...
     P                 E
      *
      * =====================================================================
      *   Web service: Sets the host name of the Web service endpoint
      * =====================================================================
     P Inventory_setHost...
     P                 B                   export
      *
     D Inventory_setHost...
     D                 PI
     D  i_host                    32767A   const varying  options(*varsize)
      *
     D tmpUrl          S                   like(url_t ) inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         tmpUrl = URL_new(g_url);
         URL_setHost(tmpUrl: %subst(i_host: 1: %len(i_host)));
         g_url = URL_toString(tmpUrl);

         return;

      /end-free
      *
     P Inventory_setHost...
     P                 E
      *
      * =====================================================================
      *   Web service: Returns the port of the Web Service endpoint
      * =====================================================================
     P Inventory_getPort...
     P                 B                   export
      *
     D Inventory_getPort...
     D                 PI            10I 0
      *
     D tmpUrl          S                   like(url_t ) inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         tmpUrl = URL_new(g_url);

         return URL_getPort(tmpUrl);

      /end-free
      *
     P Inventory_getPort...
     P                 E
      *
      * =====================================================================
      *   Web service: Sets the port of the Web service endpoint
      * =====================================================================
     P Inventory_setPort...
     P                 B                   export
      *
     D Inventory_setPort...
     D                 PI
     D  i_port                       10I 0 const
      *
     D tmpUrl          S                   like(url_t ) inz
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free

         tmpUrl = URL_new(g_url);
         URL_setPort(tmpUrl: i_port);
         g_url = URL_toString(tmpUrl);

         return;

      /end-free
      *
     P Inventory_setPort...
     P                 E
      *  
__________________________________

The Caller, modified to include the input parms and to show the result via DSPLY is as follows:

      * =====================================================================
      *  Generated by WSDL2RPG 1.14beta11 / 23.07.2011
      *  Built on Aug 18, 2011 (13:26:18)
      *  Built for V6R1M0
      *  Based on WS_PGM v1.14
      * =====================================================================
      *   Sample program to show how to call the
      *     Inventory_getProfiles()
      *   Web service.
      * =====================================================================
      *   Log4rpg Logging Service
      /UNDEFINE LOGGING_SERVICE
      * =====================================================================
      *   Pre-Compiler tags used by STRPREPRC to retrieve creation
      *   commands from the source member.
      * ---------------------------------------------------------------------
      * >>PRE-COMPILER<<
      *   >>CRTCMD<< CRTRPGMOD    MODULE(&LI/&OB) +
      *                           SRCFILE(&SL/&SF) +
      *                           SRCMBR(&SM);
      *   >>COMPILE<<
      *     >>PARM<< TRUNCNBR(*NO);
      *     >>PARM<< DBGVIEW(*LIST);
      *   >>END-COMPILE<<
      *   >>EXECUTE<<
      *   >>CMD<<    CRTPGM       PGM(&LI/&OB) +
      *                           MODULE(*PGM) +
      *                           BNDSRVPGM(*LIBL/TSTINVEN01  +
      *                                     ) +
      *                           DETAIL(*BASIC) +
      *                           ACTGRP(*NEW);
      * >>END-PRE-COMPILER<<
      * =====================================================================
     H DEBUG
     H OPTION(*SRCSTMT : *NODEBUGIO)
     H EXTBININT(*YES)
      *
      *  Include generated web service stub module to
      *  define the prototype of the web service procedure
      *  and the required type definitions (aka reference fields).
      /DEFINE PROTOTYPE_TSTINVEN01
 CPY  /COPY MKOESTER/QRPGLESRC,TSTINVEN01
      /UNDEFINE PROTOTYPE_TSTINVEN01
      *
      /IF DEFINED(LOGGING_SERVICE)
 CPY  /COPY QWSDL2RPG,PLOG4RPG                     Log4rpg: The Log4rpg service program
 CPY  /COPY QWSDL2RPG,PLOG4RPG00                   Log4rpg: The Log4rpg stub module
      /ENDIF
      *
      *  Program entry point
     D TSTGETPROF...
     D                 PR
      *
      *  Sends a message to the command line.
     D sndMsg...
     D                 PR                  extproc('sndMsg')
     D  i_text                      128A   value  varying
      *
      * =====================================================================
      *  Program entry point
      * =====================================================================
     D TSTGETPROF...
     D                 PI
      *
      *  Web service error message text
     D errText         S                   like(wsdl_errText_t ) inz
      *
      *  Request message
      *  These fields needs to be filled with reasonable values
      *  right before calling the web service.
     D in0             DS                  likeds(apachesoap_Map_t)
     D                                     inz
      *
      *  Response message
      *  This structure contains the result values returned by
      *  the web service.
     D getProfilesRpc  DS                  likeds(impl_getProfilesRpc_t)
     D                                     inz
      *
      *  Text of messages sent to the command line
     D text            S            128A   varying inz

 mk  D DisplayThis     s             40a
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free
      /if defined(LOGGING_SERVICE)

         // Enable Log4rpg, in order to debug WSDL2RPG
         // (Enable Log4rpg when you are ask for it by the developer)
         Inventory_startLoggingService(
            'mbr:QWSDL2RPG.LOG4RPG');
      /endif

         // Enable/disable http api debug log
         // (Enable the http api debug log in case of problems with the web service)
         Inventory_setHttpDebug(
             *ON: '/tmp/httpapi_debug.txt');   // Default path of http api

         // Specify a proxy server if your network requires it.
         // Inventory_setProxy(
         //    'your.proxy.server': 8080);

         // Set the paramater values of the request message
         // of the web service.
         //    assign values here
         // Set number of array items:
 mk      in0.item.x = 1;
         // Set array item values:
         in0.item.mapItem(in0.item.x).key = 'profileName';
         in0.item.mapItem(in0.item.x).value = 'A_646MOD Bridged';

         // Now let's call the web service.
         getProfilesRpc =
            Inventory_getProfiles(
                in0:
                errText);

         // If the Web service finished successfully ...
 B01     if (not Inventory_isError());
            // ... get response data from response data structure

 mk      DisplayThis = %editc(GetProfilesRpc.getProfilesReturn.x : '1');
 mk          DSPLY (%trim(DisplayThis));

 mk      DisplayThis = %trim(getProfilesRpc.getProfilesReturn.item(1));
 mk          DSPLY (%trim(DisplayThis));

 X01     else;
            // ... else show error messages ordered by priority:
            // 1. HTTP error information
            text = %char(
                      Inventory_HttpError_getCode()
                      ) + ': ' +
                   Inventory_HttpError_getText()
                   ;
            sndMsg(text);
            // 2. SOAP error information
 B02        if (Inventory_SoapError_getCode()
                  <> '');
               text = Inventory_SoapError_getCode()
                      + ': ' +
                      Inventory_SoapError_getText()
                      ;
               sndMsg(text);
 E02        endif;
            // 3. XML parser error information
 B02        if (Inventory_XmlError_getCode()
                  <> 0);
               text = %char(Inventory_XmlError_getCode())
                      + ': ' +
                      Inventory_XmlError_getText()
                      ;
               sndMsg(text);
 E02        endif;
 E01     endif;

         *inlr = *on;

      /end-free
      *
      * =====================================================================
      *  *** private ***
      *  Sends a message to the command line.
      * =====================================================================
     P sndMsg...
     P                 B
      *
     D sndMsg...
     D                 PI
     D  i_text                      128A   value  varying
      *
      *  Local fields
     D msgKey          S              4A   inz
      *
      *  Qualified message file name
     D qMsgF           DS                  qualified inz
     D  name                         10A
     D  lib                          10A
      *
      *  API error code
     D errCode         DS                  qualified inz
     D  bytPrv                       10I 0
     D  bytAvl                       10I 0
     D  excID                         7A
     D  reserved                      1A
     D  excDta                      256A
      *
      *  Send Program Message (QMHSNDPM) API
     D QMHSNDPM        PR                         extpgm('QMHSNDPM')
     D   i_msgID                      7A   const
     D   i_qMsgF                     20A   const
     D   i_msgData                32767A   const  options(*varsize )
     D   i_length                    10I 0 const
     D   i_msgType                   10A   const
     D   i_callStkE               32767A   const  options(*varsize )
     D   i_callStkC                  10I 0 const
     D   o_msgKey                     4A
     D   io_ErrCode               32767A          options(*varsize )
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      /free
         clear qMsgF;
         qMsgF.name = 'QCPFMSG';
         qMsgF.lib  = '*LIBL';
         clear errCode;
         errCode.bytPrv = %size(errCode);
         QMHSNDPM('CPF9897': qMsgF: i_text: %len(i_text): '*INFO'
                  : '*CTLBDY': 1: msgKey: errCode);
         return;
      /end-free
      *
     P sndMsg...
     P                 E
__________________________________

HTTPAPI Ver 1.24beta11 released 2010-09-09
OS/400 Ver V6R1M0

New iconv() objects set, PostRem=1208. PostLoc=0. ProtRem=819. ProtLoc=0
http_persist_open(): entered
http_long_ParseURL(): entered
DNS resolver retrans: 2
DNS resolver retry  : 2
DNS resolver options: x'00000136'
DNS default domain: GSTNETWORKS.NET
DNS server found: 12.6.236.126
DNS server found: 12.160.200.5
http_persist_post(): entered
http_long_ParseURL(): entered
http_setauth(): entered
do_oper(POST): entered
POST /axis/services/Inventory HTTP/1.1
Host: 192.168.41.252:9090
User-Agent: http-api/1.24
Content-Length: 632
Authorization: Basic cm9vdDpwdWJsaWM=
Content-Type: text/xml
SOAPAction: 


sendraw(): entered
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:apachesoap="http://xml.apache.org/xml-soap"; xmlns:impl="urn:Inventory" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";><soapenv:Body><impl:getProfiles soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";><in0 xsi:type="apachesoap:Map"><item xsi:type="apachesoap:mapItem"><key>profileName</key><value>A_646MOD Bridged</value></item></in0></impl:getProfiles></soapenv:Body></soapenv:Envelope>
recvresp(): entered
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=9343C6FFE7D8F2677F2197179B66F5C9; Path=/axis
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Date: Thu, 18 Aug 2011 18:10:08 GMT


SetError() #13: HTTP/1.1 200 OK
recvresp(): end with 200
recvdoc parms: chunked 0
header_load_cookies() entered
cookie_parse() entered
cookie =  JSESSIONID=9343C6FFE7D8F2677F2197179B66F5C9; Path=/axis
cookie attr JSESSIONID=9343C6FFE7D8F2677F2197179B66F5C9
cookie attr Path=/axis
recvchunk(): entered
get_chunk_size(): entered
2000

chunk size = 8192
get_chunk_size returned 8192
calling comm_blockread
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";><soapenv:Body><ns1:getProfilesResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns1="urn:Inventory"><getProfilesReturn soapenc:arrayType="xsd:anyType[1]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";><getProfilesReturn href="#id0"/></getProfilesReturn></ns1:getProfilesResponse><multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; xsi:type="ns2:Map" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; xmlns:ns2="http://xml.apache.org/xml-soap";><item><key xsi:type="soapenc:string">WL_COUNTRY</key><value xsi:type="soapenc:string">WL_COUNTRY_US</value></item><item><key xsi:type="soapenc:string">WL_DEFAULT_TX_KEY</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">WL_WPA2_TKIP</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">displayName</key><value xsi:type="soapenc:string">Profile_RG General_A_646MOD Bridged</value></item><item><key xsi:type="soapenc:string">failureCount</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_INET_VCI</key><value xsi:type="soapenc:string">35</value></item><item><key xsi:type="soapenc:string">RG_DSCP_STATUS_1</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">WL_WPA2_AES_CCMP</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_SUBSCRIBER_USER_PASSWORD</key><value xsi:type="soapenc:string">admin</value></item><item><key xsi:type="soapenc:string">stringstatus</key><value xsi:type="soapenc:string">Clear</value></item><item><key xsi:type="soapenc:string">RG_SNTP_SERVER</key><value xsi:type="soapenc:string">192.168.41.5</value></item><item><key xsi:type="soapenc:string">RG_PORT_SERVICE_HPNA</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">uClass</key><value xsi:type="soapenc:string">null</value></item><item><key xsi:type="soapenc:string">parentKey</key><value xsi:type="soapenc:string">NULL</value></item><item><key xsi:type="soapenc:string">RG_ROUTE_SUBNET_4</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_INET_FRAME_TYPE</key><value xsi:type="soapenc:string">Tagged</value></item><item><key xsi:type="soapenc:string">RG_ROUTE_SUBNET_3</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_ROUTE_SUBNET_2</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_ROUTE_SUBNET_1</key><value xsi:type="soapenc:string">12.160.207.222</value></item><item><key xsi:type="soapenc:string">WL_AUTO_CHANNEL</key><value xsi:type="soapenc:string">Enabled</value></item><item><key xsi:type="soapenc:string">RG_VOIP_VPI</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_END_USER_LOGIN</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_PORT_SERVICE_WL</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_MGMT_SUBNET_NAME_1</key><value xsi:type="soapenc:string"></value></item><item><key xsi:type="soapenc:string">RG_PORT_UP_RATE_HPNA</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_TIME_ZONE</key><value xsi:type="soapenc:string">EST</value></item><item><key xsi:type="soapenc:string">RG_PORT_SERVICE_GLAN</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_INET_VLAN</key><value xsi:type="soapenc:string">800</value></item><item><key xsi:type="soapenc:string">WL_STATUS</key><value xsi:type="soapenc:string">Enabled</value></item><item><key xsi:type="soapenc:string">managed</key><value xsi:type="soapenc:string">true</value></item><item><key xsi:type="soapenc:string">RG_VOIP_VCI</key><value xsi:type="soapenc:string">35</value></item><item><key xsi:type="soapenc:string">WL_WPA2</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_PORT_DOWN_RATE_HPNA</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">WL_WPA1</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_MGMT_VPI</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_VOIP_FRAME_TYPE</key><value xsi:type="soapenc:string">Tagged</value></item><item><key xsi:type="soapenc:string">RG_ADDITIONAL_VLAN_INCLUDE_VIDS</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_PORT_SERVICE_6</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">status</key><value xsi:type="soapenc:string">5</value></item><item><key xsi:type="soapenc:string">RG_PORT_SERVICE_5</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_PORT_SERVICE_4</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_PORT_SERVICE_3</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_SUPER_USER_LOGIN</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_PORT_SERVICE_2</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_BOOTSTRAP_VLAN</key><value xsi:type="soapenc:string">2100</value></item><item><key xsi:type="soapenc:string">RG_PORT_UP_RATE_GLAN</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_SERVICE_1</key><value xsi:type="soapenc:string">RG_INTERNET_SERVICE</value></item><item><key xsi:type="soapenc:string">RG_CES_VLAN</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">classname</key><value xsi:type="soapenc:string">ProfileMO</value></item><item><key xsi:type="soapenc:string">WL_PROFILE</key><value xsi:type="soapenc:string">WL_MIXED_G_WIFI</value></item><item><key xsi:type="soapenc:string">tester</key><value xsi:type="soapenc:string">ping</value></item><item><key xsi:type="soapenc:string">RG_MGMT_VCI</key><value xsi:type="soapenc:string">35</value></item><item><key xsi:type="soapenc:string">RG_PORT_DOWN_RATE_GLAN</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">WL_802_1_AUTHENTICATION</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_PORT_ADMIN_STATE_6</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_PORT_ADMIN_STATE_5</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_FLOW_CONTROL_1</key><value xsi:type="soapenc:string">Enabled</value></item><item><key xsi:type="soapenc:string">RG_PORT_ADMIN_STATE_4</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_MGMT_VLAN</key><value xsi:type="soapenc:string">2101</value></item><item><key xsi:type="soapenc:string">RG_PORT_ADMIN_STATE_3</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_PORT_ADMIN_STATE_HPNA</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_PORT_ADMIN_STATE_2</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_PORT_ADMIN_STATE_1</key><value xsi:type="soapenc:string">Enabled</value></item><item><key xsi:type="soapenc:string">type</key><value xsi:type="soapenc:string">Profile</value></item><item><key xsi:type="soapenc:string">RG_ROUTE_GATEWAY_1</key><value xsi:type="soapenc:string">10.252.0.1</value></item><item><key xsi:type="soapenc:string">RG_PORT_DOWN_RATE_6</key><value xsi:type="soapenc:string">0</value></
comm_blockread returned 8192


get_chunk_size(): entered
1a0d

chunk size = 6669
get_chunk_size returned 6669
calling comm_blockread
item><item><key xsi:type="soapenc:string">RG_PORT_UP_RATE_6</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_DOWN_RATE_5</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_UP_RATE_5</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_DOWN_RATE_4</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_UP_RATE_4</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_DOWN_RATE_3</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_SPEED_GLAN</key><value xsi:type="soapenc:string">RG_AUTO</value></item><item><key xsi:type="soapenc:string">RG_PORT_UP_RATE_3</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_DOWN_RATE_2</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_UP_RATE_2</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_DOWN_RATE_1</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_PORT_UP_RATE_1</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_VOIP_VLAN</key><value xsi:type="soapenc:string">2002</value></item><item><key xsi:type="soapenc:string">WL_AUTHENTICATION</key><value xsi:type="soapenc:string">WL_AUTH_OPEN</value></item><item><key xsi:type="soapenc:string">RG_SUBSCRIBER_USER_LOGIN</key><value xsi:type="soapenc:string">admin</value></item><item><key xsi:type="soapenc:string">name</key><value xsi:type="soapenc:string">Profile_RG General_A_646MOD Bridged</value></item><item><key xsi:type="soapenc:string">RG_PORT_ADMIN_STATE_GLAN</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_INCLUDE_PORT_ASSIGNMENT</key><value xsi:type="soapenc:string">RG_PROFILE_SETTINGS</value></item><item><key xsi:type="soapenc:string">WL_802_1_REKEY_TIMEOUT</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_PORT_SPEED_6</key><value xsi:type="soapenc:string">RG_AUTO</value></item><item><key xsi:type="soapenc:string">RG_INCLUDE_WIRELESS_PARAMS</key><value xsi:type="soapenc:string">RG_PROFILE_SETTINGS</value></item><item><key xsi:type="soapenc:string">RG_PORT_SPEED_5</key><value xsi:type="soapenc:string">RG_AUTO</value></item><item><key xsi:type="soapenc:string">RG_PORT_SPEED_4</key><value xsi:type="soapenc:string">RG_AUTO</value></item><item><key xsi:type="soapenc:string">RG_PORT_SPEED_3</key><value xsi:type="soapenc:string">RG_AUTO</value></item><item><key xsi:type="soapenc:string">RG_PORT_SPEED_2</key><value xsi:type="soapenc:string">RG_AUTO</value></item><item><key xsi:type="soapenc:string">RG_PORT_SPEED_1</key><value xsi:type="soapenc:string">RG_AUTO</value></item><item><key xsi:type="soapenc:string">webNMS</key><value xsi:type="soapenc:string">NULL</value></item><item><key xsi:type="soapenc:string">RG_LOOP_DETECTION</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">statusPollEnabled</key><value xsi:type="soapenc:string">false</value></item><item><key xsi:type="soapenc:string">childrenKeys</key><value xsi:type="soapenc:string"></value></item><item><key xsi:type="soapenc:string">WL_RTS_THRESHOLD</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">RG_INCLUDE_SERVICE_VLANS</key><value xsi:type="soapenc:string">True</value></item><item><key xsi:type="soapenc:string">WL_FRAG_THRESHOLD</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">isGroup</key><value xsi:type="soapenc:string">false</value></item><item><key xsi:type="soapenc:string">pollInterval</key><value xsi:type="soapenc:string">1800</value></item><item><key xsi:type="soapenc:string">statusUpdateTime</key><value xsi:type="soapenc:string">Fri Jul 02 19:47:03 EDT 2010</value></item><item><key xsi:type="soapenc:string">RG_DISABLE_ON_POWER_FAILURE_1</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">statusChangeTime</key><value xsi:type="soapenc:string">Mon Jan 12 13:57:19 EST 2009</value></item><item><key xsi:type="soapenc:string">RG_VIDEO_VLAN</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">WL_MAX_FRAME_BURST</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">WL_WPA2_PRE_AUTH</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_DAYLIGHT_SAVING</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">RG_MGMT_FRAME_TYPE</key><value xsi:type="soapenc:string">Tagged</value></item><item><key xsi:type="soapenc:string">profileType</key><value xsi:type="soapenc:string">RG General</value></item><item><key xsi:type="soapenc:string">WL_ENCRYPTION</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">RG_GEN_PROFILE_SCOPING</key><value xsi:type="soapenc:string">None</value></item><item><key xsi:type="soapenc:string">WL_TRANSMIT_RATE</key><value xsi:type="soapenc:string">1M</value></item><item><key xsi:type="soapenc:string">RG_ROUTE_MASK_1</key><value xsi:type="soapenc:string">255.255.255.255</value></item><item><key xsi:type="soapenc:string">WL_802_1_KEY_TRANSMISSION</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">profileName</key><value xsi:type="soapenc:string">A_646MOD Bridged</value></item><item><key xsi:type="soapenc:string">RG_SYSTEM_POWER_MGMT</key><value xsi:type="soapenc:string">Enabled</value></item><item><key xsi:type="soapenc:string">failureThreshold</key><value xsi:type="soapenc:string">1</value></item><item><key xsi:type="soapenc:string">isContainer</key><value xsi:type="soapenc:string">false</value></item><item><key xsi:type="soapenc:string">atiText</key><value xsi:type="soapenc:string"></value></item><item><key xsi:type="soapenc:string">RG_INET_VPI</key><value xsi:type="soapenc:string">0</value></item><item><key xsi:type="soapenc:string">WL_HIDE_SSID</key><value xsi:type="soapenc:string">False</value></item><item><key xsi:type="soapenc:string">RG_SPLIT_MANAGEMENT</key><value xsi:type="soapenc:string">Disabled</value></item><item><key xsi:type="soapenc:string">WL_INTRA_BSS_RELAY</key><value xsi:type="soapenc:string">Enabled</value></item></multiRef></soapenv:Body></soapenv:Envelope>
comm_blockread returned 6669


get_chunk_size(): entered
0

chunk size = 0
get_chunk_size returned 0
http_close(): entered

--------------------------------------------------
Date: Thu, 18 Aug 2011 17:37:05 +0200
From: Thomas Raddatz <thomas.raddatz@xxxxxxxxxxx>
Subject: Re: Instructions needed for WSDL2RPG logging set-up
To: HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>
Message-ID: <4E4D31A1.7030108@xxxxxxxxxxx>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

Michael,

Did you already turn on the standard HTTP API logging? If you did not yet do that, please turn on logging by calling procedure *_setHttpDebug(status: 
ifsPathName), eg:

   DownloadAttachment_setHttpDebug(*ON: '/home/raddatz/logFile.log')

Usually the log file tells you each and everything you need to solve the problem.

Thomas.

Am 18.08.2011 16:48, schrieb Koester, Michael:
> I used WSDL2RPG to generate stub and caller program to get details from another platform on our network via a web service provided by the software on that platform.  When I run my test call, I get a "1" as the number of rows returned.  The returned row is blank.  Don't know if I'm sending the values to the service properly or not.  I am not getting an error, but I am not getting the same result as what shows in the Northbound Interface software.
>
> I know that's not enough for you help me solve the problem, but I need instructions to turn on the logging I've seen referenced in this list.  Can the log file be created in a lib/file on the i, or does it have to go to the IFS?
> Once I get that, I may have follow-up questions (with details you can use).  Or I may be able to determine from the log file that my request to the service is incorrect, and resolve that before involving you further.
>
> Thanks much.
>
> Michael Koester
>
-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------