axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ivan <xhh...@gmail.com>
Subject Re: Ambigious use of isElementData in the Block interface ?
Date Sun, 08 May 2011 09:40:27 GMT
Could anyone help to give some comments on this ?
Thanks.

2011/5/6 Ivan <xhhsld@gmail.com>

> 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
>



-- 
Ivan

Mime
View raw message