You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by krishna <kr...@lac.uic.edu> on 2006/02/24 18:46:27 UTC

Re: AXISCPP-634

Hi Chinthana

I would like to enquire if a patch for AXISCPP-674 has been developed.
( AXISCPP-674 deals with adding attribute to complex types in the 
SOAP-RESPONSE -
I did look through the mailing list and was unable to find it )

My understanding is that as the attributes have to be for 
serialized/deserialized
changes would be required to the stub code generated by the wsdl2ws tool.
Is there an alternate method of implementing this?

Thanks
Krishna

Chinthana C. Dinapala wrote:

>Hi Krishna,
>
>See the comments bellow. If you attached your modification (diff) I'll
>be able to test the patch and commit the code in to SVN. Also used SVN
>code which is latest code.
>About SVN checkout see following site.
>http://ws.apache.org/axis/cpp/windev-guide.html#svncheckout
>
>
>My basic question is:
>Do I need to call getElementForAttributes before calling
>getAttributeAs...?
>
>[Chinthana C. Dinapala] yes. As it's now you have to call this function
>first. 
>
>And if so will it become a part of IWrapperSoapDeSerializer in the
>future?
>
>[Chinthana C. Dinapala] seems to me it has to be adding to solve the
>problem.
>
>Thanks
>Chinthana
> 
>
>
>krishna wrote:
>
>  
>
>>Hi All
>>
>>This is in regard to AXISCPP-634. I was trying to use the method
>>getAttributeAsString() in IWrapperSoapDeSerializer and was unable to 
>>get the required result.
>>
>>On Looking up SoapDeSerializer.cpp I understood that 
>>getElementForAttribute was to be called before
>>calling getAttributeAsString.
>>** Code/Comments from SoapDeSerializer.cpp **
>>           /*
>>  1463  * Before calling any of getAttributeAs... API functions the 
>>user should move
>>  1464  * current Element to the right Element by calling 
>>GetElementForAttributes(..)
>>  1465  */
>>  1466 xsd__int *
>>  1467     SoapDeSerializer::getAttributeAsInt (const AxisChar *
>>    
>>
>pName,
>  
>
>>  1468                                          const AxisChar * 
>>pNamespace)
>>  1469 {
>>  1470     Int simpleType;
>>  1471     getAttribute(pName, pNamespace, &simpleType);
>>  1472         return simpleType.getInt();
>>  1473 }
>>
>>But getElementForAttribute is not available in
>>    
>>
>IWrapperSoapDeSerializer
>  
>
>>which is the object accessible in the stubs.
>>
>>Also getElementForAttribute is a private method in SoapDeSerializer
>>
>>SOAP - RESPONSE
>><ns1:echoIntArrayResponse xmlns:ns1="http://soapinterop.org/">
>><intArrayType xsi:type="ns2:intArrayType" 
>>xmlns:ns2="http://soapinterop.org/xsd" 
>>ref="http://www.lac.uic.edu:8080" >
>><item>0</item>
>>
>>What I would ideally like to do is
>>extract the ref tag above in the axis client stub code within the 
>>deserialize function found in intArrayType.cpp
>>
>>int Axis_DeSerialize_intArrayType(intArrayType* param, 
>>IWrapperSoapDeSerializer* pIWSDZ)
>>    72 {
>>    73         *printf("\n The attribute is 
>>%s",pIWSDZ->getAttributeAsString("ref",0));*
>>    74         param->intItem = 
>>(xsd__int_Array&)pIWSDZ->getBasicArray(XSD_INT, "intItem",0);
>>    75         return pIWSDZ->getStatus();
>>    76 }
>>
>>Currently the above code returns null. output
>>--- The attribute is (null) ----
>>
>>Line 73 was the only line added by me to the stubs.
>>But after doing some changes to IWrapperSoapDeSerializer to make 
>>getElementForAttribute accessible and adding
>>
>>     getElementForAttribute("intArrayType",0); before line 73 makes 
>>things work.
>>
>>Is this the way of getting the attributes from the soap message or am 
>>I missing something?
>>
>>I have attached the client stub code. I am using axiscpp checked out 
>>from the CVS on 25th July 2005
>>
>>Thanks
>>Krishna
>>
>>Dushshantha Chandradasa wrote:
>>
>>    
>>
>>>HI Krishna,
>>>
>>> 
>>>
>>>If you are not a committer, you cannot assign the issue to yourself. 
>>>If you can please attach the diff with respect to the svn head to the
>>>      
>>>
>
>  
>
>>>issue, I can test the changes and commit it to the SVN.
>>>
>>> **
>>>
>>> 
>>>
>>>
>>>      
>>>
>------------------------------------------------------------------------
>  
>
>>>*From:* krishna [mailto:krishna@lac.uic.edu]
>>>*Sent:* Wednesday, October 12, 2005 6:17 AM
>>>*To:* axis-c-dev@ws.apache.org
>>>*Subject:* AXISCPP-634
>>>
>>> 
>>>
>>>Hi All
>>>
>>>I am currently implementing a webservices solution using Axis C++. My
>>>      
>>>
>
>  
>
>>>webservices solution urgently requires
>>>functionality provided by AXISCPP-634. ( Setting attributes for 
>>>complex types in the SOAP-RESPONSE )
>>>http://issues.apache.org/jira/browse/AXISCPP-634.
>>>
>>>      
>>>
>>>>>From JIRA I understand that it is still unassigned.
>>>>        
>>>>
>>>If nobody is working on it, would it be possible for me to contribute
>>>      
>>>
>
>  
>
>>>in resolving AXISCPP-634??
>>>
>>>Thanks
>>>Krishna Kumar Rajagopalan
>>>http://uic.edu/~krajag2 <http://uic.edu/%7Ekrajag2>
>>>
>>>      
>>>
>>-----------------------------------------------------------------------
>>    
>>
>-
>  
>
>>/*
>>*Sample Code for Array: By Krishna Kumar Rajagopalan
>>*Uses a RPC Web Service
>>*
>>*/
>>
>>#include "ArrayTestPortType.hpp"
>>#include <stdio.h>
>>#include <iostream>
>>
>>unsigned int ARRAY_SIZE=1;
>>
>>int main(int argc,char *argv[])
>>{
>>	char serverurl[500]="http://localhost/axis/arrayPS";
>>	intArrayType arr_in;
>>	intArrayType *arr_out;
>>	arr_in.intItem.m_Size = 1;
>>	int arr[1];
>>	if( argc > 1 )
>>	{
>>		switch(argc)
>>		{
>>	  	        default: printf("\n Extra parameters specified!!
>>    
>>
>Neglecting extra parameters \n");
>  
>
>>		  	case 3:	strcpy(serverurl,argv[2]);
>>			case 2: arr[0]=atoi(argv[1]);
>>		}
>>	}
>>	else
>>	{		
>>		printf("\n Switching to defaults \n");
>>		arr[0]=0;
>>		strcpy(serverurl,"http://localhost/axis/arrayPS");
>>	}
>>
>>	arr_in.intItem.m_Array = new int*;
>>	arr_in.intItem.m_Array[0] = &arr[0];
>>	
>>	ArrayTestPortType ws(serverurl);
>>	printf("\n Invoking Echo int Array \n");
>>	try
>>	{
>>		ws.setTransportTimeout(10000);
>>		if ((arr_out =
>>    
>>
>ws.echoIntArray(&arr_in))->intItem.m_Array == NULL )
>  
>
>>		{
>>			printf("\n Received Null \n");
>>		}
>>		else
>>		{
>>			printf("\n Not null output !! ");
>>			cout<<"Array size is
>>    
>>
>"<<arr_out->intItem.m_Size<<endl;
>  
>
>>			for( int i=0; i < arr_out->intItem.m_Size; i++)
>>			{
>>				printf("\n Item %d is
>>    
>>
>%d",i,*(arr_out->intItem.m_Array[i]));
>  
>
>>			}
>>		}
>>	}
>>	catch(AxisException& e)
>>	{
>>	         printf("Exception : %s\n", e.what());
>>	}
>>       catch(exception& e)
>>	{
>>	         printf("Unknown exception has occured\n");
>>	}
>>	catch(...)
>>	{
>>	         printf("Unknown exception has occured\n");
>>	}
>>	return 0;
>>}
>> 
>>
>>-----------------------------------------------------------------------
>>    
>>
>-
>  
>
>>/*
>>* This file was auto-generated by the Axis C++ Web Service Generator
>>    
>>
>(WSDL2Ws)
>  
>
>>* This file contains Client Stub implementation for remote web
>>    
>>
>service.
>  
>
>>*/
>>
>>#include "ArrayTestPortType.hpp"
>>
>>#include <axis/AxisWrapperAPI.hpp>
>>#include <string.h>
>>
>>using namespace std;
>>
>>extern int Axis_DeSerialize_intArrayType(intArrayType* param,
>>    
>>
>IWrapperSoapDeSerializer* pDZ);
>  
>
>>extern void* Axis_Create_intArrayType(intArrayType *Obj, bool bArray =
>>    
>>
>false, int nSize=0);
>  
>
>>extern void Axis_Delete_intArrayType(intArrayType* param, bool bArray =
>>    
>>
>false, int nSize=0);
>  
>
>>extern int Axis_Serialize_intArrayType(intArrayType* param,
>>    
>>
>IWrapperSoapSerializer* pSZ, bool bArray = false);
>  
>
>>extern int Axis_GetSize_intArrayType();
>>
>>ArrayTestPortType::ArrayTestPortType(const char* pchEndpointUri,
>>    
>>
>AXIS_PROTOCOL_TYPE eProtocol)
>  
>
>>:Stub(pchEndpointUri, eProtocol)
>>{
>>}
>>
>>ArrayTestPortType::ArrayTestPortType()
>>:Stub(" ", APTHTTP1_1)
>>{
>>	m_pCall->setEndpointURI("http://localhost/axis/arrayPS");
>>}
>>
>>ArrayTestPortType::~ArrayTestPortType()
>>{
>>}
>>
>>
>>/*Methods corresponding to the web service methods*/
>>
>>/*
>>* This method wrap the service method echoIntArray
>>*/
>>intArrayType* ArrayTestPortType::echoIntArray(intArrayType* Value0)
>>{
>>	intArrayType* pReturn = NULL;
>>	const char* pcCmplxFaultName;
>>	try
>>	{
>>		if (AXIS_SUCCESS !=
>>    
>>
>m_pCall->initialize(CPP_RPC_PROVIDER)) 
>  
>
>>			return pReturn;
>>	if (NULL==m_pCall->getTransportProperty("SOAPAction",false))
>>	{
>>		m_pCall->setTransportProperty(SOAPACTION_HEADER ,
>>    
>>
>"arrayPS#echoIntArray");
>  
>
>>	}
>>		m_pCall->setSOAPVersion(SOAP_VER_1_1);
>>		m_pCall->setOperation("echoIntArray",
>>    
>>
>"http://soapinterop.org/");
>  
>
>>		applyUserPreferences();
>>	m_pCall->addCmplxParameter(Value0,
>>    
>>
>(void*)Axis_Serialize_intArrayType, (void*)Axis_Delete_intArrayType,
>"inputIntArrayType", Axis_URI_intArrayType);
>  
>
>>		if (AXIS_SUCCESS == m_pCall->invoke())
>>		{
>>			if(AXIS_SUCCESS ==
>>    
>>
>m_pCall->checkMessage("echoIntArrayResponse",
>"http://soapinterop.org/"))
>  
>
>>			{
>>				pReturn =
>>    
>>
>(intArrayType*)m_pCall->getCmplxObject((void*)
>Axis_DeSerialize_intArrayType, (void*) Axis_Create_intArrayType, (void*)
>Axis_Delete_intArrayType,"_return", 0);
>  
>
>>		}
>>		}
>>	m_pCall->unInitialize();
>>		return pReturn;
>>	}
>>	catch(AxisException& e)
>>	{
>>		int iExceptionCode = e.getExceptionCode();
>>		if(AXISC_NODE_VALUE_MISMATCH_EXCEPTION !=
>>    
>>
>iExceptionCode)
>  
>
>>		{
>>			throw SoapFaultException(e);
>>		}
>>		ISoapFault* pSoapFault = (ISoapFault*)
>>
>>    
>>
>m_pCall->checkFault("Fault","http://localhost/axis/arrayPS" );
>  
>
>>		if(pSoapFault)
>>		{
>>			m_pCall->unInitialize();
>>			throw SoapFaultException(e);
>>		}
>>		else throw;
>>	}
>>}
>>
>> 
>>
>>-----------------------------------------------------------------------
>>    
>>
>-
>  
>
>>/*
>>* This file was auto-generated by the Axis C++ Web Service Generator
>>    
>>
>(WSDL2Ws)
>  
>
>>* This file contains Client Stub Class for remote web service 
>>*/
>>
>>#if !defined(__ARRAYTESTPORTTYPE_CLIENTSTUB_H__INCLUDED_)
>>#define __ARRAYTESTPORTTYPE_CLIENTSTUB_H__INCLUDED_
>>
>>#include <axis/client/Stub.hpp>
>>#include <axis/SoapFaultException.hpp>
>>#include <axis/ISoapFault.hpp>
>>AXIS_CPP_NAMESPACE_USE
>>#include "intArrayType.hpp"
>>
>>class ArrayTestPortType :public Stub
>>{
>>public:
>>	STORAGE_CLASS_INFO ArrayTestPortType(const char* pchEndpointUri,
>>    
>>
>AXIS_PROTOCOL_TYPE eProtocol=APTHTTP1_1);
>  
>
>>	STORAGE_CLASS_INFO ArrayTestPortType();
>>public:
>>	STORAGE_CLASS_INFO virtual ~ArrayTestPortType();
>>public: 
>>	STORAGE_CLASS_INFO intArrayType* echoIntArray(intArrayType*
>>    
>>
>Value0);
>  
>
>>};
>>
>>#endif /* !defined(__ARRAYTESTPORTTYPE_CLIENTSTUB_H__INCLUDED_)*/
>> 
>>
>>-----------------------------------------------------------------------
>>    
>>
>-
>  
>
>>/*
>>* Copyright 2003-2004 The Apache Software Foundation.
>>
>>*
>>* Licensed under the Apache License, Version 2.0 (the "License");
>>* you may not use this file except in compliance with the License.
>>* You may obtain a copy of the License at
>>*
>>*		http://www.apache.org/licenses/LICENSE-2.0
>>*
>>* Unless required by applicable law or agreed to in writing, software
>>* distributed under the License is distributed on an "AS IS" BASIS,
>>* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>    
>>
>implied.
>  
>
>>* See the License for the specific language governing permissions and
>>* limitations under the License.
>>*
>>* This file was auto-generated by the Axis C++ Web Service Generator
>>    
>>
>(WSDL2Ws)
>  
>
>>* This file contains functions to manipulate complex type intArrayType
>>*/
>>
>>#include "intArrayType.hpp"
>>#include <axis/AxisWrapperAPI.hpp>
>>#include <iostream>
>>
>>using namespace std;
>>
>>xsd__int_Array intArrayType::getintItem()
>>{
>>	return intItem ; 
>>}
>>
>>void intArrayType::setintItem(xsd__int_Array InValue)
>>{
>>	intItem = InValue ; 
>>}
>>/*
>>* This static method serialize a intArrayType type of object
>>*/
>>int Axis_Serialize_intArrayType(intArrayType* param,
>>    
>>
>IWrapperSoapSerializer* pSZ, bool bArray = false)
>  
>
>>{
>>	if (bArray)
>>	{
>>		pSZ->serialize("<", Axis_TypeName_intArrayType, ">",
>>    
>>
>NULL);
>  
>
>>	}
>>	else
>>	{
>>		bool blnIsNewPrefix = false;
>>		const AxisChar* sPrefix =
>>    
>>
>pSZ->getNamespacePrefix(Axis_URI_intArrayType, blnIsNewPrefix);
>  
>
>>		if (!blnIsNewPrefix)
>>		{
>>			pSZ->serialize("<", Axis_TypeName_intArrayType,
>>    
>>
>" xsi:type=\"", sPrefix, ":",
>  
>
>>				Axis_TypeName_intArrayType, "\">",
>>    
>>
>NULL);
>  
>
>>		}
>>		else
>>		{
>>			pSZ->serialize("<", Axis_TypeName_intArrayType,
>>    
>>
>" xsi:type=\"", sPrefix, ":",
>  
>
>>				Axis_TypeName_intArrayType, "\" xmlns:",
>>    
>>
>sPrefix, "=\"",
>  
>
>>				Axis_URI_intArrayType, "\">", NULL);
>>		}
>>	}
>>
>>	pSZ->serializeBasicArray((Axis_Array*)(&param->intItem),XSD_INT,
>>    
>>
>"intItem");
>  
>
>>	pSZ->serialize("</", Axis_TypeName_intArrayType, ">", NULL);
>>	return AXIS_SUCCESS;
>>}
>>
>>/*
>>* This static method deserialize a intArrayType type of object
>>*/
>>int Axis_DeSerialize_intArrayType(intArrayType* param,
>>    
>>
>IWrapperSoapDeSerializer* pIWSDZ)
>  
>
>>{
>>	//printf("\n The attribute is
>>    
>>
>%s",pIWSDZ->getAttributeAsString("ref",0));
>  
>
>>	param->intItem = (xsd__int_Array&)pIWSDZ->getBasicArray(XSD_INT,
>>    
>>
>"intItem",0);
>  
>
>>	return pIWSDZ->getStatus();
>>}
>>void* Axis_Create_intArrayType(intArrayType* pObj, bool bArray = false,
>>    
>>
>int nSize=0)
>  
>
>>{
>>	if (bArray && (nSize > 0))
>>	{
>>		if (pObj)
>>		{
>>			intArrayType* pNew = new intArrayType[nSize];
>>			memcpy(pNew, pObj,
>>    
>>
>sizeof(intArrayType)*nSize/2);
>  
>
>>			memset(pObj, 0, sizeof(intArrayType)*nSize/2);
>>			delete [] pObj;
>>			return pNew;
>>		}
>>		else
>>		{
>>			return new intArrayType[nSize];
>>		}
>>	}
>>	else
>>		return new intArrayType;
>>}
>>
>>/*
>>* This static method delete a intArrayType type of object
>>*/
>>void Axis_Delete_intArrayType(intArrayType* param, bool bArray = false,
>>    
>>
>int nSize=0)
>  
>
>>{
>>	if (bArray)
>>	{
>>		delete [] param;
>>	}
>>	else
>>	{
>>		delete param;
>>	}
>>}
>>/*
>>* This static method gives the size of intArrayType type of object
>>*/
>>int Axis_GetSize_intArrayType()
>>{
>>	return sizeof(intArrayType);
>>}
>>
>>intArrayType::intArrayType()
>>{
>>	/*do not allocate memory to any pointer members here
>>	 because deserializer will allocate memory anyway. */
>>	intItem.m_Array = 0;
>>	intItem.m_Size = 0;
>>}
>>
>>intArrayType::~intArrayType()
>>{
>>	/*delete any pointer and array members here*/
>>	delete [] ((xsd__int*)intItem.m_Array);
>>}
>> 
>>
>>-----------------------------------------------------------------------
>>    
>>
>-
>  
>
>>/*
>>* Copyright 2003-2004 The Apache Software Foundation.
>>
>>*
>>* Licensed under the Apache License, Version 2.0 (the "License");
>>* you may not use this file except in compliance with the License.
>>* You may obtain a copy of the License at
>>*
>>*		http://www.apache.org/licenses/LICENSE-2.0
>>*
>>* Unless required by applicable law or agreed to in writing, software
>>* distributed under the License is distributed on an "AS IS" BASIS,
>>* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>    
>>
>implied.
>  
>
>>* See the License for the specific language governing permissions and
>>* limitations under the License.
>>*
>>* This file was auto-generated by the Axis C++ Web Service Generator
>>    
>>
>(WSDL2Ws)
>  
>
>>* This file contains functions to manipulate complex type intArrayType
>>*/
>>
>>#if !defined(__INTARRAYTYPE_PARAM_H__INCLUDED_)
>>#define __INTARRAYTYPE_PARAM_H__INCLUDED_
>>
>>#include <axis/AxisUserAPI.hpp>
>>AXIS_CPP_NAMESPACE_USE 
>>
>>/*Local name and the URI for the type*/
>>static const char* Axis_URI_intArrayType =
>>    
>>
>"http://soapinterop.org/xsd";
>  
>
>>static const char* Axis_TypeName_intArrayType = "intArrayType";
>>
>>class intArrayType
>>{
>>public:
>>	xsd__int_Array	intItem;
>>
>>	xsd__int_Array getintItem();
>>	void setintItem(xsd__int_Array InValue);
>>
>>	intArrayType();
>>	virtual ~intArrayType();
>>};
>>
>>#endif /* !defined(__INTARRAYTYPE_PARAM_H__INCLUDED_)*/
>> 
>>
>>    
>>
>
>
>
>  
>


Re: AXISCPP-634

Posted by John Hawkins <HA...@uk.ibm.com>.
Hi,

No, there has been no patch for this. Have you looked at this code at all 
- perhaps you could create a patch for us?




krishna <kr...@lac.uic.edu> 
06/03/2006 17:10
Please respond to
"Apache AXIS C Developers List" <ax...@ws.apache.org>


To
Apache AXIS C Developers List <ax...@ws.apache.org>
cc

Subject
Re: AXISCPP-634






Hi All

I would like to enquire if a patch for AXISCPP-634 has been developed.
( AXISCPP-634 deals with adding attribute to complex types in the 
SOAP-RESPONSE -
I did look through the mailing list and was unable to find it )

My understanding is that as the attributes have to be for 
serialized/deserialized
changes would be required to the stub code generated by the wsdl2ws tool.
Is there an alternate method of implementing this?

Also, There was a mistake in my previous email regarding the JIRA 
number. Sorry for the confusion.

Thanks
Krishna


krishna wrote:

> Hi Chinthana
>
> I would like to enquire if a patch for AXISCPP-674 has been developed.
> ( AXISCPP-674 deals with adding attribute to complex types in the 
> SOAP-RESPONSE -
> I did look through the mailing list and was unable to find it )
>
> My understanding is that as the attributes have to be for 
> serialized/deserialized
> changes would be required to the stub code generated by the wsdl2ws 
tool.
> Is there an alternate method of implementing this?
>
> Thanks
> Krishna
>
> Chinthana C. Dinapala wrote:
>
>> Hi Krishna,
>>
>> See the comments bellow. If you attached your modification (diff) I'll
>> be able to test the patch and commit the code in to SVN. Also used SVN
>> code which is latest code.
>> About SVN checkout see following site.
>> http://ws.apache.org/axis/cpp/windev-guide.html#svncheckout
>>
>>
>> My basic question is:
>> Do I need to call getElementForAttributes before calling
>> getAttributeAs...?
>>
>> [Chinthana C. Dinapala] yes. As it's now you have to call this function
>> first.
>> And if so will it become a part of IWrapperSoapDeSerializer in the
>> future?
>>
>> [Chinthana C. Dinapala] seems to me it has to be adding to solve the
>> problem.
>>
>> Thanks
>> Chinthana
>>
>>
>>
>> krishna wrote:
>>
>> 
>>
>>> Hi All
>>>
>>> This is in regard to AXISCPP-634. I was trying to use the method
>>> getAttributeAsString() in IWrapperSoapDeSerializer and was unable to 
>>> get the required result.
>>>
>>> On Looking up SoapDeSerializer.cpp I understood that 
>>> getElementForAttribute was to be called before
>>> calling getAttributeAsString.
>>> ** Code/Comments from SoapDeSerializer.cpp **
>>>           /*
>>>  1463  * Before calling any of getAttributeAs... API functions the 
>>> user should move
>>>  1464  * current Element to the right Element by calling 
>>> GetElementForAttributes(..)
>>>  1465  */
>>>  1466 xsd__int *
>>>  1467     SoapDeSerializer::getAttributeAsInt (const AxisChar *
>>> 
>>
>> pName,
>> 
>>
>>>  1468                                          const AxisChar * 
>>> pNamespace)
>>>  1469 {
>>>  1470     Int simpleType;
>>>  1471     getAttribute(pName, pNamespace, &simpleType);
>>>  1472         return simpleType.getInt();
>>>  1473 }
>>>
>>> But getElementForAttribute is not available in
>>> 
>>
>> IWrapperSoapDeSerializer
>> 
>>
>>> which is the object accessible in the stubs.
>>>
>>> Also getElementForAttribute is a private method in SoapDeSerializer
>>>
>>> SOAP - RESPONSE
>>> <ns1:echoIntArrayResponse xmlns:ns1="http://soapinterop.org/">
>>> <intArrayType xsi:type="ns2:intArrayType" 
>>> xmlns:ns2="http://soapinterop.org/xsd" 
>>> ref="http://www.lac.uic.edu:8080" >
>>> <item>0</item>
>>>
>>> What I would ideally like to do is
>>> extract the ref tag above in the axis client stub code within the 
>>> deserialize function found in intArrayType.cpp
>>>
>>> int Axis_DeSerialize_intArrayType(intArrayType* param, 
>>> IWrapperSoapDeSerializer* pIWSDZ)
>>>    72 {
>>>    73         *printf("\n The attribute is 
>>> %s",pIWSDZ->getAttributeAsString("ref",0));*
>>>    74         param->intItem = 
>>> (xsd__int_Array&)pIWSDZ->getBasicArray(XSD_INT, "intItem",0);
>>>    75         return pIWSDZ->getStatus();
>>>    76 }
>>>
>>> Currently the above code returns null. output
>>> --- The attribute is (null) ----
>>>
>>> Line 73 was the only line added by me to the stubs.
>>> But after doing some changes to IWrapperSoapDeSerializer to make 
>>> getElementForAttribute accessible and adding
>>>
>>>     getElementForAttribute("intArrayType",0); before line 73 makes 
>>> things work.
>>>
>>> Is this the way of getting the attributes from the soap message or 
>>> am I missing something?
>>>
>>> I have attached the client stub code. I am using axiscpp checked out 
>>> from the CVS on 25th July 2005
>>>
>>> Thanks
>>> Krishna
>>>
>>> Dushshantha Chandradasa wrote:
>>>
>>> 
>>>
>>>> HI Krishna,
>>>>
>>>>
>>>>
>>>> If you are not a committer, you cannot assign the issue to 
>>>> yourself. If you can please attach the diff with respect to the svn 
>>>> head to the
>>>> 
>>>
>>
>> 
>>
>>>> issue, I can test the changes and commit it to the SVN.
>>>>
>>>> **
>>>>
>>>>
>>>>
>>>>
>>>> 
>>>
>> 
------------------------------------------------------------------------
>> 
>>
>>>> *From:* krishna [mailto:krishna@lac.uic.edu]
>>>> *Sent:* Wednesday, October 12, 2005 6:17 AM
>>>> *To:* axis-c-dev@ws.apache.org
>>>> *Subject:* AXISCPP-634
>>>>
>>>>
>>>>
>>>> Hi All
>>>>
>>>> I am currently implementing a webservices solution using Axis C++. My
>>>> 
>>>
>>
>> 
>>
>>>> webservices solution urgently requires
>>>> functionality provided by AXISCPP-634. ( Setting attributes for 
>>>> complex types in the SOAP-RESPONSE )
>>>> http://issues.apache.org/jira/browse/AXISCPP-634.
>>>>
>>>> 
>>>>
>>>>> From JIRA I understand that it is still unassigned.
>>>>> 
>>>>
>>>> If nobody is working on it, would it be possible for me to contribute
>>>> 
>>>
>>
>> 
>>
>>>> in resolving AXISCPP-634??
>>>>
>>>> Thanks
>>>> Krishna Kumar Rajagopalan
>>>> http://uic.edu/~krajag2 <http://uic.edu/%7Ekrajag2>
>>>>
>>>> 
>>>
>>> 
-----------------------------------------------------------------------
>>> 
>>
>> -
>> 
>>
>>> /*
>>> *Sample Code for Array: By Krishna Kumar Rajagopalan
>>> *Uses a RPC Web Service
>>> *
>>> */
>>>
>>> #include "ArrayTestPortType.hpp"
>>> #include <stdio.h>
>>> #include <iostream>
>>>
>>> unsigned int ARRAY_SIZE=1;
>>>
>>> int main(int argc,char *argv[])
>>> {
>>>     char serverurl[500]="http://localhost/axis/arrayPS";
>>>     intArrayType arr_in;
>>>     intArrayType *arr_out;
>>>     arr_in.intItem.m_Size = 1;
>>>     int arr[1];
>>>     if( argc > 1 )
>>>     {
>>>         switch(argc)
>>>         {
>>>                   default: printf("\n Extra parameters specified!!
>>> 
>>
>> Neglecting extra parameters \n");
>> 
>>
>>>               case 3:    strcpy(serverurl,argv[2]);
>>>             case 2: arr[0]=atoi(argv[1]);
>>>         }
>>>     }
>>>     else
>>>     { 
>>>         printf("\n Switching to defaults \n");
>>>         arr[0]=0;
>>>         strcpy(serverurl,"http://localhost/axis/arrayPS");
>>>     }
>>>
>>>     arr_in.intItem.m_Array = new int*;
>>>     arr_in.intItem.m_Array[0] = &arr[0];
>>> 
>>>     ArrayTestPortType ws(serverurl);
>>>     printf("\n Invoking Echo int Array \n");
>>>     try
>>>     {
>>>         ws.setTransportTimeout(10000);
>>>         if ((arr_out =
>>> 
>>
>> ws.echoIntArray(&arr_in))->intItem.m_Array == NULL )
>> 
>>
>>>         {
>>>             printf("\n Received Null \n");
>>>         }
>>>         else
>>>         {
>>>             printf("\n Not null output !! ");
>>>             cout<<"Array size is
>>> 
>>
>> "<<arr_out->intItem.m_Size<<endl;
>> 
>>
>>>             for( int i=0; i < arr_out->intItem.m_Size; i++)
>>>             {
>>>                 printf("\n Item %d is
>>> 
>>
>> %d",i,*(arr_out->intItem.m_Array[i]));
>> 
>>
>>>             }
>>>         }
>>>     }
>>>     catch(AxisException& e)
>>>     {
>>>              printf("Exception : %s\n", e.what());
>>>     }
>>>       catch(exception& e)
>>>     {
>>>              printf("Unknown exception has occured\n");
>>>     }
>>>     catch(...)
>>>     {
>>>              printf("Unknown exception has occured\n");
>>>     }
>>>     return 0;
>>> }
>>>
>>>
>>> 
-----------------------------------------------------------------------
>>> 
>>
>> -
>> 
>>
>>> /*
>>> * This file was auto-generated by the Axis C++ Web Service Generator
>>> 
>>
>> (WSDL2Ws)
>> 
>>
>>> * This file contains Client Stub implementation for remote web
>>> 
>>
>> service.
>> 
>>
>>> */
>>>
>>> #include "ArrayTestPortType.hpp"
>>>
>>> #include <axis/AxisWrapperAPI.hpp>
>>> #include <string.h>
>>>
>>> using namespace std;
>>>
>>> extern int Axis_DeSerialize_intArrayType(intArrayType* param,
>>> 
>>
>> IWrapperSoapDeSerializer* pDZ);
>> 
>>
>>> extern void* Axis_Create_intArrayType(intArrayType *Obj, bool bArray =
>>> 
>>
>> false, int nSize=0);
>> 
>>
>>> extern void Axis_Delete_intArrayType(intArrayType* param, bool bArray 
=
>>> 
>>
>> false, int nSize=0);
>> 
>>
>>> extern int Axis_Serialize_intArrayType(intArrayType* param,
>>> 
>>
>> IWrapperSoapSerializer* pSZ, bool bArray = false);
>> 
>>
>>> extern int Axis_GetSize_intArrayType();
>>>
>>> ArrayTestPortType::ArrayTestPortType(const char* pchEndpointUri,
>>> 
>>
>> AXIS_PROTOCOL_TYPE eProtocol)
>> 
>>
>>> :Stub(pchEndpointUri, eProtocol)
>>> {
>>> }
>>>
>>> ArrayTestPortType::ArrayTestPortType()
>>> :Stub(" ", APTHTTP1_1)
>>> {
>>>     m_pCall->setEndpointURI("http://localhost/axis/arrayPS");
>>> }
>>>
>>> ArrayTestPortType::~ArrayTestPortType()
>>> {
>>> }
>>>
>>>
>>> /*Methods corresponding to the web service methods*/
>>>
>>> /*
>>> * This method wrap the service method echoIntArray
>>> */
>>> intArrayType* ArrayTestPortType::echoIntArray(intArrayType* Value0)
>>> {
>>>     intArrayType* pReturn = NULL;
>>>     const char* pcCmplxFaultName;
>>>     try
>>>     {
>>>         if (AXIS_SUCCESS !=
>>> 
>>
>> m_pCall->initialize(CPP_RPC_PROVIDER)) 
>>
>>>             return pReturn;
>>>     if (NULL==m_pCall->getTransportProperty("SOAPAction",false))
>>>     {
>>>         m_pCall->setTransportProperty(SOAPACTION_HEADER ,
>>> 
>>
>> "arrayPS#echoIntArray");
>> 
>>
>>>     }
>>>         m_pCall->setSOAPVersion(SOAP_VER_1_1);
>>>         m_pCall->setOperation("echoIntArray",
>>> 
>>
>> "http://soapinterop.org/");
>> 
>>
>>>         applyUserPreferences();
>>>     m_pCall->addCmplxParameter(Value0,
>>> 
>>
>> (void*)Axis_Serialize_intArrayType, (void*)Axis_Delete_intArrayType,
>> "inputIntArrayType", Axis_URI_intArrayType);
>> 
>>
>>>         if (AXIS_SUCCESS == m_pCall->invoke())
>>>         {
>>>             if(AXIS_SUCCESS ==
>>> 
>>
>> m_pCall->checkMessage("echoIntArrayResponse",
>> "http://soapinterop.org/"))
>> 
>>
>>>             {
>>>                 pReturn =
>>> 
>>
>> (intArrayType*)m_pCall->getCmplxObject((void*)
>> Axis_DeSerialize_intArrayType, (void*) Axis_Create_intArrayType, 
(void*)
>> Axis_Delete_intArrayType,"_return", 0);
>> 
>>
>>>         }
>>>         }
>>>     m_pCall->unInitialize();
>>>         return pReturn;
>>>     }
>>>     catch(AxisException& e)
>>>     {
>>>         int iExceptionCode = e.getExceptionCode();
>>>         if(AXISC_NODE_VALUE_MISMATCH_EXCEPTION !=
>>> 
>>
>> iExceptionCode)
>> 
>>
>>>         {
>>>             throw SoapFaultException(e);
>>>         }
>>>         ISoapFault* pSoapFault = (ISoapFault*)
>>>
>>> 
>>
>> m_pCall->checkFault("Fault","http://localhost/axis/arrayPS" );
>> 
>>
>>>         if(pSoapFault)
>>>         {
>>>             m_pCall->unInitialize();
>>>             throw SoapFaultException(e);
>>>         }
>>>         else throw;
>>>     }
>>> }
>>>
>>>
>>>
>>> 
-----------------------------------------------------------------------
>>> 
>>
>> -
>> 
>>
>>> /*
>>> * This file was auto-generated by the Axis C++ Web Service Generator
>>> 
>>
>> (WSDL2Ws)
>> 
>>
>>> * This file contains Client Stub Class for remote web service */
>>>
>>> #if !defined(__ARRAYTESTPORTTYPE_CLIENTSTUB_H__INCLUDED_)
>>> #define __ARRAYTESTPORTTYPE_CLIENTSTUB_H__INCLUDED_
>>>
>>> #include <axis/client/Stub.hpp>
>>> #include <axis/SoapFaultException.hpp>
>>> #include <axis/ISoapFault.hpp>
>>> AXIS_CPP_NAMESPACE_USE
>>> #include "intArrayType.hpp"
>>>
>>> class ArrayTestPortType :public Stub
>>> {
>>> public:
>>>     STORAGE_CLASS_INFO ArrayTestPortType(const char* pchEndpointUri,
>>> 
>>
>> AXIS_PROTOCOL_TYPE eProtocol=APTHTTP1_1);
>> 
>>
>>>     STORAGE_CLASS_INFO ArrayTestPortType();
>>> public:
>>>     STORAGE_CLASS_INFO virtual ~ArrayTestPortType();
>>> public:     STORAGE_CLASS_INFO intArrayType* 
echoIntArray(intArrayType*
>>> 
>>
>> Value0);
>> 
>>
>>> };
>>>
>>> #endif /* !defined(__ARRAYTESTPORTTYPE_CLIENTSTUB_H__INCLUDED_)*/
>>>
>>>
>>> 
-----------------------------------------------------------------------
>>> 
>>
>> -
>> 
>>
>>> /*
>>> * Copyright 2003-2004 The Apache Software Foundation.
>>>
>>> *
>>> * Licensed under the Apache License, Version 2.0 (the "License");
>>> * you may not use this file except in compliance with the License.
>>> * You may obtain a copy of the License at
>>> *
>>> *        http://www.apache.org/licenses/LICENSE-2.0
>>> *
>>> * Unless required by applicable law or agreed to in writing, software
>>> * distributed under the License is distributed on an "AS IS" BASIS,
>>> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>> 
>>
>> implied.
>> 
>>
>>> * See the License for the specific language governing permissions and
>>> * limitations under the License.
>>> *
>>> * This file was auto-generated by the Axis C++ Web Service Generator
>>> 
>>
>> (WSDL2Ws)
>> 
>>
>>> * This file contains functions to manipulate complex type intArrayType
>>> */
>>>
>>> #include "intArrayType.hpp"
>>> #include <axis/AxisWrapperAPI.hpp>
>>> #include <iostream>
>>>
>>> using namespace std;
>>>
>>> xsd__int_Array intArrayType::getintItem()
>>> {
>>>     return intItem ; }
>>>
>>> void intArrayType::setintItem(xsd__int_Array InValue)
>>> {
>>>     intItem = InValue ; }
>>> /*
>>> * This static method serialize a intArrayType type of object
>>> */
>>> int Axis_Serialize_intArrayType(intArrayType* param,
>>> 
>>
>> IWrapperSoapSerializer* pSZ, bool bArray = false)
>> 
>>
>>> {
>>>     if (bArray)
>>>     {
>>>         pSZ->serialize("<", Axis_TypeName_intArrayType, ">",
>>> 
>>
>> NULL);
>> 
>>
>>>     }
>>>     else
>>>     {
>>>         bool blnIsNewPrefix = false;
>>>         const AxisChar* sPrefix =
>>> 
>>
>> pSZ->getNamespacePrefix(Axis_URI_intArrayType, blnIsNewPrefix);
>> 
>>
>>>         if (!blnIsNewPrefix)
>>>         {
>>>             pSZ->serialize("<", Axis_TypeName_intArrayType,
>>> 
>>
>> " xsi:type=\"", sPrefix, ":",
>> 
>>
>>>                 Axis_TypeName_intArrayType, "\">",
>>> 
>>
>> NULL);
>> 
>>
>>>         }
>>>         else
>>>         {
>>>             pSZ->serialize("<", Axis_TypeName_intArrayType,
>>> 
>>
>> " xsi:type=\"", sPrefix, ":",
>> 
>>
>>>                 Axis_TypeName_intArrayType, "\" xmlns:",
>>> 
>>
>> sPrefix, "=\"",
>> 
>>
>>>                 Axis_URI_intArrayType, "\">", NULL);
>>>         }
>>>     }
>>>
>>>     pSZ->serializeBasicArray((Axis_Array*)(&param->intItem),XSD_INT,
>>> 
>>
>> "intItem");
>> 
>>
>>>     pSZ->serialize("</", Axis_TypeName_intArrayType, ">", NULL);
>>>     return AXIS_SUCCESS;
>>> }
>>>
>>> /*
>>> * This static method deserialize a intArrayType type of object
>>> */
>>> int Axis_DeSerialize_intArrayType(intArrayType* param,
>>> 
>>
>> IWrapperSoapDeSerializer* pIWSDZ)
>> 
>>
>>> {
>>>     //printf("\n The attribute is
>>> 
>>
>> %s",pIWSDZ->getAttributeAsString("ref",0));
>> 
>>
>>>     param->intItem = (xsd__int_Array&)pIWSDZ->getBasicArray(XSD_INT,
>>> 
>>
>> "intItem",0);
>> 
>>
>>>     return pIWSDZ->getStatus();
>>> }
>>> void* Axis_Create_intArrayType(intArrayType* pObj, bool bArray = 
false,
>>> 
>>
>> int nSize=0)
>> 
>>
>>> {
>>>     if (bArray && (nSize > 0))
>>>     {
>>>         if (pObj)
>>>         {
>>>             intArrayType* pNew = new intArrayType[nSize];
>>>             memcpy(pNew, pObj,
>>> 
>>
>> sizeof(intArrayType)*nSize/2);
>> 
>>
>>>             memset(pObj, 0, sizeof(intArrayType)*nSize/2);
>>>             delete [] pObj;
>>>             return pNew;
>>>         }
>>>         else
>>>         {
>>>             return new intArrayType[nSize];
>>>         }
>>>     }
>>>     else
>>>         return new intArrayType;
>>> }
>>>
>>> /*
>>> * This static method delete a intArrayType type of object
>>> */
>>> void Axis_Delete_intArrayType(intArrayType* param, bool bArray = 
false,
>>> 
>>
>> int nSize=0)
>> 
>>
>>> {
>>>     if (bArray)
>>>     {
>>>         delete [] param;
>>>     }
>>>     else
>>>     {
>>>         delete param;
>>>     }
>>> }
>>> /*
>>> * This static method gives the size of intArrayType type of object
>>> */
>>> int Axis_GetSize_intArrayType()
>>> {
>>>     return sizeof(intArrayType);
>>> }
>>>
>>> intArrayType::intArrayType()
>>> {
>>>     /*do not allocate memory to any pointer members here
>>>      because deserializer will allocate memory anyway. */
>>>     intItem.m_Array = 0;
>>>     intItem.m_Size = 0;
>>> }
>>>
>>> intArrayType::~intArrayType()
>>> {
>>>     /*delete any pointer and array members here*/
>>>     delete [] ((xsd__int*)intItem.m_Array);
>>> }
>>>
>>>
>>> 
-----------------------------------------------------------------------
>>> 
>>
>> -
>> 
>>
>>> /*
>>> * Copyright 2003-2004 The Apache Software Foundation.
>>>
>>> *
>>> * Licensed under the Apache License, Version 2.0 (the "License");
>>> * you may not use this file except in compliance with the License.
>>> * You may obtain a copy of the License at
>>> *
>>> *        http://www.apache.org/licenses/LICENSE-2.0
>>> *
>>> * Unless required by applicable law or agreed to in writing, software
>>> * distributed under the License is distributed on an "AS IS" BASIS,
>>> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>> 
>>
>> implied.
>> 
>>
>>> * See the License for the specific language governing permissions and
>>> * limitations under the License.
>>> *
>>> * This file was auto-generated by the Axis C++ Web Service Generator
>>> 
>>
>> (WSDL2Ws)
>> 
>>
>>> * This file contains functions to manipulate complex type intArrayType
>>> */
>>>
>>> #if !defined(__INTARRAYTYPE_PARAM_H__INCLUDED_)
>>> #define __INTARRAYTYPE_PARAM_H__INCLUDED_
>>>
>>> #include <axis/AxisUserAPI.hpp>
>>> AXIS_CPP_NAMESPACE_USE
>>> /*Local name and the URI for the type*/
>>> static const char* Axis_URI_intArrayType =
>>> 
>>
>> "http://soapinterop.org/xsd";
>> 
>>
>>> static const char* Axis_TypeName_intArrayType = "intArrayType";
>>>
>>> class intArrayType
>>> {
>>> public:
>>>     xsd__int_Array    intItem;
>>>
>>>     xsd__int_Array getintItem();
>>>     void setintItem(xsd__int_Array InValue);
>>>
>>>     intArrayType();
>>>     virtual ~intArrayType();
>>> };
>>>
>>> #endif /* !defined(__INTARRAYTYPE_PARAM_H__INCLUDED_)*/
>>>
>>>
>>> 
>>
>>
>>
>>
>> 
>>
>
>
>



Re: AXISCPP-634

Posted by krishna <kr...@lac.uic.edu>.
Hi All

I would like to enquire if a patch for AXISCPP-634 has been developed.
( AXISCPP-634 deals with adding attribute to complex types in the 
SOAP-RESPONSE -
I did look through the mailing list and was unable to find it )

My understanding is that as the attributes have to be for 
serialized/deserialized
changes would be required to the stub code generated by the wsdl2ws tool.
Is there an alternate method of implementing this?

Also, There was a mistake in my previous email regarding the JIRA 
number. Sorry for the confusion.

Thanks
Krishna


krishna wrote:

> Hi Chinthana
>
> I would like to enquire if a patch for AXISCPP-674 has been developed.
> ( AXISCPP-674 deals with adding attribute to complex types in the 
> SOAP-RESPONSE -
> I did look through the mailing list and was unable to find it )
>
> My understanding is that as the attributes have to be for 
> serialized/deserialized
> changes would be required to the stub code generated by the wsdl2ws tool.
> Is there an alternate method of implementing this?
>
> Thanks
> Krishna
>
> Chinthana C. Dinapala wrote:
>
>> Hi Krishna,
>>
>> See the comments bellow. If you attached your modification (diff) I'll
>> be able to test the patch and commit the code in to SVN. Also used SVN
>> code which is latest code.
>> About SVN checkout see following site.
>> http://ws.apache.org/axis/cpp/windev-guide.html#svncheckout
>>
>>
>> My basic question is:
>> Do I need to call getElementForAttributes before calling
>> getAttributeAs...?
>>
>> [Chinthana C. Dinapala] yes. As it's now you have to call this function
>> first.
>> And if so will it become a part of IWrapperSoapDeSerializer in the
>> future?
>>
>> [Chinthana C. Dinapala] seems to me it has to be adding to solve the
>> problem.
>>
>> Thanks
>> Chinthana
>>
>>
>>
>> krishna wrote:
>>
>>  
>>
>>> Hi All
>>>
>>> This is in regard to AXISCPP-634. I was trying to use the method
>>> getAttributeAsString() in IWrapperSoapDeSerializer and was unable to 
>>> get the required result.
>>>
>>> On Looking up SoapDeSerializer.cpp I understood that 
>>> getElementForAttribute was to be called before
>>> calling getAttributeAsString.
>>> ** Code/Comments from SoapDeSerializer.cpp **
>>>           /*
>>>  1463  * Before calling any of getAttributeAs... API functions the 
>>> user should move
>>>  1464  * current Element to the right Element by calling 
>>> GetElementForAttributes(..)
>>>  1465  */
>>>  1466 xsd__int *
>>>  1467     SoapDeSerializer::getAttributeAsInt (const AxisChar *
>>>   
>>
>> pName,
>>  
>>
>>>  1468                                          const AxisChar * 
>>> pNamespace)
>>>  1469 {
>>>  1470     Int simpleType;
>>>  1471     getAttribute(pName, pNamespace, &simpleType);
>>>  1472         return simpleType.getInt();
>>>  1473 }
>>>
>>> But getElementForAttribute is not available in
>>>   
>>
>> IWrapperSoapDeSerializer
>>  
>>
>>> which is the object accessible in the stubs.
>>>
>>> Also getElementForAttribute is a private method in SoapDeSerializer
>>>
>>> SOAP - RESPONSE
>>> <ns1:echoIntArrayResponse xmlns:ns1="http://soapinterop.org/">
>>> <intArrayType xsi:type="ns2:intArrayType" 
>>> xmlns:ns2="http://soapinterop.org/xsd" 
>>> ref="http://www.lac.uic.edu:8080" >
>>> <item>0</item>
>>>
>>> What I would ideally like to do is
>>> extract the ref tag above in the axis client stub code within the 
>>> deserialize function found in intArrayType.cpp
>>>
>>> int Axis_DeSerialize_intArrayType(intArrayType* param, 
>>> IWrapperSoapDeSerializer* pIWSDZ)
>>>    72 {
>>>    73         *printf("\n The attribute is 
>>> %s",pIWSDZ->getAttributeAsString("ref",0));*
>>>    74         param->intItem = 
>>> (xsd__int_Array&)pIWSDZ->getBasicArray(XSD_INT, "intItem",0);
>>>    75         return pIWSDZ->getStatus();
>>>    76 }
>>>
>>> Currently the above code returns null. output
>>> --- The attribute is (null) ----
>>>
>>> Line 73 was the only line added by me to the stubs.
>>> But after doing some changes to IWrapperSoapDeSerializer to make 
>>> getElementForAttribute accessible and adding
>>>
>>>     getElementForAttribute("intArrayType",0); before line 73 makes 
>>> things work.
>>>
>>> Is this the way of getting the attributes from the soap message or 
>>> am I missing something?
>>>
>>> I have attached the client stub code. I am using axiscpp checked out 
>>> from the CVS on 25th July 2005
>>>
>>> Thanks
>>> Krishna
>>>
>>> Dushshantha Chandradasa wrote:
>>>
>>>   
>>>
>>>> HI Krishna,
>>>>
>>>>
>>>>
>>>> If you are not a committer, you cannot assign the issue to 
>>>> yourself. If you can please attach the diff with respect to the svn 
>>>> head to the
>>>>     
>>>
>>
>>  
>>
>>>> issue, I can test the changes and commit it to the SVN.
>>>>
>>>> **
>>>>
>>>>
>>>>
>>>>
>>>>     
>>>
>> ------------------------------------------------------------------------
>>  
>>
>>>> *From:* krishna [mailto:krishna@lac.uic.edu]
>>>> *Sent:* Wednesday, October 12, 2005 6:17 AM
>>>> *To:* axis-c-dev@ws.apache.org
>>>> *Subject:* AXISCPP-634
>>>>
>>>>
>>>>
>>>> Hi All
>>>>
>>>> I am currently implementing a webservices solution using Axis C++. My
>>>>     
>>>
>>
>>  
>>
>>>> webservices solution urgently requires
>>>> functionality provided by AXISCPP-634. ( Setting attributes for 
>>>> complex types in the SOAP-RESPONSE )
>>>> http://issues.apache.org/jira/browse/AXISCPP-634.
>>>>
>>>>     
>>>>
>>>>> From JIRA I understand that it is still unassigned.
>>>>>       
>>>>
>>>> If nobody is working on it, would it be possible for me to contribute
>>>>     
>>>
>>
>>  
>>
>>>> in resolving AXISCPP-634??
>>>>
>>>> Thanks
>>>> Krishna Kumar Rajagopalan
>>>> http://uic.edu/~krajag2 <http://uic.edu/%7Ekrajag2>
>>>>
>>>>     
>>>
>>> -----------------------------------------------------------------------
>>>   
>>
>> -
>>  
>>
>>> /*
>>> *Sample Code for Array: By Krishna Kumar Rajagopalan
>>> *Uses a RPC Web Service
>>> *
>>> */
>>>
>>> #include "ArrayTestPortType.hpp"
>>> #include <stdio.h>
>>> #include <iostream>
>>>
>>> unsigned int ARRAY_SIZE=1;
>>>
>>> int main(int argc,char *argv[])
>>> {
>>>     char serverurl[500]="http://localhost/axis/arrayPS";
>>>     intArrayType arr_in;
>>>     intArrayType *arr_out;
>>>     arr_in.intItem.m_Size = 1;
>>>     int arr[1];
>>>     if( argc > 1 )
>>>     {
>>>         switch(argc)
>>>         {
>>>                   default: printf("\n Extra parameters specified!!
>>>   
>>
>> Neglecting extra parameters \n");
>>  
>>
>>>               case 3:    strcpy(serverurl,argv[2]);
>>>             case 2: arr[0]=atoi(argv[1]);
>>>         }
>>>     }
>>>     else
>>>     {       
>>>         printf("\n Switching to defaults \n");
>>>         arr[0]=0;
>>>         strcpy(serverurl,"http://localhost/axis/arrayPS");
>>>     }
>>>
>>>     arr_in.intItem.m_Array = new int*;
>>>     arr_in.intItem.m_Array[0] = &arr[0];
>>>     
>>>     ArrayTestPortType ws(serverurl);
>>>     printf("\n Invoking Echo int Array \n");
>>>     try
>>>     {
>>>         ws.setTransportTimeout(10000);
>>>         if ((arr_out =
>>>   
>>
>> ws.echoIntArray(&arr_in))->intItem.m_Array == NULL )
>>  
>>
>>>         {
>>>             printf("\n Received Null \n");
>>>         }
>>>         else
>>>         {
>>>             printf("\n Not null output !! ");
>>>             cout<<"Array size is
>>>   
>>
>> "<<arr_out->intItem.m_Size<<endl;
>>  
>>
>>>             for( int i=0; i < arr_out->intItem.m_Size; i++)
>>>             {
>>>                 printf("\n Item %d is
>>>   
>>
>> %d",i,*(arr_out->intItem.m_Array[i]));
>>  
>>
>>>             }
>>>         }
>>>     }
>>>     catch(AxisException& e)
>>>     {
>>>              printf("Exception : %s\n", e.what());
>>>     }
>>>       catch(exception& e)
>>>     {
>>>              printf("Unknown exception has occured\n");
>>>     }
>>>     catch(...)
>>>     {
>>>              printf("Unknown exception has occured\n");
>>>     }
>>>     return 0;
>>> }
>>>
>>>
>>> -----------------------------------------------------------------------
>>>   
>>
>> -
>>  
>>
>>> /*
>>> * This file was auto-generated by the Axis C++ Web Service Generator
>>>   
>>
>> (WSDL2Ws)
>>  
>>
>>> * This file contains Client Stub implementation for remote web
>>>   
>>
>> service.
>>  
>>
>>> */
>>>
>>> #include "ArrayTestPortType.hpp"
>>>
>>> #include <axis/AxisWrapperAPI.hpp>
>>> #include <string.h>
>>>
>>> using namespace std;
>>>
>>> extern int Axis_DeSerialize_intArrayType(intArrayType* param,
>>>   
>>
>> IWrapperSoapDeSerializer* pDZ);
>>  
>>
>>> extern void* Axis_Create_intArrayType(intArrayType *Obj, bool bArray =
>>>   
>>
>> false, int nSize=0);
>>  
>>
>>> extern void Axis_Delete_intArrayType(intArrayType* param, bool bArray =
>>>   
>>
>> false, int nSize=0);
>>  
>>
>>> extern int Axis_Serialize_intArrayType(intArrayType* param,
>>>   
>>
>> IWrapperSoapSerializer* pSZ, bool bArray = false);
>>  
>>
>>> extern int Axis_GetSize_intArrayType();
>>>
>>> ArrayTestPortType::ArrayTestPortType(const char* pchEndpointUri,
>>>   
>>
>> AXIS_PROTOCOL_TYPE eProtocol)
>>  
>>
>>> :Stub(pchEndpointUri, eProtocol)
>>> {
>>> }
>>>
>>> ArrayTestPortType::ArrayTestPortType()
>>> :Stub(" ", APTHTTP1_1)
>>> {
>>>     m_pCall->setEndpointURI("http://localhost/axis/arrayPS");
>>> }
>>>
>>> ArrayTestPortType::~ArrayTestPortType()
>>> {
>>> }
>>>
>>>
>>> /*Methods corresponding to the web service methods*/
>>>
>>> /*
>>> * This method wrap the service method echoIntArray
>>> */
>>> intArrayType* ArrayTestPortType::echoIntArray(intArrayType* Value0)
>>> {
>>>     intArrayType* pReturn = NULL;
>>>     const char* pcCmplxFaultName;
>>>     try
>>>     {
>>>         if (AXIS_SUCCESS !=
>>>   
>>
>> m_pCall->initialize(CPP_RPC_PROVIDER))  
>>
>>>             return pReturn;
>>>     if (NULL==m_pCall->getTransportProperty("SOAPAction",false))
>>>     {
>>>         m_pCall->setTransportProperty(SOAPACTION_HEADER ,
>>>   
>>
>> "arrayPS#echoIntArray");
>>  
>>
>>>     }
>>>         m_pCall->setSOAPVersion(SOAP_VER_1_1);
>>>         m_pCall->setOperation("echoIntArray",
>>>   
>>
>> "http://soapinterop.org/");
>>  
>>
>>>         applyUserPreferences();
>>>     m_pCall->addCmplxParameter(Value0,
>>>   
>>
>> (void*)Axis_Serialize_intArrayType, (void*)Axis_Delete_intArrayType,
>> "inputIntArrayType", Axis_URI_intArrayType);
>>  
>>
>>>         if (AXIS_SUCCESS == m_pCall->invoke())
>>>         {
>>>             if(AXIS_SUCCESS ==
>>>   
>>
>> m_pCall->checkMessage("echoIntArrayResponse",
>> "http://soapinterop.org/"))
>>  
>>
>>>             {
>>>                 pReturn =
>>>   
>>
>> (intArrayType*)m_pCall->getCmplxObject((void*)
>> Axis_DeSerialize_intArrayType, (void*) Axis_Create_intArrayType, (void*)
>> Axis_Delete_intArrayType,"_return", 0);
>>  
>>
>>>         }
>>>         }
>>>     m_pCall->unInitialize();
>>>         return pReturn;
>>>     }
>>>     catch(AxisException& e)
>>>     {
>>>         int iExceptionCode = e.getExceptionCode();
>>>         if(AXISC_NODE_VALUE_MISMATCH_EXCEPTION !=
>>>   
>>
>> iExceptionCode)
>>  
>>
>>>         {
>>>             throw SoapFaultException(e);
>>>         }
>>>         ISoapFault* pSoapFault = (ISoapFault*)
>>>
>>>   
>>
>> m_pCall->checkFault("Fault","http://localhost/axis/arrayPS" );
>>  
>>
>>>         if(pSoapFault)
>>>         {
>>>             m_pCall->unInitialize();
>>>             throw SoapFaultException(e);
>>>         }
>>>         else throw;
>>>     }
>>> }
>>>
>>>
>>>
>>> -----------------------------------------------------------------------
>>>   
>>
>> -
>>  
>>
>>> /*
>>> * This file was auto-generated by the Axis C++ Web Service Generator
>>>   
>>
>> (WSDL2Ws)
>>  
>>
>>> * This file contains Client Stub Class for remote web service */
>>>
>>> #if !defined(__ARRAYTESTPORTTYPE_CLIENTSTUB_H__INCLUDED_)
>>> #define __ARRAYTESTPORTTYPE_CLIENTSTUB_H__INCLUDED_
>>>
>>> #include <axis/client/Stub.hpp>
>>> #include <axis/SoapFaultException.hpp>
>>> #include <axis/ISoapFault.hpp>
>>> AXIS_CPP_NAMESPACE_USE
>>> #include "intArrayType.hpp"
>>>
>>> class ArrayTestPortType :public Stub
>>> {
>>> public:
>>>     STORAGE_CLASS_INFO ArrayTestPortType(const char* pchEndpointUri,
>>>   
>>
>> AXIS_PROTOCOL_TYPE eProtocol=APTHTTP1_1);
>>  
>>
>>>     STORAGE_CLASS_INFO ArrayTestPortType();
>>> public:
>>>     STORAGE_CLASS_INFO virtual ~ArrayTestPortType();
>>> public:     STORAGE_CLASS_INFO intArrayType* echoIntArray(intArrayType*
>>>   
>>
>> Value0);
>>  
>>
>>> };
>>>
>>> #endif /* !defined(__ARRAYTESTPORTTYPE_CLIENTSTUB_H__INCLUDED_)*/
>>>
>>>
>>> -----------------------------------------------------------------------
>>>   
>>
>> -
>>  
>>
>>> /*
>>> * Copyright 2003-2004 The Apache Software Foundation.
>>>
>>> *
>>> * Licensed under the Apache License, Version 2.0 (the "License");
>>> * you may not use this file except in compliance with the License.
>>> * You may obtain a copy of the License at
>>> *
>>> *        http://www.apache.org/licenses/LICENSE-2.0
>>> *
>>> * Unless required by applicable law or agreed to in writing, software
>>> * distributed under the License is distributed on an "AS IS" BASIS,
>>> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>   
>>
>> implied.
>>  
>>
>>> * See the License for the specific language governing permissions and
>>> * limitations under the License.
>>> *
>>> * This file was auto-generated by the Axis C++ Web Service Generator
>>>   
>>
>> (WSDL2Ws)
>>  
>>
>>> * This file contains functions to manipulate complex type intArrayType
>>> */
>>>
>>> #include "intArrayType.hpp"
>>> #include <axis/AxisWrapperAPI.hpp>
>>> #include <iostream>
>>>
>>> using namespace std;
>>>
>>> xsd__int_Array intArrayType::getintItem()
>>> {
>>>     return intItem ; }
>>>
>>> void intArrayType::setintItem(xsd__int_Array InValue)
>>> {
>>>     intItem = InValue ; }
>>> /*
>>> * This static method serialize a intArrayType type of object
>>> */
>>> int Axis_Serialize_intArrayType(intArrayType* param,
>>>   
>>
>> IWrapperSoapSerializer* pSZ, bool bArray = false)
>>  
>>
>>> {
>>>     if (bArray)
>>>     {
>>>         pSZ->serialize("<", Axis_TypeName_intArrayType, ">",
>>>   
>>
>> NULL);
>>  
>>
>>>     }
>>>     else
>>>     {
>>>         bool blnIsNewPrefix = false;
>>>         const AxisChar* sPrefix =
>>>   
>>
>> pSZ->getNamespacePrefix(Axis_URI_intArrayType, blnIsNewPrefix);
>>  
>>
>>>         if (!blnIsNewPrefix)
>>>         {
>>>             pSZ->serialize("<", Axis_TypeName_intArrayType,
>>>   
>>
>> " xsi:type=\"", sPrefix, ":",
>>  
>>
>>>                 Axis_TypeName_intArrayType, "\">",
>>>   
>>
>> NULL);
>>  
>>
>>>         }
>>>         else
>>>         {
>>>             pSZ->serialize("<", Axis_TypeName_intArrayType,
>>>   
>>
>> " xsi:type=\"", sPrefix, ":",
>>  
>>
>>>                 Axis_TypeName_intArrayType, "\" xmlns:",
>>>   
>>
>> sPrefix, "=\"",
>>  
>>
>>>                 Axis_URI_intArrayType, "\">", NULL);
>>>         }
>>>     }
>>>
>>>     pSZ->serializeBasicArray((Axis_Array*)(&param->intItem),XSD_INT,
>>>   
>>
>> "intItem");
>>  
>>
>>>     pSZ->serialize("</", Axis_TypeName_intArrayType, ">", NULL);
>>>     return AXIS_SUCCESS;
>>> }
>>>
>>> /*
>>> * This static method deserialize a intArrayType type of object
>>> */
>>> int Axis_DeSerialize_intArrayType(intArrayType* param,
>>>   
>>
>> IWrapperSoapDeSerializer* pIWSDZ)
>>  
>>
>>> {
>>>     //printf("\n The attribute is
>>>   
>>
>> %s",pIWSDZ->getAttributeAsString("ref",0));
>>  
>>
>>>     param->intItem = (xsd__int_Array&)pIWSDZ->getBasicArray(XSD_INT,
>>>   
>>
>> "intItem",0);
>>  
>>
>>>     return pIWSDZ->getStatus();
>>> }
>>> void* Axis_Create_intArrayType(intArrayType* pObj, bool bArray = false,
>>>   
>>
>> int nSize=0)
>>  
>>
>>> {
>>>     if (bArray && (nSize > 0))
>>>     {
>>>         if (pObj)
>>>         {
>>>             intArrayType* pNew = new intArrayType[nSize];
>>>             memcpy(pNew, pObj,
>>>   
>>
>> sizeof(intArrayType)*nSize/2);
>>  
>>
>>>             memset(pObj, 0, sizeof(intArrayType)*nSize/2);
>>>             delete [] pObj;
>>>             return pNew;
>>>         }
>>>         else
>>>         {
>>>             return new intArrayType[nSize];
>>>         }
>>>     }
>>>     else
>>>         return new intArrayType;
>>> }
>>>
>>> /*
>>> * This static method delete a intArrayType type of object
>>> */
>>> void Axis_Delete_intArrayType(intArrayType* param, bool bArray = false,
>>>   
>>
>> int nSize=0)
>>  
>>
>>> {
>>>     if (bArray)
>>>     {
>>>         delete [] param;
>>>     }
>>>     else
>>>     {
>>>         delete param;
>>>     }
>>> }
>>> /*
>>> * This static method gives the size of intArrayType type of object
>>> */
>>> int Axis_GetSize_intArrayType()
>>> {
>>>     return sizeof(intArrayType);
>>> }
>>>
>>> intArrayType::intArrayType()
>>> {
>>>     /*do not allocate memory to any pointer members here
>>>      because deserializer will allocate memory anyway. */
>>>     intItem.m_Array = 0;
>>>     intItem.m_Size = 0;
>>> }
>>>
>>> intArrayType::~intArrayType()
>>> {
>>>     /*delete any pointer and array members here*/
>>>     delete [] ((xsd__int*)intItem.m_Array);
>>> }
>>>
>>>
>>> -----------------------------------------------------------------------
>>>   
>>
>> -
>>  
>>
>>> /*
>>> * Copyright 2003-2004 The Apache Software Foundation.
>>>
>>> *
>>> * Licensed under the Apache License, Version 2.0 (the "License");
>>> * you may not use this file except in compliance with the License.
>>> * You may obtain a copy of the License at
>>> *
>>> *        http://www.apache.org/licenses/LICENSE-2.0
>>> *
>>> * Unless required by applicable law or agreed to in writing, software
>>> * distributed under the License is distributed on an "AS IS" BASIS,
>>> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>   
>>
>> implied.
>>  
>>
>>> * See the License for the specific language governing permissions and
>>> * limitations under the License.
>>> *
>>> * This file was auto-generated by the Axis C++ Web Service Generator
>>>   
>>
>> (WSDL2Ws)
>>  
>>
>>> * This file contains functions to manipulate complex type intArrayType
>>> */
>>>
>>> #if !defined(__INTARRAYTYPE_PARAM_H__INCLUDED_)
>>> #define __INTARRAYTYPE_PARAM_H__INCLUDED_
>>>
>>> #include <axis/AxisUserAPI.hpp>
>>> AXIS_CPP_NAMESPACE_USE
>>> /*Local name and the URI for the type*/
>>> static const char* Axis_URI_intArrayType =
>>>   
>>
>> "http://soapinterop.org/xsd";
>>  
>>
>>> static const char* Axis_TypeName_intArrayType = "intArrayType";
>>>
>>> class intArrayType
>>> {
>>> public:
>>>     xsd__int_Array    intItem;
>>>
>>>     xsd__int_Array getintItem();
>>>     void setintItem(xsd__int_Array InValue);
>>>
>>>     intArrayType();
>>>     virtual ~intArrayType();
>>> };
>>>
>>> #endif /* !defined(__INTARRAYTYPE_PARAM_H__INCLUDED_)*/
>>>
>>>
>>>   
>>
>>
>>
>>
>>  
>>
>
>
>