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 "Michael Xiong (JIRA)" <ax...@ws.apache.org> on 2006/06/27 17:09:31 UTC

[jira] Created: (AXISCPP-977) axiscpp engine & wsdl2ws: In server response, basic array element no namespace prefix added

axiscpp engine & wsdl2ws: In server response, basic array element no namespace prefix added
-------------------------------------------------------------------------------------------

         Key: AXISCPP-977
         URL: http://issues.apache.org/jira/browse/AXISCPP-977
     Project: Axis-C++
        Type: Improvement

  Components: Serialization, WSDL processing - RPC, Server - Engine  
    Versions:  1.6 Beta    
 Environment:     Platform:
        Linux fedora 3.0
Axis version:
        Server-side Axis C++ 1.6Beta
XML Parser Lib:
xersesc 2.6
WSDL2ws tool by using axis java 1.3
Client-side version Axis java 1.3
Http Server Version:
Apache 2.0.53
Tomcat 2.0.58
    Reporter: Michael Xiong


1. sample WSDL
... ...
		<xs:schema elementFormDefault="qualified" targetNamespace="http://www.foo.bar/foo/bar">
			<xs:element name="AddDog""> 
				<xs:complexType>
					<xs:sequence>
						<xs:element maxOccurs="unbounded" name="Dog" type="mb:DogRequest"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="AddDogResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element minOccurs="0" maxOccurs="unbounded" name="Dog" type="mb:DogInfo"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="DeleteDog">
				<xs:complexType>
					<xs:sequence>
						<xs:element maxOccurs="unbounded" name="Dog" type="mb:DogRequest"/>
						<xs:element minOccurs="0" maxOccurs="1" name="Forced" type="xs:boolean" default="false"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="DeleteDogResponse">
				<xs:complexType>
					<xs:sequence>
						<xs:element minOccurs="0" maxOccurs="unbounded" name="DogId" type="xs:string"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:schema>
... ...

2. I created a c++ server by axiscpp1.6beta  and a java client by axisjava1.3

3. Response from c++ server when do DeleteDog operation from the created java client:
         <ns1:DeleteDogResponse xmlns:ns1="http://www.foo.bar/foo/bar">
            <DogId>1</DogId>
             <DogId>2</DogId>
        </ns1:DeleteDogResponse >

The client can not recognize the response because the expected response seems should be like the below:
         <ns1:DeleteDogResponse xmlns:ns1="http://www.foo.bar/foo/bar">
            <ns1:DogId>1</ns1:DogId>
             <ns1:DogId>2</ns1:DogId>
        </ns1:DeleteDogResponse >

The difference is the lack of ns1: prefix.

4. I've read the related source code of axiscpp and find that the reason is that axiscpp does not pass namespace information when serializing/descrializing basic array parameter.

5. I have succeeded in the modification to axis-c-1.6beta to improve it to support namespace prefix for basic array element like the below:
5.1: Add an interface in IWrapperSoapSerializer(include/axis/IWrapperSoapSerializer.hpp)
//<mxiong debug 2006/6/27 ++
    /* Method used by wrappers to set a to-be-serialized Array of basic types */
    virtual int AXISCALL addOutputBasicArrayParam(const Axis_Array* pArray, 
        XSDTYPE nType, const AxisChar* pName, const AxisChar* pNamespace)=0;
//>mxiong debug 2006/6/27 ++

5.2: Derive the above interface in class SoapSerializer(src/soap/SoapSerializer.h)
//<mxiong debug 2006/6/27 ++
    /* Method used by wrappers to set a to-be-serialized Array of basic types */
    int AXISCALL addOutputBasicArrayParam(const Axis_Array* pArray, 
        XSDTYPE nType, const AxisChar* pName,
        const AxisChar* pNamespace);
//>mxiong debug 2006/6/27 ++

5.3: Implement the above method like the below(src/soap/SoapSerializer.cpp):
//<mxiong debug 2006/6/27 ++
int SoapSerializer::addOutputBasicArrayParam( const Axis_Array * pArray, 
                                              XSDTYPE nType,
                                              const AxisChar * pName,
                                              const AxisChar* pNamespace)
{
//<mxiong debug 2006/5/19 ++
	std::cerr << "SoapSerializer::addOutputBasicArrayParam with namespace, begin, pName=" << pName << std::endl;			
//>mxiong debug 2006/5/19 ++
	#ifdef ENABLE_AXISTRACE
		if (axiscpp::AxisTrace::isTraceOn())
			axiscpp::AxisTrace::traceEntry("SoapSerializer", "addOutputBasicArrayParam", this, 3,
					TRACETYPE_POINTER, sizeof(Axis_Array), ((void*)&pArray),
					TRACETYPE_DATA, sizeof(XSDTYPE), ((void*)&nTrype),
					TRACETYPE_STRING, 0, ((void*)&pName));	  /* AUTOINSERTED TRACE */
	#endif

	int	iSuccess = AXIS_SUCCESS;
    Axis_Array * pLocalArray = pArray->clone();
    ArrayBean * pAb = makeArrayBean( nType, (void**) (pLocalArray->m_Array));
    pAb->SetDimension(pLocalArray->m_Size);
    /*
     * We're now finished with the local array object, so it can be deleted
     * However, we need to de-couple from the internal array, which is now owned
     * by the ArrayBean.
     */
    pLocalArray->m_Array = NULL;
    pLocalArray->m_Size = 0;
    delete pLocalArray;
    pLocalArray = NULL;
    Param* pParam = new Param();
    if( RPC_ENCODED == m_nStyle)
    {
        pAb->SetItemName("item");
        pParam->setName(pName);
//<mxiong debug 2006/6/27 ++
        std::cerr << "SoapSerializer::addOutputBasicArrayParam with namespace, RPC_ENCODED == m_nStyle" << std::endl;
        pAb->SetUri( pNamespace);
//>mxiong debug 2006/6/27 ++
    }
    else
    {
        pAb->SetItemName(pName);
        pParam->setName("array");       
//<mxiong debug 2006/6/27 ++
        std::cerr << "SoapSerializer::addOutputBasicArrayParam with namespace, RPC_ENCODED != m_nStyle" << std::endl;
	    if( NULL != pNamespace)
		{
		    pParam->setURI( pNamespace);
		} 
//>mxiong debug 2006/6/27 ++
    }
    
    pParam->m_Value.pArray = pAb;
    pParam->m_Type = XSD_ARRAY;
    if( m_pSoapEnvelope && (m_pSoapEnvelope->m_pSoapBody) && 
        (m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod)) 
    {
//<mxiong debug 2006/5/19 ++
	std::cerr << "SoapSerializer::addOutputBasicArrayParam, addOutputParam" <<  std::endl;			
//>mxiong debug 2006/5/19 ++
        m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->addOutputParam( pParam);
    }
//<mxiong debug 2006/5/19 ++
	std::cerr << "SoapSerializer::addOutputBasicArrayParam, end, pName=" << pName << std::endl;			
//>mxiong debug 2006/5/19 ++
    	{
		#ifdef ENABLE_AXISTRACE
			int traceRet = (iSuccess);
			if (axiscpp::AxisTrace::isTraceOn())
				axiscpp::AxisTrace::traceExit("SoapSerializer", "addOutputBasicArrayParam", this, 0,
					TRACETYPE_INT, 0, ((void*)&traceRet));	  /* AUTOINSERTED TRACE */
			return traceRet;
		#else
			return iSuccess;
		#endif
	}
  // Can it only be successful?
}
//>mxiong debug 2006/6/27 ++

6. For WSDL2WS, src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java, in method "writeMethodInWrapper", modify it like the below:
... ...
            /* set the result */
            if (returntypeissimple)
            {
                if (returntype.isArray())
                { /*parameters that are declared as arrays in the wrapping element.*/
                    String containedType =
                   CUtils.getclass4qname(retType.getName());
                    writer.write(
                        "\t\tnStatus = pIWSSZ->addOutputBasicArrayParam(ret, "
                            + CUtils.getXSDTypeForBasicType(containedType)
                            + ", \""
                            + returnParamName
//<mxiong debug 2006/6/27 ++
                            + "\", \""
                            + minfo.getOutputMessage().getNamespaceURI()
//>mxiong debug 2006/6/27 ++                                 
                            + "\");\n");
                    writer.write("\t\tdelete ret;\n");
                    writer.write("\t\treturn nStatus;\n");
                }
                else
                {
... ...

7. I've verified my modification for axis-c-1.6b engine and WSDL2WS tool, it works well.

Could you please give my report a kindly  check ?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-dev-help@ws.apache.org


[jira] Updated: (AXISCPP-977) axiscpp engine & wsdl2ws: In server response, basic array element no namespace prefix added

Posted by "Michael Xiong (JIRA)" <ax...@ws.apache.org>.
     [ http://issues.apache.org/jira/browse/AXISCPP-977?page=all ]

Michael Xiong updated AXISCPP-977:
----------------------------------

    Attachment: axis-c-1.6b-mxiong-20060616.patch

I created this patch for all the bug fix to axis-c-1.6beta which I've reported before:
1. AXISCPP-966
2. AXISCPP-967
3. AXISCPP-968
4. AXISCPP-970
5. AXISCPP-971
6. AXISCPP-972
7. AXISCPP-973
8. AXISCPP-975
9. AXISCPP-977

> axiscpp engine & wsdl2ws: In server response, basic array element no namespace prefix added
> -------------------------------------------------------------------------------------------
>
>          Key: AXISCPP-977
>          URL: http://issues.apache.org/jira/browse/AXISCPP-977
>      Project: Axis-C++
>         Type: Improvement

>   Components: Serialization, WSDL processing - RPC, Server - Engine
>     Versions:  1.6 Beta
>  Environment:     Platform:
>         Linux fedora 3.0
> Axis version:
>         Server-side Axis C++ 1.6Beta
> XML Parser Lib:
> xersesc 2.6
> WSDL2ws tool by using axis java 1.3
> Client-side version Axis java 1.3
> Http Server Version:
> Apache 2.0.53
> Tomcat 2.0.58
>     Reporter: Michael Xiong
>  Attachments: axis-c-1.6b-mxiong-20060616.patch
>
> 1. sample WSDL
> ... ...
> 		<xs:schema elementFormDefault="qualified" targetNamespace="http://www.foo.bar/foo/bar">
> 			<xs:element name="AddDog""> 
> 				<xs:complexType>
> 					<xs:sequence>
> 						<xs:element maxOccurs="unbounded" name="Dog" type="mb:DogRequest"/>
> 					</xs:sequence>
> 				</xs:complexType>
> 			</xs:element>
> 			<xs:element name="AddDogResponse">
> 				<xs:complexType>
> 					<xs:sequence>
> 						<xs:element minOccurs="0" maxOccurs="unbounded" name="Dog" type="mb:DogInfo"/>
> 					</xs:sequence>
> 				</xs:complexType>
> 			</xs:element>
> 			<xs:element name="DeleteDog">
> 				<xs:complexType>
> 					<xs:sequence>
> 						<xs:element maxOccurs="unbounded" name="Dog" type="mb:DogRequest"/>
> 						<xs:element minOccurs="0" maxOccurs="1" name="Forced" type="xs:boolean" default="false"/>
> 					</xs:sequence>
> 				</xs:complexType>
> 			</xs:element>
> 			<xs:element name="DeleteDogResponse">
> 				<xs:complexType>
> 					<xs:sequence>
> 						<xs:element minOccurs="0" maxOccurs="unbounded" name="DogId" type="xs:string"/>
> 					</xs:sequence>
> 				</xs:complexType>
> 			</xs:element>
> 		</xs:schema>
> ... ...
> 2. I created a c++ server by axiscpp1.6beta  and a java client by axisjava1.3
> 3. Response from c++ server when do DeleteDog operation from the created java client:
>          <ns1:DeleteDogResponse xmlns:ns1="http://www.foo.bar/foo/bar">
>             <DogId>1</DogId>
>              <DogId>2</DogId>
>         </ns1:DeleteDogResponse >
> The client can not recognize the response because the expected response seems should be like the below:
>          <ns1:DeleteDogResponse xmlns:ns1="http://www.foo.bar/foo/bar">
>             <ns1:DogId>1</ns1:DogId>
>              <ns1:DogId>2</ns1:DogId>
>         </ns1:DeleteDogResponse >
> The difference is the lack of ns1: prefix.
> 4. I've read the related source code of axiscpp and find that the reason is that axiscpp does not pass namespace information when serializing/descrializing basic array parameter.
> 5. I have succeeded in the modification to axis-c-1.6beta to improve it to support namespace prefix for basic array element like the below:
> 5.1: Add an interface in IWrapperSoapSerializer(include/axis/IWrapperSoapSerializer.hpp)
> //<mxiong debug 2006/6/27 ++
>     /* Method used by wrappers to set a to-be-serialized Array of basic types */
>     virtual int AXISCALL addOutputBasicArrayParam(const Axis_Array* pArray, 
>         XSDTYPE nType, const AxisChar* pName, const AxisChar* pNamespace)=0;
> //>mxiong debug 2006/6/27 ++
> 5.2: Derive the above interface in class SoapSerializer(src/soap/SoapSerializer.h)
> //<mxiong debug 2006/6/27 ++
>     /* Method used by wrappers to set a to-be-serialized Array of basic types */
>     int AXISCALL addOutputBasicArrayParam(const Axis_Array* pArray, 
>         XSDTYPE nType, const AxisChar* pName,
>         const AxisChar* pNamespace);
> //>mxiong debug 2006/6/27 ++
> 5.3: Implement the above method like the below(src/soap/SoapSerializer.cpp):
> //<mxiong debug 2006/6/27 ++
> int SoapSerializer::addOutputBasicArrayParam( const Axis_Array * pArray, 
>                                               XSDTYPE nType,
>                                               const AxisChar * pName,
>                                               const AxisChar* pNamespace)
> {
> //<mxiong debug 2006/5/19 ++
> 	std::cerr << "SoapSerializer::addOutputBasicArrayParam with namespace, begin, pName=" << pName << std::endl;			
> //>mxiong debug 2006/5/19 ++
> 	#ifdef ENABLE_AXISTRACE
> 		if (axiscpp::AxisTrace::isTraceOn())
> 			axiscpp::AxisTrace::traceEntry("SoapSerializer", "addOutputBasicArrayParam", this, 3,
> 					TRACETYPE_POINTER, sizeof(Axis_Array), ((void*)&pArray),
> 					TRACETYPE_DATA, sizeof(XSDTYPE), ((void*)&nTrype),
> 					TRACETYPE_STRING, 0, ((void*)&pName));	  /* AUTOINSERTED TRACE */
> 	#endif
> 	int	iSuccess = AXIS_SUCCESS;
>     Axis_Array * pLocalArray = pArray->clone();
>     ArrayBean * pAb = makeArrayBean( nType, (void**) (pLocalArray->m_Array));
>     pAb->SetDimension(pLocalArray->m_Size);
>     /*
>      * We're now finished with the local array object, so it can be deleted
>      * However, we need to de-couple from the internal array, which is now owned
>      * by the ArrayBean.
>      */
>     pLocalArray->m_Array = NULL;
>     pLocalArray->m_Size = 0;
>     delete pLocalArray;
>     pLocalArray = NULL;
>     Param* pParam = new Param();
>     if( RPC_ENCODED == m_nStyle)
>     {
>         pAb->SetItemName("item");
>         pParam->setName(pName);
> //<mxiong debug 2006/6/27 ++
>         std::cerr << "SoapSerializer::addOutputBasicArrayParam with namespace, RPC_ENCODED == m_nStyle" << std::endl;
>         pAb->SetUri( pNamespace);
> //>mxiong debug 2006/6/27 ++
>     }
>     else
>     {
>         pAb->SetItemName(pName);
>         pParam->setName("array");       
> //<mxiong debug 2006/6/27 ++
>         std::cerr << "SoapSerializer::addOutputBasicArrayParam with namespace, RPC_ENCODED != m_nStyle" << std::endl;
> 	    if( NULL != pNamespace)
> 		{
> 		    pParam->setURI( pNamespace);
> 		} 
> //>mxiong debug 2006/6/27 ++
>     }
>     
>     pParam->m_Value.pArray = pAb;
>     pParam->m_Type = XSD_ARRAY;
>     if( m_pSoapEnvelope && (m_pSoapEnvelope->m_pSoapBody) && 
>         (m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod)) 
>     {
> //<mxiong debug 2006/5/19 ++
> 	std::cerr << "SoapSerializer::addOutputBasicArrayParam, addOutputParam" <<  std::endl;			
> //>mxiong debug 2006/5/19 ++
>         m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->addOutputParam( pParam);
>     }
> //<mxiong debug 2006/5/19 ++
> 	std::cerr << "SoapSerializer::addOutputBasicArrayParam, end, pName=" << pName << std::endl;			
> //>mxiong debug 2006/5/19 ++
>     	{
> 		#ifdef ENABLE_AXISTRACE
> 			int traceRet = (iSuccess);
> 			if (axiscpp::AxisTrace::isTraceOn())
> 				axiscpp::AxisTrace::traceExit("SoapSerializer", "addOutputBasicArrayParam", this, 0,
> 					TRACETYPE_INT, 0, ((void*)&traceRet));	  /* AUTOINSERTED TRACE */
> 			return traceRet;
> 		#else
> 			return iSuccess;
> 		#endif
> 	}
>   // Can it only be successful?
> }
> //>mxiong debug 2006/6/27 ++
> 6. For WSDL2WS, src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java, in method "writeMethodInWrapper", modify it like the below:
> ... ...
>             /* set the result */
>             if (returntypeissimple)
>             {
>                 if (returntype.isArray())
>                 { /*parameters that are declared as arrays in the wrapping element.*/
>                     String containedType =
>                    CUtils.getclass4qname(retType.getName());
>                     writer.write(
>                         "\t\tnStatus = pIWSSZ->addOutputBasicArrayParam(ret, "
>                             + CUtils.getXSDTypeForBasicType(containedType)
>                             + ", \""
>                             + returnParamName
> //<mxiong debug 2006/6/27 ++
>                             + "\", \""
>                             + minfo.getOutputMessage().getNamespaceURI()
> //>mxiong debug 2006/6/27 ++                                 
>                             + "\");\n");
>                     writer.write("\t\tdelete ret;\n");
>                     writer.write("\t\treturn nStatus;\n");
>                 }
>                 else
>                 {
> ... ...
> 7. I've verified my modification for axis-c-1.6b engine and WSDL2WS tool, it works well.
> Could you please give my report a kindly  check ?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-dev-help@ws.apache.org


[jira] Commented: (AXISCPP-977) axiscpp engine & wsdl2ws: In server response, basic array element no namespace prefix added

Posted by "Michael Xiong (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXISCPP-977?page=comments#action_12437987 ] 
            
Michael Xiong commented on AXISCPP-977:
---------------------------------------

Dear all,

Environment:
Tomcat 2.0.58 should be -->
Tomcat 5.0.28

Could someboday help me to update the "Environment:" info ?

Thanks a lot !
Michael Xiong

> axiscpp engine & wsdl2ws: In server response, basic array element no namespace prefix added
> -------------------------------------------------------------------------------------------
>
>                 Key: AXISCPP-977
>                 URL: http://issues.apache.org/jira/browse/AXISCPP-977
>             Project: Axis-C++
>          Issue Type: Improvement
>          Components: Serialization, WSDL processing - RPC, Server - Engine
>    Affects Versions:  1.6 Beta
>         Environment:     Platform:
>         Linux fedora 3.0
> Axis version:
>         Server-side Axis C++ 1.6Beta
> XML Parser Lib:
> xersesc 2.6
> WSDL2ws tool by using axis java 1.3
> Client-side version Axis java 1.3
> Http Server Version:
> Apache 2.0.53
> Tomcat 2.0.58
>            Reporter: Michael Xiong
>         Attachments: axis-c-1.6b-mxiong-20060616.patch
>
>
> 1. sample WSDL
> ... ...
> 		<xs:schema elementFormDefault="qualified" targetNamespace="http://www.foo.bar/foo/bar">
> 			<xs:element name="AddDog""> 
> 				<xs:complexType>
> 					<xs:sequence>
> 						<xs:element maxOccurs="unbounded" name="Dog" type="mb:DogRequest"/>
> 					</xs:sequence>
> 				</xs:complexType>
> 			</xs:element>
> 			<xs:element name="AddDogResponse">
> 				<xs:complexType>
> 					<xs:sequence>
> 						<xs:element minOccurs="0" maxOccurs="unbounded" name="Dog" type="mb:DogInfo"/>
> 					</xs:sequence>
> 				</xs:complexType>
> 			</xs:element>
> 			<xs:element name="DeleteDog">
> 				<xs:complexType>
> 					<xs:sequence>
> 						<xs:element maxOccurs="unbounded" name="Dog" type="mb:DogRequest"/>
> 						<xs:element minOccurs="0" maxOccurs="1" name="Forced" type="xs:boolean" default="false"/>
> 					</xs:sequence>
> 				</xs:complexType>
> 			</xs:element>
> 			<xs:element name="DeleteDogResponse">
> 				<xs:complexType>
> 					<xs:sequence>
> 						<xs:element minOccurs="0" maxOccurs="unbounded" name="DogId" type="xs:string"/>
> 					</xs:sequence>
> 				</xs:complexType>
> 			</xs:element>
> 		</xs:schema>
> ... ...
> 2. I created a c++ server by axiscpp1.6beta  and a java client by axisjava1.3
> 3. Response from c++ server when do DeleteDog operation from the created java client:
>          <ns1:DeleteDogResponse xmlns:ns1="http://www.foo.bar/foo/bar">
>             <DogId>1</DogId>
>              <DogId>2</DogId>
>         </ns1:DeleteDogResponse >
> The client can not recognize the response because the expected response seems should be like the below:
>          <ns1:DeleteDogResponse xmlns:ns1="http://www.foo.bar/foo/bar">
>             <ns1:DogId>1</ns1:DogId>
>              <ns1:DogId>2</ns1:DogId>
>         </ns1:DeleteDogResponse >
> The difference is the lack of ns1: prefix.
> 4. I've read the related source code of axiscpp and find that the reason is that axiscpp does not pass namespace information when serializing/descrializing basic array parameter.
> 5. I have succeeded in the modification to axis-c-1.6beta to improve it to support namespace prefix for basic array element like the below:
> 5.1: Add an interface in IWrapperSoapSerializer(include/axis/IWrapperSoapSerializer.hpp)
> //<mxiong debug 2006/6/27 ++
>     /* Method used by wrappers to set a to-be-serialized Array of basic types */
>     virtual int AXISCALL addOutputBasicArrayParam(const Axis_Array* pArray, 
>         XSDTYPE nType, const AxisChar* pName, const AxisChar* pNamespace)=0;
> //>mxiong debug 2006/6/27 ++
> 5.2: Derive the above interface in class SoapSerializer(src/soap/SoapSerializer.h)
> //<mxiong debug 2006/6/27 ++
>     /* Method used by wrappers to set a to-be-serialized Array of basic types */
>     int AXISCALL addOutputBasicArrayParam(const Axis_Array* pArray, 
>         XSDTYPE nType, const AxisChar* pName,
>         const AxisChar* pNamespace);
> //>mxiong debug 2006/6/27 ++
> 5.3: Implement the above method like the below(src/soap/SoapSerializer.cpp):
> //<mxiong debug 2006/6/27 ++
> int SoapSerializer::addOutputBasicArrayParam( const Axis_Array * pArray, 
>                                               XSDTYPE nType,
>                                               const AxisChar * pName,
>                                               const AxisChar* pNamespace)
> {
> //<mxiong debug 2006/5/19 ++
> 	std::cerr << "SoapSerializer::addOutputBasicArrayParam with namespace, begin, pName=" << pName << std::endl;			
> //>mxiong debug 2006/5/19 ++
> 	#ifdef ENABLE_AXISTRACE
> 		if (axiscpp::AxisTrace::isTraceOn())
> 			axiscpp::AxisTrace::traceEntry("SoapSerializer", "addOutputBasicArrayParam", this, 3,
> 					TRACETYPE_POINTER, sizeof(Axis_Array), ((void*)&pArray),
> 					TRACETYPE_DATA, sizeof(XSDTYPE), ((void*)&nTrype),
> 					TRACETYPE_STRING, 0, ((void*)&pName));	  /* AUTOINSERTED TRACE */
> 	#endif
> 	int	iSuccess = AXIS_SUCCESS;
>     Axis_Array * pLocalArray = pArray->clone();
>     ArrayBean * pAb = makeArrayBean( nType, (void**) (pLocalArray->m_Array));
>     pAb->SetDimension(pLocalArray->m_Size);
>     /*
>      * We're now finished with the local array object, so it can be deleted
>      * However, we need to de-couple from the internal array, which is now owned
>      * by the ArrayBean.
>      */
>     pLocalArray->m_Array = NULL;
>     pLocalArray->m_Size = 0;
>     delete pLocalArray;
>     pLocalArray = NULL;
>     Param* pParam = new Param();
>     if( RPC_ENCODED == m_nStyle)
>     {
>         pAb->SetItemName("item");
>         pParam->setName(pName);
> //<mxiong debug 2006/6/27 ++
>         std::cerr << "SoapSerializer::addOutputBasicArrayParam with namespace, RPC_ENCODED == m_nStyle" << std::endl;
>         pAb->SetUri( pNamespace);
> //>mxiong debug 2006/6/27 ++
>     }
>     else
>     {
>         pAb->SetItemName(pName);
>         pParam->setName("array");       
> //<mxiong debug 2006/6/27 ++
>         std::cerr << "SoapSerializer::addOutputBasicArrayParam with namespace, RPC_ENCODED != m_nStyle" << std::endl;
> 	    if( NULL != pNamespace)
> 		{
> 		    pParam->setURI( pNamespace);
> 		} 
> //>mxiong debug 2006/6/27 ++
>     }
>     
>     pParam->m_Value.pArray = pAb;
>     pParam->m_Type = XSD_ARRAY;
>     if( m_pSoapEnvelope && (m_pSoapEnvelope->m_pSoapBody) && 
>         (m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod)) 
>     {
> //<mxiong debug 2006/5/19 ++
> 	std::cerr << "SoapSerializer::addOutputBasicArrayParam, addOutputParam" <<  std::endl;			
> //>mxiong debug 2006/5/19 ++
>         m_pSoapEnvelope->m_pSoapBody->m_pSoapMethod->addOutputParam( pParam);
>     }
> //<mxiong debug 2006/5/19 ++
> 	std::cerr << "SoapSerializer::addOutputBasicArrayParam, end, pName=" << pName << std::endl;			
> //>mxiong debug 2006/5/19 ++
>     	{
> 		#ifdef ENABLE_AXISTRACE
> 			int traceRet = (iSuccess);
> 			if (axiscpp::AxisTrace::isTraceOn())
> 				axiscpp::AxisTrace::traceExit("SoapSerializer", "addOutputBasicArrayParam", this, 0,
> 					TRACETYPE_INT, 0, ((void*)&traceRet));	  /* AUTOINSERTED TRACE */
> 			return traceRet;
> 		#else
> 			return iSuccess;
> 		#endif
> 	}
>   // Can it only be successful?
> }
> //>mxiong debug 2006/6/27 ++
> 6. For WSDL2WS, src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/WrapWriter.java, in method "writeMethodInWrapper", modify it like the below:
> ... ...
>             /* set the result */
>             if (returntypeissimple)
>             {
>                 if (returntype.isArray())
>                 { /*parameters that are declared as arrays in the wrapping element.*/
>                     String containedType =
>                    CUtils.getclass4qname(retType.getName());
>                     writer.write(
>                         "\t\tnStatus = pIWSSZ->addOutputBasicArrayParam(ret, "
>                             + CUtils.getXSDTypeForBasicType(containedType)
>                             + ", \""
>                             + returnParamName
> //<mxiong debug 2006/6/27 ++
>                             + "\", \""
>                             + minfo.getOutputMessage().getNamespaceURI()
> //>mxiong debug 2006/6/27 ++                                 
>                             + "\");\n");
>                     writer.write("\t\tdelete ret;\n");
>                     writer.write("\t\treturn nStatus;\n");
>                 }
>                 else
>                 {
> ... ...
> 7. I've verified my modification for axis-c-1.6b engine and WSDL2WS tool, it works well.
> Could you please give my report a kindly  check ?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-dev-help@ws.apache.org