Hello again.
I've ran into a bit of a roadblock with my little project. I've read
and tried everything can find and I'm feeling a bit stuck.
Here is my code - questions at the bottom.:
H BNDDIR('HTTPAPI':'QC2LE')
*----------------------------------------------------------------------
--*
* Program : DSRPERFMON
*
* Description : First kick at the can downloading Truck
Performance data *
* : through SHAW's ESS Web Service.
*
* Programmer : Paul Reid.
*
* Date : May 21,2013
*
*----------------------------------------------------------------------
--*
* WSDL :
*
*
[1]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/
*
* OTSWebSvcs.wsdl
*
*----------------------------------------------------------------------
--*
* SoapUI :
*
* Project Name : ESS Web Services (PMESS)
*
* Interface Name : OTSWebSvcsSoapBinding
*
* Operation name : dequeue2
*
* Request name : HighVolumeDequeue
*
*----------------------------------------------------------------------
--*
* Revision History
*
* ----------------
*
* Revision # : ini01 Date: mm/dd/yyyy Programmer: name
*
* Changes made :
*
* Reason :
*
*----------------------------------------------------------------------
--*
* Prototype call to this program:
*
*----------------------------------------------------------------------
--*
*
D DSRPERFMON PR extpgm('DSRPERFMON')
D lastTransaction...
D 17A
*
D DSRPERFMON PI
D lastTransaction...
D 17A
*
*----------------------------------------------------------------------
--*
* /copy Prototypes:
*
*----------------------------------------------------------------------
--*
*
* Used to consume a Web Service.
/include qrpglesrc,httpapi_h
*
* Used to decode data encrypted in BASE64.
/include qrpglesrc,base64_h
*
* For I/O with the IFS
/include qrpglesrc,ifsio_h
*
*----------------------------------------------------------------------
--*
* Incoming - Procedure to handle data retrieved from the Web
Service. *
*----------------------------------------------------------------------
--*
*
D Incoming PR
D rate 8F
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D value likeds(Xmlstring_t)
D attrs * dim(32767)
D const options(*varsize)
*
*----------------------------------------------------------------------
--*
* Define local date structures:
*
*----------------------------------------------------------------------
--*
*
D XmlString_t...
D DS qualified Template
D Data...
D *
D Len...
D 10i 0
*
*----------------------------------------------------------------------
--*
* Define local variables:
*
*----------------------------------------------------------------------
--*
*
* Scott's variables.
D SOAP S 32767A varying
D rc S 10I 0
D rate S 8F
D Result S 12P 2
*
* Used to assemble the XML SOAP request.
D soapHeader...
D S 32767A varying
D soapBody...
D S 32767A varying
*
* Log.
D dequeue2Log...
D S 1000A varying
*
* Input variables for XML Request.
D subscriberId...
D S 9A varying
D transactionIdIn...
D S 17A varying
*
* Variables for Handling errors returned from the Web Service.
D sendError...
D S 102A inz(*blanks)
D peErrorNo...
D S 10I 0 inz(*zeros)
D errorMessage...
D S 100A inz(*blanks)
*
* Error flag.
D didWeGetAnError...
D S 3A inz('No ')
*
* Data returned that is not encoded.
D var...
D S 50A based(p_var)
D count...
D S 5P 0 inz(*zeros)
D transactionIdOut...
D S 17P 0 inz(*zeros)
*
* Encoded data returned.
D resultVar...
D S A len(2000000) varying
D decodedLen...
D S 10I 0
*
* Output data
D fd1...
D S 10I 0
D len1...
D S 10I 0
*
*----------------------------------------------------------------------
--*
* Mainline:
*
*----------------------------------------------------------------------
--*
*
/free
// Assemble the SOAP Header.
exsr assembleSOAPheader;
// Assemble the SOAP Body.
exsr assembleSOAPbody;
// Assemble complete SOAP XML Request.
SOAP = %trim(soapHeader) + %trim(soapBody);
// Write out to a Log in case we have problems.
dequeue2Log = '/home/PAULRE/dequeue2Log.txt';
http_debug(*ON : dequeue2Log);
// Change the way the XML parser returns the data.
// We need to use pointer since it is so large.
http_XmlReturnPtr(*on);
// Post Reqest.
rc = http_url_post_xml(
'https://www.myshawtracking.ca:443/otsWebWS/services/OTSWebSvcs'
: %addr(SOAP) + 2
: %len(SOAP)
: *NULL
: %paddr(Incoming)
: %addr(rate)
: HTTP_TIMEOUT
: HTTP_USERAGENT
: 'text/xml'
: 'http://www.qualcomm.com/dequeue2');
// Success!
if rc = 1;
// Output performance data to the IFS.
fd1 = open('/home/PAULRE/perfDataXML.xml'
: O_RDWR+O_CREAT+O_TRUNC+O_CCSID
: 438
: 1208);
if fd1 < 0;
// There was an error creating/opening the IFS file.
else;
callp write(fd1 : %addr(resultVar) :
%len(%trim(resultVar)));
if len1 < 1;
// There was an error writing to the IFS file.
else;
// Parse out the performance data and
// write it into our database.
exsr parsePerfData;
endif;
callp close(fd1);
endif;
// Send a message if we get an error.
else;
sendError = *on;
endif;
// The End.
*inlr = *on;
//---------------------------------------------------------------------
--*
// parsePerfData
*
//---------------------------------------------------------------------
--*
begsr parsePerfData;
endsr;
//---------------------------------------------------------------------
--*
// assembleSOAPheader
*
//---------------------------------------------------------------------
--*
begsr assembleSOAPheader;
soapHeader =
'<?xml version="1.0" encoding="utf-8"?>'
+' <soap:Envelope'
+' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'
+'
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing"'
+'
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
+'wss-wssecurity-secext-1.0.xsd"'
+'
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
+'wss-wssecurity-utility-1.0.xsd"'
+' xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
+' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
+'<soap:Header>'
+'<wsse:Security soap:mustUnderstand="1" >'
+'<wsse:UsernameToken>'
+'<wsse:Username>PAULRE@ERBINT</wsse:Username>'
+'<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/'
+'oasis-200401-wss-username-token-profile-1.0#'
+'PasswordText">nor850ton</wsse:Password>'
+'</wsse:UsernameToken>'
+'</wsse:Security>'
+'</soap:Header>';
endsr;
//---------------------------------------------------------------------
--*
// assembleSOAPbody;
*
//---------------------------------------------------------------------
--*
begsr assembleSOAPbody;
subscriberId = '3';
transactionIdIn = %trim(lastTransaction);
soapBody =
'<soap:Body>'
+'<dequeue2>'
+'<subscriberId>'
+ subscriberId
+'</subscriberId>'
+'<transactionIdIn>'
+ transactionIdIn
+'</transactionIdIn>'
+'</dequeue2>'
+'</soap:Body>'
+'</soap:Envelope>';
endsr;
/end-free
*
*----------------------------------------------------------------------
--*
* Incoming - Scott Klements procedure used to extract data from
the XML *
* response returned from the Web Service. This
procedure gets *
* run for each element in the XML.
*
*----------------------------------------------------------------------
--*
*
P Incoming B
*
D Incoming PI
D rate 8F
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D value likeds(XmlString_t)
D attrs * dim(32767)
D const options(*varsize)
*
/free
// This value is not base64 encoded.
// I can't figure out how to get data into this field.
if name = 'count';
p_var = value.data;
count = %dec(%subst(var:1:value.len):5:0);
// This value is base 64 encoded, I can't seem to get this to
work?
elseif name = 'transactions';
%len(resultVar) = %len(resultVar : *MAX);
decodedLen = base64_decode( value.data
: value.len
: %addr(resultVar : *data)
: %len(resultVar : *MAX) );
%len(resultVar) = decodedLen;
// This value is not base64 encoded - not sure how to
retrieve it?
// I can't figure out how to get data into this field.
elseif name = 'transactionIdOut';
p_var = value.data;
transactionIdOut = %dec(%subst(var:1:value.len):17:0);
endif;
/end-free
*
P Incoming E
*
The http_url_post_xml executes successfully rc = 1. I get good values
in the variables count and transactionIdOut without any issue.
The data in field resultVar is supposed to be an XML document, however
I am having a very tough time doing anything with this data.Ultimately
what I want to do is parse the data in resultVar and write it into our
database.
When I attempt to view the data in variable resultVar (using STRDBG
from a green screen command line) it is unreadable. It doesn't look
like an XML document.
Next I try and open() a new file in the IFS and write the data to this
file.
fd1 = open('/home/PAULRE/perfDataXML.xml'
: O_RDWR+O_CREAT+O_TRUNC+O_CCSID
: 438
: 1208);
callp write(fd1 : %addr(resultVar) : %len(%trim(resultVar)));
When I look at this file on the IFS using notepad, it indeed looks like
an XML file however the first few characters are messed up. Normally an
XML document starts out like this:
<?xml version="1.0" encoding="UTF-8"?>
When I look at the document I created (using Notepad) it starts out
with 2 blank spaces and then continues like this:
__??xml version="1.0" encoding="UTF-8"?> It also appears as if the
document doesn't have the correct ending. By that I mean that I don't
believe this XML is "well formed" (I believe that's the correct term).
It starts with <tranBlock> however it ends with </tranBl like it was
truncated???
I've tried many different variations on the open() and the write() but
I cannot seem to create a document that I can parse. I've read Scott's
"RPG and the IFS": I found it very helpful, but I know I don't
understand all of it.
I apologize for asking so many questions but I'm really kind of stuck
and would appreciate any help. I'm very new to this and I find it very
challenging.
Also I'm attaching a copy of of perfDataXML that I opened and then
saved in Notepad.
Again...any help would be greatly appreciated, thanks very much and
have a great day!
___________________________________________________________
Paul Reid
Application Developer III
Erb Group of Companies | 290 Hamilton Road | New Hamburg, Ontario | N3A
1A2
Phone: 519.662.6133 ext. 2363
Web: [2]http://www.erbgroup.com/
From: Scott Klement <sk@xxxxxxxxxxxxxxxx>
To: HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>
Date: 12/16/2013 09:51 PM
Subject: Re: Advice on how to process xsd:base64Binary XML
element retrieved from a web service.
Sent by: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
__________________________________________________________________
Hello Paul,
1) Sorry about the data type... should've been A=alphanumeric. I
must've forgotten that.
2) I have no way of knowing what the data is or how you plan to use it,
so I'm not really sure how to help you here. You say it's XML -- okay,
so what do you want to do with the XML? If the goal is to parse it,
then either save it into a variable, and pass that into an XML parser,
or save it to a file (which would be much easier if the data isn't
already EBCDIC -- though, that'd also run slightly slower.)
3) To get this from the pointer, you need a based variable and you need
to use %SUBST.
D var s 50a based(p_var)
D count s 9p 0
D transactionId s 15p 0
/free
.
.
if name = 'count';
p_var = value.data;
count = %dec( %subst(var:1:value.len): 9 : 0 );
elseif name = 'transactionIdOut';
p_var = value.data;
transactionId = %dec( %subst(var:1:value.len) : 15 : 0 );
.
.
Note: All of this is off the top of my head and untested. It's
expected
that you will be able to troubleshoot/fix any problems with it.
On 12/16/2013 3:32 PM, PReid@xxxxxxxxxxxx wrote:
> Hello again.
> I feel like I'm getting closer with this, but I'm still not
there. Just
> to refresh your memory the Response XML that I get back looks
like
> this:
> <soapenv:Body>
> <dequeue2Response>
> <dequeue2Return>
> <count>6</count>
>
>
<transactions>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz...=</transactions>
> <transactionIdOut>58744654</transactionIdOut>
> </dequeue2Return>
> </dequeue2Response>
> </soapenv:Body>
> I implemented the code that Scott recommended into my program,
and I
> think it is working, I just have a few questions.
> #1. I could not define the "resultVar" variable as it was shown
below
> (without a Variable Type). I kept getting the following errors:
> NF3391E The LEN keyword is valid only for Data Structures, or
for type
> A, C, or G; keyword is ignored.
> RNF3365E Keyword VARYING is allowed only for an item defined as
> character, graphic, or UCS-2.
> RNF3438E LIKE keyword is expected for field RESULTVAR but not
found;
> definition is ignored.
> I defined it as Variable Type "C" which i believe means
UCS-2...but I'm
> not sure if this is correct. It might depend on question #2
below.
>
> #2. The "transactions" element is base64 encoded and I believe
that the
> example code that Scott showed me is in fact decoding it...I am
just at
> a loss as to what to do with it. The data that is encoded in the
> element, is itself, an XML document. I am thinking that I should
write
> this out to a temporary file on the IFS and then parse it later
in the
> program?,..but I don't know how to output an XML to the
IFS?...I'm also
> not sure if this is the best way to handle this situation...In
the end
> I want to write this data into files on our IBMi.
>
> #3. The "count" and "transactionIdOut" elements are not base64
encoded,
> however; I do need the data returned in these fields. With the
changes
> that I've made to my "Incoming" procedure, I can't seem to
retrieve the
> data stored in the "value" field. How do I get these values out
of the
> new "value" data structure?
> Below I am including...what I think...is the relevant portions of
code
> from my program. I can supply the entire program if you want.
> *
>
*----------------------------------------------------------------------
> --*
> *
> D Incoming PR
> D rate 8F
> D depth 10I 0 value
> D name 1024A varying const
> D path 24576A varying const
> D value likeds(Xmlstring_t)
> D attrs * dim(32767)
> D const options(*varsize)
> *
> * Log.
> D dequeue2...
> D S 1000A varying
> *
> * Can't figure out how to get the data into these fields.
> D count...
> D S 5P 0 inz(*zeros)
> D transactionIdOut...
> D S 17P 0 inz(*zeros)
> *
> * Not sure if resultVar is defined correctly?
> D resultVar S C len(2000000) varying
> D decodedLen S 10I 0
> *
>
*----------------------------------------------------------------------
> --*
> *
> // Write out a Log.
> dequeue2 = '/home/PAULRE/dequeue2.txt';
> http_debug(*ON : dequeue2);
> // Change the way the XML parser returns the data.
> // We need to use pointer since it is so large...
> http_XmlReturnPtr(*on);
> // Post.
> rc = http_url_post_xml(
>
'https://www.myshawtracking.ca:443/otsWebWS/services/OTSWebSvcs'
> : %addr(SOAP) + 2
> : %len(SOAP)
> : *NULL
> : %paddr(Incoming)
> : %addr(rate)
> : HTTP_TIMEOUT
> : HTTP_USERAGENT
> : 'text/xml'
> : 'http://www.qualcomm.com/dequeue2');
> // Success!!!
> if rc = 1;
> *
>
*----------------------------------------------------------------------
> --*
> *
> P Incoming B
> *
> D Incoming PI
> D rate 8F
> D depth 10I 0 value
> D name 1024A varying const
> D path 24576A varying const
> D value likeds(XmlString_t)
> D attrs * dim(32767)
> D const options(*varsize)
> *
> /free
> // This value is not base64 encoded.
> // I can't figure out how to get data into this field.
> if name = 'count';
> // count = %dec(value:5:0);
> // This value is base 64 encoded, I think this is working,
and the
> data is
> // in resultVar...now what do I do with it?
> elseif name = 'transactions';
> %len(resultVar) = %len(resultVar : *MAX);
> decodedLen = base64_decode( value.data
> : value.len
> : %addr(resultVar : *data)
> : %len(resultVar : *MAX) );
> %len(resultVar) = decodedLen;
> // This value is not base64 encoded - not sure how to
retrieve it?
> // I can't figure out how to get data into this field.
> elseif name = 'transactionIdOut';
> // transactionIdOut = %dec(value:17:0);
> endif;
> /end-free
> *
> P Incoming E
> Thanks very much for your time. If there is any more information
you
> need, just let me know.
> Have a great day!
> ___________________________________________________________
> Paul Reid
> Application Developer III
> Erb Group of Companies | 290 Hamilton Road | New Hamburg, Ontario
| N3A
> 1A2
> Phone: 519.662.6133 ext. 2363
> Web: [1][3]http://www.erbgroup.com/
> From: Scott Klement <sk@xxxxxxxxxxxxxxxx>
> To: HTTPAPI and FTPAPI Projects
<ftpapi@xxxxxxxxxxxxxxxxxxxxxx>
> Date: 12/13/2013 12:56 AM
> Subject: Re: Advice on how to process xsd:base64Binary XML
> element retrieved from a web service.
> Sent by: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
>
__________________________________________________________________
>
> hi Paul,
> HTTPAPI was originally written for OS/400 V4R2, and therefore
does not
> "directly" support variables longer than 65535 characters long.
> However,
> in many cases HTTPAPI does have pointer-based interfaces that
allow
> data
> as large as 16 MB to be returned -- so in order to handle data
"up to
> approx 1 MB" you will want to use the pointer-based interfaces.
You
> can
> use them in conjunction with V7R1's support for large variables.
> Steps:
> 1) Before calling http_url_post_xml(), you should call
> http_XmlReturnPtr(*ON). What this does is change the way the XML
> parser
> returns data. Instead of returning as a 65535 character string,
it
> will
> now return it as a data structure, that has subfield for a
pointer, and
> a subfield with a 10i 0 integer containing the length of the
string in
> bytes.
> D XmlString_t ds qualified Template
> D Data *
> D Len 10i 0
> 2) Change your 'Incoming' procedure (NOTE: you can call this
procedure
> whatever you like, it does not have to be 'Incoming', that was
just a
> name I used as an example) to receive this data structure in
place of
> the 'value' string.
> D Incoming PR
> D rate 8F
> D depth 10I 0 value
> D name 1024A varying const
> D path 24576A varying const
> D value likeds(XmlString_t)
> D attrs * dim(32767)
> D const options(*varsize)
> 3) Now that 'value' is coming in as a pointer, it can be as large
as
> you
> want. You can now pass the 'value' parameter to tbe
base64_decode
> procedure to eliminate the base64 encoding. Personally I like to
use a
> VARYING variable for this sort of thing, and there's a trick to
working
> with VARYING as a pointer... you need to set it's length to the
> maximum length first, then pass the address of only the data
portion,
> then set it's length back to the returned length.
> D resultVar s len(2000000) varying
> %len(resultVar) = %len(resultVar: *MAX);
> decodedlen = base64_decode( value.data
> : value.len
> : %addr(resultVar: *data)
> : %len(ResultVar: *MAX) );
> %len(resultVar) = decodedlen;
> 4) Now you have the decoded data in 'resultVar'. However, you
should
> know that this data will have the exact same binary value that it
had
> when it was encoded. If your data is text and the sender had it
> encoded
> in ASCII (or Unicode), then your data in resultVar will in ASCII,
so
> you'll probably want to translate it to EBCDIC next.
> If the data in resultVar is not text, like an image, PDF, Word
> Document,
> sound file, etc... then you won't want to translate it to
EBCDIC, as
> that would corrupt the data. (That is what is meant by 'binary')
> 5) Not sure what you want to do next, it'll depend on the purpose
of
> this data. Should it be written to the IFS? Stored in a BLOB?
So
> I'll
> leave that part as an exercise for you.
> Good luck....
> On 12/12/2013 9:48 AM, PReid@xxxxxxxxxxxx wrote:
> > Hello everyone. I am not very experienced with Web Services
so
> bear
> > with me. I did a fair bit of research on the various forums
> before
> > posting, but I failed to find a good example of what I am
looking
> for.
> > I'm hoping that someone can help, possibly with an example.
> > I am predominately an RPG programmer. We are running an IBM
Power
> 7 at
> > V7R1, and I have Scott's HTTPAPI V1.24 downloaded and
installed.
> I am
> > using HTTPAPI to consume another Web Service and it works
> beautifully.
> > My latest challenge it that I have consume a Web Service
that
> includes
> > an element in the XML response that is data type
xsd:base64Binary
> and
> > I'm not really sure how to do it. The WSDL for this web
service
> is:
> >
>
[1][2][4]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsd
l/O
> TSW
> > ebSvcs.wsdl
> > The WIKI for this Web Service is:
> >
>
[2][3][5]https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume
+De
> que
> > ue
> > The method that I must consume is named DEQUEUE2.
> > I have created an RPG program that POSTS a request to the
Web
> Service
> > using the following HTTPAPI subprocedure:
> > rc = http_url_post_xml(
> >
> >
'https://www.myshawtracking.ca:443/otsWebWS/services/OTSWebSvcs'
> > : %addr(SOAP) + 2
> > : %len(SOAP)
> > : *NULL
> > : %paddr(Incoming)
> > : %addr(rate)
> > : HTTP_TIMEOUT
> > : HTTP_USERAGENT
> > : 'text/xml'
> > : 'http://www.qualcomm.com/dequeue2');
> > I am receiving rc = 1 which I believe means that I am
> successfully
> > receiving an XML response. FYI - The procedure "Incoming"
was
> copied
> > from Scott's EXAMPLE11.
> > The response XML is as follows.
> > <soapenv:Body>
> > <dequeue2Response>
> > <dequeue2Return>
> > <count>6</count>
> > <transactionIdOut>58744654</transactionIdOut>
> > (transactions>
> >
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dHJjaz4=
> > </transactions>
> > </dequeue2Return>
> > </dequeue2Response>
> > </soapenv:Body>
> > The "transactions" element is xsd:base64Binary and I don't
know
> how to
> > decode it. I have downloaded Scott's BASE64R4 service
program and
> I
> > suspect I'd use procedure BASE64_DECODE, but I'm not sure
how I
> would
> > employ it in this situation. Also...according to the wiki
the
> > "transactions" element could be as large as "Approximately
1mb"
> > although I'm not really sure what they mean by
approximately??
> > The "count" and "transactionIdOut" and not encoded and I
need the
> data
> > in them in addition to the encoded data.
> > I understand that I may not even be using the correct post
> procedure
> > (remember I'm not that experienced) and in the interim I am
going
> to
> > try some of Scott's other procedures.
> > Any help or examples on how to get this data would be much
> appreciated.
> > Thanks!
> > ___________________________________________________________
> > Paul Reid
> > Application Developer III
> > Erb Group of Companies | 290 Hamilton Road | New Hamburg,
Ontario
> | N3A
> > 1A2
> > Phone: 519.662.6133 ext. 2363
> > Web: [3][4][6]http://www.erbgroup.com/
> >
> > References
> >
> > 1.
>
[5][7]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/O
TSW
> ebSvcs.wsdl
> > 2.
>
[6][8]https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+De
que
> ue
> > 3. [7][9]http://www.erbgroup.com/
> >
> >
> >
> >
>
-----------------------------------------------------------------------
> > This is the FTPAPI mailing list. To unsubscribe, please go to:
> > [8][10]http://www.scottklement.com/mailman/listinfo/ftpapi
> >
>
-----------------------------------------------------------------------
>
-----------------------------------------------------------------------
> This is the FTPAPI mailing list. To unsubscribe, please go to:
> [9][11]http://www.scottklement.com/mailman/listinfo/ftpapi
>
-----------------------------------------------------------------------
>
> References
>
> 1. [12]http://www.erbgroup.com/
> 2.
[13]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTS
W
> 3.
[14]https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Dequ
e
> 4. [15]http://www.erbgroup.com/
> 5.
[16]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTS
WebSvcs.wsdl
> 6.
[17]https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Dequ
eue
> 7. [18]http://www.erbgroup.com/
> 8. [19]http://www.scottklement.com/mailman/listinfo/ftpapi
> 9. [20]http://www.scottklement.com/mailman/listinfo/ftpapi
>
>
>
>
-----------------------------------------------------------------------
> This is the FTPAPI mailing list. To unsubscribe, please go to:
> [21]http://www.scottklement.com/mailman/listinfo/ftpapi
>
-----------------------------------------------------------------------
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
[22]http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------
References
1. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/
2. http://www.erbgroup.com/
3. http://www.erbgroup.com/
4. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/O
5. https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+De
6. http://www.erbgroup.com/
7. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTSW
8. https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Deque
9. http://www.erbgroup.com/
10. http://www.scottklement.com/mailman/listinfo/ftpapi
11. http://www.scottklement.com/mailman/listinfo/ftpapi
12. http://www.erbgroup.com/
13. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTSW
14. https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Deque
15. http://www.erbgroup.com/
16. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTSWebSvcs.wsdl
17. https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Dequeue
18. http://www.erbgroup.com/
19. http://www.scottklement.com/mailman/listinfo/ftpapi
20. http://www.scottklement.com/mailman/listinfo/ftpapi
21. http://www.scottklement.com/mailman/listinfo/ftpapi
22. http://www.scottklement.com/mailman/listinfo/ftpapi
Attachment:
perfDataXML.xml
Description: Binary data
----------------------------------------------------------------------- This is the FTPAPI mailing list. To unsubscribe, please go to: http://www.scottklement.com/mailman/listinfo/ftpapi -----------------------------------------------------------------------