axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ivan <xhh...@gmail.com>
Subject Ambigious use of isElementData in the Block interface ?
Date Fri, 06 May 2011 03:18:59 GMT
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);
        }
    }
<---

-- 
Ivan

Mime
View raw message