Hi Alastair,
Please check the comments inline.

On Nov 30, 2007 6:04 AM, Alastair FETTES <[EMAIL PROTECTED]> wrote:

> I have a combination question/defect report.  These are all in regards
> to StubSourceTemplate.xsl.
>
> ============
>
> Defect 1:
> ---------
> (line 179 of StubSourceTemplate.xsl)
>
> /**
>  * auto generated method signature
>  * for "<xsl:value-of select="@qname"/>" operation.
>  <xsl:for-each select="input/[EMAIL PROTECTED]'']">* @param _<xsl:value-of
> select="@name"/></xsl:for-each>
>  * @return
>  */
>
> This produces method headers that look like...
>
> /**
>  * auto generated method signature for asynchronous invocations
>  * for "MyOperation|http://location.org/wsdl"; operation.
>
>  * @param myOperationRequest* @param interfaceVersion
>  * @param on_complete callback to handle on complete
>  * @param on_error callback to handle on error
>  */
>
> This code should be changed too...
>
> /**
>  * auto generated method signature
>  * for "<xsl:value-of select="@qname"/>" operation.
>  * <xsl:for-each select="input/[EMAIL PROTECTED]'']"><xsl:text>
> </xsl:text> * @param _<xsl:value-of select="@name"/></xsl:for-each>
>  * @return
>  */
>
> This will pretty print your output to correctly show all parameters on
> their own line.


Done.

>
>
> ===========
>
> Defect 2:
> ---------
> (line 190 of StubSourceTemplate.xsl)
>
> axis2_stub_op_<xsl:value-of select="$servicename"/>_<xsl:value-of
> select="@name"/>(
>    axis2_stub_t *stub, const axutil_env_t *env<xsl:for-each
> select="input/[EMAIL PROTECTED]'']">,
>    <xsl:variable name="inputtype">
>        <xsl:if test="@ours">adb_</xsl:if><xsl:value-of
> select="@type"/><xsl:if test="@ours">_t*</xsl:if>
>    </xsl:variable>
>    <xsl:if test="position()>1">,</xsl:if><xsl:value-of
> select="$inputtype"/><xsl:text> _</xsl:text><xsl:value-of
> select="@name"/>
>    </xsl:for-each>)
>
> This produces code that looks like...
>
> void axis2_stub_MyService_MyOperation_start( axis2_stub_t *stub, const
> axutil_env_t *env,
>                                             ,axiom_node_t*
> myOperationRequest,
>                                             ,axiom_node_t*
> interfaceVersion,
>                                             ,axis2_status_t (
> AXIS2_CALL *on_complete ) (struct axis2_callback *, const axutil_env_t
> *) ,
>                                             ,axis2_status_t (
> AXIS2_CALL *on_error ) (struct axis2_callback *, const axutil_env_t *,
> int ) )
>
> Note the extra comma.  The following lines of code should be changed:
>
>    axis2_stub_t *stub, const axutil_env_t *env<xsl:for-each
> select="input/[EMAIL PROTECTED]'']">, <---- remove this comma
>    <xsl:variable name="inputtype">


Fixed, Rather I removed the last , (which was inside the  if tag), now that
piece of  code is look like,
 <xsl:for-each select="input/[EMAIL PROTECTED]'']"> ,
                                                 <xsl:variable
name="inputtype"><xsl:if test="@ours">adb_</xsl:if><xsl:value-of
select="@type"/><xsl:if test="@ours">_t*</xsl:if></xsl:variable>
                                                 <xsl:value-of
select="$inputtype"/><xsl:text> _</xsl:text><xsl:value-of select="@name"/>
                                              </xsl:for-each>


>
> ===========
>
> Defect 3:
> ---------
> (line 214 of StubSourceTemplate.xsl)
>
> <!-- for service client currently suppported only 1 input param -->
> <xsl:for-each select="input/[EMAIL PROTECTED]'']">
>    <xsl:if test="position()=1">
>        <xsl:choose>
>            <xsl:when test="@ours">
>                payload = adb_<xsl:value-of
> select="@type"/>_serialize(_<xsl:value-of select="@name"/>, env, NULL,
> NULL, AXIS2_TRUE, NULL, NULL);
>            </xsl:when>
>            <xsl:otherwise>
>                payload = _<xsl:value-of select="@name"/>;
>            </xsl:otherwise>
>        </xsl:choose>
>    </xsl:if>
> </xsl:for-each>
>
> The for loop is redundant.  Change this code to be the following:
>
> <xsl:variable name="firstParam" select="input/param[1]"/>
> <xsl:if test="$firstParam/@type!=''">
>    <xsl:choose>
>        <xsl:when test="$firstParam/@ours">
>            payload = adb_<xsl:value-of
> select="$firstParam/@type"/>_serialize(_<xsl:value-of
> select="$firstParam/@name"/>, env, NULL, NULL, AXIS2_TRUE, NULL, NULL);
>        </xsl:when>
>        <xsl:otherwise>
>            payload = _<xsl:value-of select="$firstParam/@name"/>;
>        </xsl:otherwise>
>    </xsl:choose>
> </xsl:if>
>

Done.

>
> ===========
>
> Defect 4:
> ---------
> (lines 179 to 285 of StubSourceTemplate.xsl)
>
> This code adds in the parameters for the header (<xsl:for-each
> select="input/[EMAIL PROTECTED]'']">) but only the first parameter is ever
> referenced.  Read: The elements explicitly specified as headers in the
> WSDL are not used and thus not added to the service call.


Yea, Currently the generated code doesn't process custom headers, As you
have mentioned, this is the reason for all the defects you mention above.
(Simply We have not encountered more than 1 parameters for above functions.)

I will raise a JIRA on this, and hope to fix this within next couple of
weeks.


>
> Here is the sample WSDL that can be used to reproduce these errors.
>
> <wsdl:definitions targetNamespace="http://location.org/wsdl";
> xmlns:tns="http://location.org/wsdl";
> xmlns:msg="http://location.org/messages";
> xmlns:xs="http://www.w3.org/2001/XMLSchema";
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
> xmlns:http="http://schemas.xmlsoap.org/wsdl/http/";
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
> xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/";
> xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/";>
>
>    <wsdl:types>
>        <xs:schema targetNamespace="http://location.org/wsdl";>
>            <xs:element name="InterfaceVersion" type="xs:string"/>
>            <xs:element name="MyOperationRequest" type="xs:string"/>
>            <xs:element name="MyOperationResponse" type="xs:string"/>
>            <xs:element name="MyException" type="xs:string"/>
>        </xs:schema>
>    </wsdl:types>
>
>    <wsdl:message name="InterfaceVersion">
>        <wsdl:part element="msg:InterfaceVersion" name="header"/>
>    </wsdl:message>
>
>    <wsdl:message name="MyOperationRequest">
>        <wsdl:part name="body" element="msg:MyOperationRequest"/>
>    </wsdl:message>
>
>    <wsdl:message name="MyOperationResponse">
>        <wsdl:part name="body" element="msg:MyOperationResponse"/>
>    </wsdl:message>
>
>    <wsdl:message name="MyException">
>        <wsdl:part name="body" element="msg:MyException"/>
>    </wsdl:message>
>
>    <wsdl:portType name="MyPortType">
>
>        <!-- MyOperation -->
>        <wsdl:operation name="MyOperation">
>            <wsdl:input message="tns:MyOperationRequest"/>
>            <wsdl:output message="tns:MyOperationResponse"/>
>            <wsdl:fault message="tns:MyException" name="MyException"/>
>        </wsdl:operation>
>    </wsdl:portType>
>
>    <wsdl:binding name="MyPortBinding" type="tns:MyPortType">
>        <soap12:binding transport="http://schemas.xmlsoap.org/soap/http";
>                 style="document"/>
>        <wsdl:operation name="MyOperation">
>            <soap12:operation
> soapAction="http://location.org/services/MyOperation";
>                    soapActionRequired="true"
>                    style="document"/>
>            <wsdl:input>
>                <soap12:header part="header" use="literal"
> message="tns:InterfaceVersion"/>
>                <soap12:body parts="body" use="literal"/>
>            </wsdl:input>
>            <wsdl:output>
>                <soap12:body parts="body" use="literal"/>
>            </wsdl:output>
>            <wsdl:fault name="MyException">
>                <soap12:body use="literal"/>
>            </wsdl:fault>
>        </wsdl:operation>
>    </wsdl:binding>
>
>    <wsdl:service name="MyService">
>        <wsdl:port name="MySoapPort" binding="tns:MyPortBinding">
>            <wsdl:documentation>
>                <wsi:Claim
> conformsTo="http://ws-i.org/profiles/basic/1.0"; />
>            </wsdl:documentation>
>            <soap12:address location="http://location.org/"/>
>        </wsdl:port>
>    </wsdl:service>
> </wsdl:definitions>
>
> ===========
>

>
> Also note that I believe these same mistakes are made in all three
> versions of this function that are created dependent upon if it is asyn,
> sync or mep only.
>
> The question is now since the stub generation does not use the header
> parameters supplied, where abouts can I find an example of setting
> custom headers on the client side?  I.e. I need to add my interface
> version to the SOAP header but do not know how to do this.


As I mentioned in the previous mail, you can use the
"axis2_svc_client_add_header" function. But you have to write the code for
serialize, deserialize that part manually.

Thanks
Dimuthu

>
>
> Thanks in advance.
>
> Alastair Fettes
> MacDonald, Dettwiler and Associates
>
> This e-mail and any attachments are intended solely for the use of the
> intended recipient(s) and may contain legally privileged, proprietary
> and/or confidential information.  Any use, disclosure, dissemination,
> distribution or copying of this e-mail and any attachments for any
> purposes that have not been specifically authorized by the sender is
> strictly prohibited.  If you are not the intended recipient, please
> immediately notify the sender by reply e-mail and permanently delete all
> copies and attachments.
>
> The entire content of this e-mail is for "information purposes" only and
> should not be relied upon by the recipient in any way unless otherwise
> confirmed in writing by way of letter or facsimile.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to