axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Franz Fehringer" <>
Subject AW: Bad C++ generated by WSDL2Ws
Date Tue, 06 Dec 2005 12:05:02 GMT
Hello John,

Is there hope, that AXISCPP-631 and/or AXISCPP-753 will be solved in 1.6?


  -----Ursprungliche Nachricht-----
  Von: John Hawkins []
  Gesendet: Dienstag, 6. Dezember 2005 12:49
  An: Apache AXIS C Developers List
  Betreff: Re: Bad C++ generated by WSDL2Ws

  Hello Emanuel,
  Well, I'm amazed that you're still using 1.2 - How come? I would suggest
you upgrade to 1.5 and preferably 1.6 which is due out in the next week or
so. If you still see the same problem then I suggest you raise a JIRA and
attach the wsdl and http request and response. Is there any problem with
doing this?


        "Emanuel Norrbin" <>
        05/12/2005 22:04 Please respond to
              "Apache AXIS C Developers List"

       To <>
              Subject Bad C++ generated by WSDL2Ws


  I am generating C++ server stubs using Axis C++ 1.2, using the java class
  org.apache.axis.wsdl.wsdl2ws.WSDL2Ws. If a web service operation has a
  vector argument (e.g. vector of string or vector of ints) the generated
  is not correct. The generated code seems to be accepted by many compilers
  but gcc 4, correctoy, gives a compilation error (gcc 3 does not complain).

  To give an example, the code is from the *Wrapper.cpp file:

  int ActivityInfoProviderWrapper::deleteSourceFileHistory(void* pMsg)
     IMessageData* mc = (IMessageData*)pMsg;
     int nStatus;
     IWrapperSoapSerializer* pIWSSZ = NULL;
     if (!pIWSSZ) return AXIS_FAIL;
     IWrapperSoapDeSerializer* pIWSDZ = NULL;
     if (!pIWSDZ) return AXIS_FAIL;
     /* check whether we have got correct message */
     if (AXIS_SUCCESS != pIWSDZ->checkMessageBody("deleteSourceFileHistory",


     pIWSSZ->createSoapMethod("deleteSourceFileHistoryResponse", \


     xsd__string v0 = pIWSDZ->getElementAsString("user",0);
     xsd__string v1 = pIWSDZ->getElementAsString("passwrd",0);

     // This is the original code
     // xsd__long_Array v2 =
  (xsd__long_Array&)pIWSDZ->getBasicArray(XSD_LONG, "entryIDs",0);

     // This would work:
     const Axis_Array& v2ref= pIWSDZ->getBasicArray(XSD_LONG, "entryIDs",0);
     const xsd__long_Array& v2 = reinterpret_cast<const


  The line assigning to v2 does not compile on gcc 4, failing with the
  following error message:

  In member function
  int ActivityInfoProviderWrapper::deleteSourceFileHistory(void*):
  ./../ActivityInfoProviderWrapper.cpp:352: error:.
  invalid cast of an rvalue expression of type axiscpp::Axis_Array
  to type axiscpp::xsd__long_Array

  which is correct since what is assigned to the lhs is a reference to a
  temporary variable.
  My suggestion is to replace it with something like this:

     const Axis_Array& v2ref= pIWSDZ->getBasicArray(XSD_LONG, "entryIDs",0);
     const xsd__long_Array& v2 = reinterpret_cast<const

  which will work since the temporary is bound to the const reference v2ref.

  I have not seen this issue resolved in Jira or mentioned on this list.
  Should I submit it to Jira or is someone already aware of this?

  /Emanuel Norrbin

View raw message