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

Re: Marshaller_toDateTime parameters options



Maria,

Obviously that is what happens. But actually the program should not reach
the isStartOfTimezone() statement, because i_timeZone should contain
WSDL_NO_TIMEZONE, right?

I am stuck and I am as corious as I could be to know what it going on here.

So here is what I do not understand what is going wrong:

a) Given that i_timezone contains WSDL_NO_TIMEZONE, then the first
when-statement should return from getXmlTimeZone() with an empty string,
which is what we want for you.

b) Given that i_timezone contains WSDL_LOCAL_TIMEZONE, then the second
when-statement should make the program to retrieve the local timezone.

c) I wonder what is in i_timezone, since the program must go through the
other-branch of the select-block or the result of f_rtvSysval_char() is
something unexpected.

> On isStartOfTimezone procedure there is no code for NO TIME ZONE

isStartOfTimezone() does not need to know anything about WSDL_NO_TIMEZONE,
because the program should not get there, due to a).

Here is what I expect the program to go through:

1) Starting at your generated stub module it should call
Marshaller_toDateTime(), passing WSDL_NO_TIMEZONE as the second parameter:

  '<tns1:timestamp>' +
  Marshaller_toDateTime(
     i_impl_echoDateTime.aDateTimeStructure.timestamp
     : WSDL_NO_TIMEZONE // you need to add that by hand!
     ) +
  '</tns1:timestamp>' +

Please remember that I asked you to modify your generated stub by hand and
add WSDL_NO_TIMEZONE as the second parameter.

2) From Marshaller_toDateTime() it should call getXmlTimeZone() with
parameter i_timeZone:

  if (%parms() >= p_timeZone);
     // the program should go here
     outTimestamp.timeZone = getXmlTimeZone(i_timeZone);
  else;
     outTimestamp.timeZone = getXmlTimeZone(WSDL_LOCAL_TIMEZONE);
  endif;

3) Since the stub passed WSDL_NO_TIMEZONE, the program should return with
an empty string from getXmlTimeZone():

  select;
  when (i_timeZone = WSDL_NO_TIMEZONE);
     // the program should go here
     return '';
  when (i_timeZone = WSDL_LOCAL_TIMEZONE);
     timeZone = f_rtvSysval_char('QUTCOFFSET');
  other;
     timeZone = i_timeZone;
  endsl;

Do you understand why I am that confused?

Please debug your program again, and verify that:

* your stub passes WSDL_NO_TIMEZONE to Marshaller_getDateTime()
* Marshaller_toDateTime() forwards i_timeZone to getXmlTimeZone()
* i_timeZone of getXmlTimeZone() contains WSDL_NO_TIMEZONE

If these three things are true, then tell me, why the program does not take
the first when-statement of getXmlTimeZone().

Breathlessly waiting for your response.

Thomas.

Am 01.12.2014 14:50, schrieb Maria Orcy Rosar:
> 
> Thomas,
> I believe the error is on getXmlTimeZone procedure when is trying to Get and Verify the time zone indicator (line7480 on code below)
> 
> 7469.00     select;                                                       
> 7470.00     when (i_timeZone = WSDL_NO_TIMEZONE);                         
> 7471.00        return'';                                                  
> 7472.00     when (i_timeZone = WSDL_LOCAL_TIMEZONE);                      
> 7473.00        timeZone = f_rtvSysval_char('QUTCOFFSET');                 
> 7474.00     other;                                                        
> 7475.00        timeZone = i_timeZone;                                     
> 7476.00     endsl;                                                        
> 7477.00                                                                   
> 7478.00     // Get and verify time zone indicator                         
> 7479.00     char = %subst(timeZone: 1: 1);                                
> 7480.00     if (not isStartOfTimezone(char));                             
> 7481.00        clear USR5005;                                             
> 7482.00        USR50051 = char;                                           
> 7483.00        AppMsg_sendEscMsgAndDump(AppMsg_new('USR5005': USR5005));  
> 7484.00     endif;                                                        
> 
> On isStartOfTimezone procedure there is no code for NO TIME ZONE; therefore it returns CFalse causing the error message to be sent.
> 
> 
> 
> Thank you,
> Maria Orcy Rosar
> City Furniture - IT Department
>  
> 
> -----Original Message-----
> From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx [mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Thomas Raddatz
> Sent: Friday, November 28, 2014 11:33 AM
> To: HTTPAPI and FTPAPI Projects
> Subject: Re: Marshaller_toDateTime parameters options
> 
> Maria,
> 
> Are you sure that the start of your getXmlTimeZone() procedure matches the following one?
> 
>  /FREE
> 
>     select;
>     when (i_timeZone = WSDL_NO_TIMEZONE);
>        return '';
>     when (i_timeZone = WSDL_LOCAL_TIMEZONE);
>        timeZone = f_rtvSysval_char('QUTCOFFSET');
>     other;
>        timeZone = i_timeZone;
>     endsl;
> 
>     // Get and verify time zone indicator
>     char = %subst(timeZone: 1: 1);
>     if (not isStartOfTimezone(char));
>        clear USR5005;
>        USR50051 = char;
>        AppMsg_sendEscMsgAndDump(AppMsg_new('USR5005': USR5005));
>     endif;
> 
> USR5023 is a generic escape message that is sent from an error handler for unexpected errors. But the second level text "The following error message prevented ..." implies message USR5005 was send from getXmlTimeZone().
> 
> As far as I can see that can happen only when the "when" statement for "WSDL_NO_TIMEZONE" is missing. Actually getXmlTimezone() started like this:
> 
>  /FREE
> 
>     if (i_timeZone = WSDL_LOCAL_TIMEZONE);
>        timeZone = f_rtvSysval_char('QUTCOFFSET');
>     else;
>        timeZone = i_timeZone;
>     endif;
> 
> But I asked you change to what is shown above when I mentioned:
> 
> Changed getXmlTimeZone(), replaced first if/endif block:
>  B01     select;
>  X01     when (i_timeZone = WSDL_NO_TIMEZONE);
>             return '';
>  X01     when (i_timeZone = WSDL_LOCAL_TIMEZONE);
>             timeZone = f_rtvSysval_char('QUTCOFFSET');
>  X01     other;
>             timeZone = i_timeZone;
>  E01     endsl;
> 
> Maybe that you missed that?
> 
> But I also should change message USR0023, because "Failed unmarshalling"
> pointed me to the wrong direction.
> 
> Regards,
> 
> Thomas.
> 
> Am 28.11.2014 14:34, schrieb Maria Orcy Rosar:
>> Good Morning, On behalf of Tomas I ran again the request, below are 
>> the job log details.
>>
>> HTTPAPI Ver 1.24 released 2012-01-23 OS/400 Ver V7R1M0
>>
>> New iconv() objects set, PostRem=819. PostLoc=0. ProtRem=819.
>> ProtLoc=0
>>
>> WSDL2RPG Ver 1.15.9.a released 2013-09-27 (V7R1M0)
>>
>> ** 2014-11-28-08.27.22.095000: Entering 
>> BasicHttpBinding_IApplication_SubmitPartialCreditCardApplication(),
>> compiled for V7R1M0 New iconv() objects set, PostRem=1208. PostLoc=0.
>> ProtRem=819. ProtLoc=0
>>
>> WSDL2RPG: call stack frames: Program      Library      Act.Group
>> Statement    Procedure QCMD         QSYS         *DFTACTGRP
>> /0519 QUICMENU     QSYS         *DFTACTGRP        /00C1 QUIMNDRV
>> QSYS         *DFTACTGRP        /0610 QUIMGFLW     QSYS
>> *DFTACTGRP        /04D7 QUICMD       QSYS         *DFTACTGRP
>> /056F QUOCPP       QPDA         *DFTACTGRP        /0E4C QUOCMD
>> QSYS         *DFTACTGRP        /01EA QUOCPP       QPDA
>> *DFTACTGRP        /0E4C QUOCMD       QSYS         *DFTACTGRP
>> /01EA FIPROAPP     MARIAOLIB    *DFTACTGRP
>> _QRNP_PEP_FIPROAPP FIPROAPP     MARIAOLIB    *DFTACTGRP   49000
>> FIPROAPP FIPRO10T     MARIAOLIB    *NEW
>> _QRNP_PEP_FIPRO10T FIPRO10T     MARIAOLIB    *NEW         41300
>> FIPRO10T FIPRO        MARIAOLIB    *NEW         91400
>> BasicHttpBinding_IApplication_SubmitPartialCreditCardApplication 
>> WSDL2RPGRT   WSDL2RPG     *NEW         445800
>> WSDL2R98_Marshaller_toDateTime WSDL2RPGRT   WSDL2RPG     *NEW
>> 747700       WSDL2R98_getXmlTimeZone WSDL2RPGRT   WSDL2RPG     *NEW
>> 35200        WSDL2R90_AppMsg_sendEscMsgAndDump WSDL2RPGRT   WSDL2RPG
>> *NEW         39300        WSDL2R71_http_DebugLog_dumpCallStack 
>> WSDL2RPGRT   WSDL2RPG     *NEW         20200
>> WSDL2R80_CallStack_dump
>>
>>
>>
>> WSDL2RPG: call stack frames: Program      Library      Act.Group
>> Statement    Procedure QCMD         QSYS         *DFTACTGRP
>> /0519 QUICMENU     QSYS         *DFTACTGRP        /00C1 QUIMNDRV
>> QSYS         *DFTACTGRP        /0610 QUIMGFLW     QSYS
>> *DFTACTGRP        /04D7 QUICMD       QSYS         *DFTACTGRP
>> /056F QUOCPP       QPDA         *DFTACTGRP        /0E4C QUOCMD
>> QSYS         *DFTACTGRP        /01EA QUOCPP       QPDA
>> *DFTACTGRP        /0E4C QUOCMD       QSYS         *DFTACTGRP
>> /01EA FIPROAPP     MARIAOLIB    *DFTACTGRP
>> _QRNP_PEP_FIPROAPP FIPROAPP     MARIAOLIB    *DFTACTGRP   49000
>> FIPROAPP FIPRO10T     MARIAOLIB    *NEW
>> _QRNP_PEP_FIPRO10T FIPRO10T     MARIAOLIB    *NEW         41300
>> FIPRO10T FIPRO        MARIAOLIB    *NEW         91400
>> BasicHttpBinding_IApplication_SubmitPartialCreditCardApplication 
>> WSDL2RPGRT   WSDL2RPG     *NEW         446800
>> WSDL2R98_Marshaller_toDateTime WSDL2RPGRT   WSDL2RPG     *NEW
>> 35200        WSDL2R90_AppMsg_sendEscMsgAndDump WSDL2RPGRT   WSDL2RPG
>> *NEW         39300        WSDL2R71_http_DebugLog_dumpCallStack 
>> WSDL2RPGRT   WSDL2RPG     *NEW         20200
>> WSDL2R80_CallStack_dump
>>
>>
>> WSDL2RPG: USR5023: Failed unmarshalling value '*N' of field '*N'. 
>> Cause . . . . . :   The following error message prevented the value of
>> field '*N' from being retrieved from XPath '*N/*N'. Message text  . :
>> Time zone indicator * does not match one of the expected value of: Z,
>> - or + received from procedure: BASICS1R1_f_sndPgmMsg and statement:
>> 54400 ** 2014-11-28-08.30.13.861000: Leaving
>> BasicHttpBinding_IApplication_SubmitPartialCreditCardApplication()
>>
>> Thank you, Maria Orcy Rosar City Furniture - IT Department
>>
>> -----Original Message----- From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
>> [mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
>> thomas.raddatz@xxxxxxxxxxx Sent: Thursday, November 27, 2014 2:41 AM
>> To: HTTPAPI and FTPAPI Projects Subject: RE: Marshaller_toDateTime 
>> parameters options
>>
>> Tomas,
>>
>> At least we are one step further, because now you got an error when 
>> unmarshalling a value. That means, that you received a response from 
>> the server!
>>
>> Please enable the debug log, call the web service again and eventually 
>> send the log to me. For now I have no idea how to make my test web 
>> service not to add the timezone portion, which makes it difficult to 
>> test. Also I need to know the exact data type that you received from 
>> the server.
>>
>> At the moment I assume that it is a time value that causes the error, 
>> because the XML time format (e.g. 16:29:59) does not match the ISO 
>> format, that %time() expects. Hence it might be the
>> UnMarshaller_toTime() that fails working when no timezone information 
>> is available:
>>
>> other; time = %time(inTimeShort.value);     // no time zone inf.
>> available endsl;
>>
>> On the other hand that cannot be the truth, because the unmarshaller 
>> calls parseXmlTime() to convert the time to ISO format.
>>
>> The UnMarshaller_toDate() unmarshaller should work just fine, because 
>> the XML date format (e.g. 2014-11-29) equals the ISO format:
>>
>> other; date = %date(inDate.value);    // no time zone inf. available 
>> endsl;
>>
>> The same should be true for UnMarshaller_toDateTime(), because it 
>> calls adjustTimestamp(), if no timezone is present:
>>
>> other; timestamp = adjustTimestamp(inTimestamp); // no time zone inf.
>> available endsl;
>>
>> I am stuck. I cannot reproduce the problem with the debugger, but the 
>> debug log should tell us the truth.
>>
>> Regards,
>>
>> Thomas.
>>
>>
>>> Tomas Martinez <Tomasm@xxxxxxxxxxxxxxxxxx> hat am 26. November 2014 
>>> um 22:28 geschrieben:
>>>
>>>
>>> Thomas, Thanks for the detail instructions. I made the changes and 
>>> everything compiled properly. But it looks like there is still 
>>> something missing because it doesn't like the fact the that TimeZone 
>>> is not there.
>>>
>>> We keep getting this error:
>>>
>>> WSDL2RPG: USR5023: Failed unmarshalling value '*N' of field '*N'. 
>>> Cause . . . . . : The following error message prevented the value of  
>>> field '*N' from being retrieved from XPath '*N/*N'. Message text .
>>> : Time zone indicator * does not match one of the expected value of:
>>> Z, - or +
>>>
>>> Thanks,
>>>
>>> Tomas Martinez -----Original Message----- From:
>>> ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
>>> [mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Thomas 
>>> Raddatz Sent: Tuesday, November 25, 2014 8:44 AM To: HTTPAPI and 
>>> FTPAPI Projects Subject: Re: Marshaller_toDateTime parameters options
>>>
>>> Tomas,
>>>
>>> Today there is no option to restrict the time zone portion from being 
>>> added to date and time values. But it is not that difficult to add 
>>> it.
>>>
>>> On my development system I changed the following source members:
>>>
>>> TYPES_H: --------
>>>
>>> Added: D WSDL_NO_TIMEZONE... D C '*NONE'
>>>
>>> WSDL2R98: ---------
>>>
>>> Changed Marshaller_toDate(), added %trimR): B01 if (%parms() >= 
>>> p_timeZone); value = value + %trimR(getXmlTimeZone(i_timeZone)); X01 
>>> else; value = value + %trimR(getXmlTimeZone(WSDL_LOCAL_TIMEZONE));
>>> E01 endif;
>>>
>>> Changed Marshaller_toTime(), added %trimR): B01 if (%parms() >= 
>>> p_timeZone); value = value + %trimR(getXmlTimeZone(i_timeZone)); X01 
>>> else; value = value + %trimR(getXmlTimeZone(WSDL_LOCAL_TIMEZONE));
>>> E01 endif;
>>>
>>> Changed getXmlTimeZone(), replaced first if/endif block: B01 select; 
>>> X01 when (i_timeZone = WSDL_NO_TIMEZONE); return ''; X01 when 
>>> (i_timeZone = WSDL_LOCAL_TIMEZONE); timeZone = 
>>> f_rtvSysval_char('QUTCOFFSET'); X01 other; timeZone = i_timeZone;
>>> E01 endsl;
>>>
>>>
>>> With these changes in place you can add WSDL_NO_TIMEZONE to the 
>>> procedure calls of your marshaller procedures like this:
>>>
>>> Before:
>>>
>>> '<tns1:date>' + Marshaller_toDate(
>>> i_impl_echoDateTime.aDateTimeStructure.date ) + '</tns1:date>' +
>>>
>>> After:
>>>
>>> '<tns1:date>' + Marshaller_toDate(
>>> i_impl_echoDateTime.aDateTimeStructure.date : WSDL_NO_TIMEZONE ) + 
>>> '</tns1:date>' +
>>>
>>> I am going to make my changes available with 1.16beta7 soon. But of  
>>> course you can modify your copy of WSDL2RPG right now.
>>>
>>> Regards,
>>>
>>> Thomas.
>>>
>>> Am 25.11.2014 01:45, schrieb Tomas Martinez:
>>>> Hi,
>>>>
>>>> Marshaller_toDateTime() returns the Time zone if not provided, is  
>>>> there a way have it NOT return the time zone?
>>>>
>>>>
>>>> The web service we are connecting to is having problems processing  
>>>> the time stamp that contains the Time Zone for certain fields and  
>>>> have asked us to stop sending it.
>>>>
>>>>
>>>> Thanks you in advance for your help.
>>>>
>>>> Tomas T. Martinez | IT Department |Senior Systems Analyst City 
>>>> Furniture | 6701 N Hiatus Road | Tamarac, FL 33321 | 
>>>> [1]www.cityfurniture.com
>>>>
>>>> References
>>>>
>>>> 1. http://www.cityfurniture.com/
>>>>
>>>>
>>>>
>>>> --------------------------------------------------------------------
>>>>
>>>>
> --
>>>> - This is the FTPAPI mailing list. To unsubscribe, please go to: 
>>>> http://www.scottklement.com/mailman/listinfo/ftpapi
>>>> --------------------------------------------------------------------
>>>>
>>>>
> --
>>>> -
>>>>
>>> ---------------------------------------------------------------------
>>> -
>>>
>>>
> - This is the FTPAPI mailing list. To unsubscribe, please go to:
>>> http://www.scottklement.com/mailman/listinfo/ftpapi
>>> ---------------------------------------------------------------------
>>> -
>>>
>>>
> -
>>> ---------------------------------------------------------------------
>>> -
>>>
>>>
> - This is the FTPAPI mailing list. To unsubscribe, please go to:
>>> http://www.scottklement.com/mailman/listinfo/ftpapi
>>> ---------------------------------------------------------------------
>>> --
>>
>>>
> -----------------------------------------------------------------------
>> This is the FTPAPI mailing list.  To unsubscribe, please go to: 
>> http://www.scottklement.com/mailman/listinfo/ftpapi
>> ----------------------------------------------------------------------
>> -
>>
> -----------------------------------------------------------------------
> This is the FTPAPI mailing list.  To unsubscribe, please go to:
> http://www.scottklement.com/mailman/listinfo/ftpapi
> -----------------------------------------------------------------------
> -----------------------------------------------------------------------
> This is the FTPAPI mailing list.  To unsubscribe, please go to:
> http://www.scottklement.com/mailman/listinfo/ftpapi
> -----------------------------------------------------------------------
> 
-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------