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*)(¶m->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*)(¶m->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*)(¶m->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_)*/
>>>
>>>
>>>
>>
>>
>>
>>
>>
>>
>
>
>