[prev in list] [next in list] [prev in thread] [next in thread]
List: axis-dev
Subject: [jira] [Updated] (AXIS2-5162) Bad parser code is generated from
From: "Sagara Gunathunga (Updated) (JIRA)" <jira () apache ! org>
Date: 2011-10-31 10:43:32
Message-ID: 1743765511.40378.1320057812389.JavaMail.tomcat () hel ! zones ! apache ! org
[Download RAW message or body]
[ https://issues.apache.org/jira/browse/AXIS2-5162?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel \
]
Sagara Gunathunga updated AXIS2-5162:
--------------------------------------
Priority: Critical (was: Blocker)
> Bad parser code is generated from wsdl in certain cases
> -------------------------------------------------------
>
> Key: AXIS2-5162
> URL: https://issues.apache.org/jira/browse/AXIS2-5162
> Project: Axis2
> Issue Type: Bug
> Components: codegen
> Affects Versions: 1.6.1
> Environment: Windows7x64 (don't think to be relevant)
> Reporter: ilab
> Priority: Critical
>
> For the wsdl example you can find below, axis2 v1.6.1 (v.1.5.1 and possibly older \
> versions also) generates bad parse code as the resulted service doesn't accept a \
> valid message (also see below). If you send the message with empty Data1 tag, it \
> is parsed successfully. With content, which is also valid, the parser results \
> "org.apache.axis2.databinding.ADBException: Unexpected subelement Data1". The \
> actual problem is that the generated parse code does not deal with the content of \
> Data1 tag, therefore, if it is not empty, after parsing Data1, the parse pointer \
> will be at the end element of Data1, instead of being after it. I have also \
> copy-pasted the buggy code below, ElementType$Factory.parse(). Rejected message
> ==============
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" \
> xmlns:test="http://test"> <soapenv:Header/>
> <soapenv:Body>
> <test:QueryTestEBM>
> <test:Data1>x</test:Data1>
> <test:Data2></test:Data2>
> </test:QueryTestEBM>
> </soapenv:Body>
> </soapenv:Envelope>
> Accepted message
> ==============
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" \
> xmlns:test="http://test"> <soapenv:Header/>
> <soapenv:Body>
> <test:QueryTestEBM>
> <test:Data1></test:Data1>
> <test:Data2></test:Data2>
> </test:QueryTestEBM>
> </soapenv:Body>
> </soapenv:Envelope>
> WSDL example
> ============
> <?xml version="1.0" encoding="UTF-8"?>
> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> targetNamespace="http://test"
> xmlns:ns="http://test">
> <types>
> <xsd:schema targetNamespace="http://test" elementFormDefault="qualified">
> <xsd:complexType name="CodeType">
> <xsd:simpleContent>
> <xsd:extension base="xsd:normalizedString"/>
> </xsd:simpleContent>
> </xsd:complexType>
> <xsd:complexType name="ElementType">
> <xsd:simpleContent>
> <xsd:extension base="ns:CodeType"/>
> </xsd:simpleContent>
> </xsd:complexType>
> <xsd:complexType name="QueryTestEBMType">
> <xsd:sequence>
> <xsd:element name="Data1" type="ns:ElementType" maxOccurs="1"/>
> <xsd:element name="Data2" type="ns:ElementType" maxOccurs="1"/>
> </xsd:sequence>
> </xsd:complexType>
> <xsd:element name="QueryTestEBM" type="ns:QueryTestEBMType"/>
> </xsd:schema>
> </types>
> <message name="QueryTestReqMsg">
> <part name="QueryTestEBM" element="ns:QueryTestEBM"/>
> </message>
> <message name="QueryTestRespMsg">
> </message>
> <portType name="TestBindingPort">
> <operation name="QueryTest">
> <input message="ns:QueryTestReqMsg"/>
> <output message="ns:QueryTestRespMsg"/>
> </operation>
> </portType>
> <binding name="TestBinding" type="ns:TestBindingPort">
> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" \
> /> <operation name="QueryTest">
> <soap:operation soapAction="QueryTest" />
> <input>
> <soap:body use="literal" />
> </input>
> <output>
> <soap:body use="literal" />
> </output>
> </operation>
> </binding>
> <service name="TestService">
> <port name="TestService" binding="ns:TestBinding">
> <soap:address
> location="http://localhost:8080/WebServiceTest2/services/TestService" />
> </port>
> </service>
>
> </definitions>
> Buggy code: ElementType$Factory.parse()
> ===============================
> public static ElementType parse(javax.xml.stream.XMLStreamReader reader) throws \
> java.lang.Exception{ ElementType object =
> new ElementType();
> int event;
> java.lang.String nillableValue = null;
> java.lang.String prefix ="";
> java.lang.String namespaceuri ="";
> try {
>
> while (!reader.isStartElement() && !reader.isEndElement())
> reader.next();
>
> if (reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance","type")!=null){
> java.lang.String fullTypeName = \
> reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance", "type");
> if (fullTypeName!=null){
> java.lang.String nsPrefix = null;
> if (fullTypeName.indexOf(":") > -1){
> nsPrefix = fullTypeName.substring(0,fullTypeName.indexOf(":"));
> }
> nsPrefix = nsPrefix==null?"":nsPrefix;
> java.lang.String type = fullTypeName.substring(fullTypeName.indexOf(":")+1);
>
> if (!"ElementType".equals(type)){
> //find namespace for the prefix
> java.lang.String nsUri = reader.getNamespaceContext().getNamespaceURI(nsPrefix);
> return (ElementType)test.ExtensionMapper.getTypeObject(
> nsUri,type,reader);
> }
>
> }
>
> }
>
>
> // Note all attributes that were handled. Used to differ normal attributes
> // from anyAttributes.
> java.util.Vector handledAttributes = new java.util.Vector();
>
>
>
> reader.next();
>
> } catch (javax.xml.stream.XMLStreamException e) {
> throw new java.lang.Exception(e);
> }
> return object;
> }
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: \
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more \
information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic