axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From John Hawkins <>
Subject Re: Bad C++ generated by WSDL2Ws
Date Tue, 06 Dec 2005 11:49:00 GMT
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"


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 != 

    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, 
    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, 
    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