[ 
https://issues.apache.org/jira/browse/AXIS2-5505?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sumit Shah updated AXIS2-5505:
------------------------------

    Attachment: ParticipantService.wsdl

WSDL that causes the issue
                
> WSDL2Code/Axis2 1.6.2: Generated Stub fails compilation - Possible issue in 
> JaxbRIDatabindingTemplate.xsl
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: AXIS2-5505
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5505
>             Project: Axis2
>          Issue Type: Bug
>          Components: codegen
>    Affects Versions: 1.6.2
>         Environment: Windows 7 - 64 bit, Weblogic 11gR1 & JDK 1.6.0_25
>            Reporter: Sumit Shah
>            Priority: Critical
>         Attachments: ParticipantService.wsdl
>
>
> I am using WSDL2Code in Axis2 1.6.2 to generate the client stubs from a set 
> of WSDLs. However, the following code block fails compilation in couple of 
> the WSDL files. If you notice: the line: 
> 'com.sample.test.webservices.impl.participant.Notify.class,' ends with a 
> comma that shouldn't be there.
> try {
>                            jc = javax.xml.bind.JAXBContext.newInstance(
>             <xsl:for-each select="param[not(@type = 
> preceding-sibling::param/@type)]">
>                 <xsl:if test="@type!=''">
>                         <xsl:value-of select="@type"/>.class<xsl:if 
> test="position() != last()">,
>                         </xsl:if>
>                 </xsl:if>
>             </xsl:for-each>
>                            );
>             }
> If I remove the <wsdl:output> and the faults from the <wsdl:operation>, I do 
> not see this issue. 
> It seems like the XSL needs to be fixed to account for such operations. 
> Below is the snippet of the generated stub:
> private static final javax.xml.bind.JAXBContext wsContext;
>         static {
>             javax.xml.bind.JAXBContext jc;
>             jc = null;
>             try {
>                                                                 jc = 
> javax.xml.bind.JAXBContext.newInstance(
>             com.sample.test.webservices.impl.participant.Add.class,
>                         
> com.sample.test.webservices.impl.participant.AddResponse.class,
>                         
> com.sample.test.webservices.exceptions.UnrecoverableFault.class,
>                         
> com.sample.test.webservices.exceptions.RecoverableFault.class,
>                         
> com.sample.test.webservices.impl.participant.Delete.class,
>                         
> com.sample.test.webservices.impl.participant.DeleteResponse.class,
>                         
> com.sample.test.webservices.impl.participant.Select.class,
>                         
> com.sample.test.webservices.impl.participant.SelectResponse.class,
>                         
> com.sample.test.webservices.impl.participant.AddChange.class,
>                         
> com.sample.test.webservices.impl.participant.AddChangeResponse.class,
>                         
> com.sample.test.webservices.impl.participant.Query.class,
>                         
> com.sample.test.webservices.impl.participant.QueryResponse.class,
>                         
> com.sample.test.webservices.impl.participant.Update.class,
>                         
> com.sample.test.webservices.impl.participant.UpdateResponse.class,
>                         
> com.sample.test.webservices.impl.participant.Change.class,
>                         
> com.sample.test.webservices.impl.participant.ChangeResponse.class,
>                         
> com.sample.test.webservices.impl.participant.Synchronize.class,
>                         
> com.sample.test.webservices.impl.participant.SynchronizeResponse.class,
>                         
> com.sample.test.webservices.impl.participant.Notify.class,
>                         
>                                                                 );
>             }
>             catch ( javax.xml.bind.JAXBException ex ) {
>                 System.err.println("Unable to create JAXBContext: " + 
> ex.getMessage());
>                 ex.printStackTrace(System.err);
>                 Runtime.getRuntime().exit(-1);
>             }
>             finally {
>                 wsContext = jc;
>                                                 }
>         }
> This issue does not occur in 1.6.0.
> Research so far
> -------------------------------------------------------------
> https://issues.apache.org/jira/browse/AXIS2-5215 caused the Java2WSDL change 
> from 1.6.0 to 1.6.2. If you notice the wsdl change I mention below, in that 
> case I see why the JaxbRIDatabindingTemplate.xsl is failing. This is a guess, 
> but FWIW…the wsdl generated for a one way operation using Java2WSDL contains 
> a ‘null’ message for the output as shown below:
> <wsdl:operation name="notify">
>             <wsdl:input message="ns:notifyRequest" 
> wsaw:Action="urn:coretest:ParticipantService#notify"/>
>             <wsdl:output message="ns:null" wsaw:Action="urn:notifyResponse"/> 
>   <!—This is what I refer to-->
>             <wsdl:fault message="ns:RecoverableFault" name="RecoverableFault" 
> wsaw:Action="urn:notifyRecoverableFault"/>
>             <wsdl:fault message="ns:UnrecoverableFault" 
> name="UnrecoverableFault" wsaw:Action="urn:notifyUnrecoverableFault"/>
>         </wsdl:operation>
> If you look at the wsdl snippet above and the code in the 
> JaxbRIDatabindingTemplate.xsl, after writing Notify.class, (because probably 
> at that point in the order Notify.class is not the last one) and is expecting 
> to write NotifyResponse.class as the last one, but the check ‘<xsl:if 
> test="@type!=''">’ fails because the output message/type is null and hence 
> the trailing comma.
>  
> try {
>                            jc = javax.xml.bind.JAXBContext.newInstance(
>             <xsl:for-each select="param[not(@type = 
> preceding-sibling::param/@type)]">
>                 <xsl:if test="@type!=''">
>                         <xsl:value-of select="@type"/>.class<xsl:if 
> test="position() != last()">,
>                         </xsl:if>
>                 </xsl:if>
>             </xsl:for-each>
>                            );
>             }
> If I remove the <wsdl:output> and the faults from the <wsdl:operation>, I do 
> not see this issue. 
> It seems like the XSL needs to be fixed to account for such operations. 
> Email Snippet from Andreas
> ------------------------------------------------------
> -----Original Message-----
> From: Andreas Veithen [mailto:[email protected]] 
> Sent: Thursday, March 21, 2013 4:35 AM
> To: java-user
> Subject: Re: WSImport w JDK 1.6.0_25 and Axis2 1.6.2: Generated stub fails 
> compilation - Update: Actually issue occurring in WSDL2Code
> That's simply because the code in JaxbRIDatabindingTemplate.xsl is incorrect. 
> position() != last() checks if the current node is the last node, but the 
> expression appears in an <xsl:if> block. So, if the last node doesn't satisfy 
> the condition of the <xsl:if> block, then an extra comma is generated and the 
> generated code won't compile.
> Andreas

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to