Ambigious use of isElementData in the Block interface
-----------------------------------------------------

                 Key: AXIS2-5023
                 URL: https://issues.apache.org/jira/browse/AXIS2-5023
             Project: Axis2
          Issue Type: Bug
          Components: jaxws
    Affects Versions: 1.7.0
            Reporter: Ivan


In the Block interface, a method named isElementData is defined with doc 
description below, from my understanding, it only return true while the block 
could be represented as a single element.
/**
     * @return true if data is always an element; false if possibly mixed 
content or multiple
     *         elements
     */
    public boolean isElementData();

In the getQName() of BlockImpl class,  any XML parsing exception is swallowed 
if isElementData return false. IMO,  it should only ignore it while the block 
elment might be a MIME type, which means it is of a DataSource type. e.g. while 
invoking the Dispatch<Source>.invoke, aninvalid XML string like 
<simplerequest><param>1</param><simpleRequest> is passed, no exception is 
thrown, while a WebServiceException should be expected.
Thougths ? If I did not miss anything, would like to open a JIRA for it and 
attach a draft patch.

--->
 /* (non-Javadoc)
      * @see org.apache.axis2.jaxws.message.Block#getQName()
      */
    public QName getQName() throws WebServiceException {
        // If the QName is not known, find it
        try {
            if (qName == null) {
                // If a prior call discovered that this content has no QName, 
then return null
                if (noQNameAvailable) {
                    return null;
                }
                if (omElement == null) {
                    try {
                        XMLStreamReader newReader = _getReaderFromBO(busObject, 
busContext);
                        busObject = null;
                        StAXOMBuilder builder = new StAXOMBuilder(newReader);
                        omElement = builder.getDocumentElement();
                        omElement.close(true);
                    } catch (Exception e) {
                        // Some blocks may represent non-element data
                        if (log.isDebugEnabled()) {
                            log.debug("Exception occurred while obtaining 
QName:" + e);
                        }
                        if (!isElementData()) {
                            // If this block can hold non-element data, then 
accept
                            // the fact that there is no qname and continue
                            if (log.isDebugEnabled()) {
                                log.debug("The block does not contain an xml 
element. Processing continues.");
                            }
                            // Indicate that the content has no QName
                            // The exception is swallowed.
                            noQNameAvailable = true;
                            return null;
                        }  else {
                            // The content should contain xml. 
                            // Rethrowing the exception.
                            throw ExceptionFactory.makeWebServiceException(e);
                        }
                    }
                }
                qName = omElement.getQName();
            }
            return qName;
        } catch (Exception xse) {
            setConsumed(true);
            throw ExceptionFactory.makeWebServiceException(xse);
        }
    }
<---

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
For additional commands, e-mail: java-dev-h...@axis.apache.org

Reply via email to