Forwarding with the correct prefix...

---------- Forwarded message ----------
From: Thilina Gunarathne <[EMAIL PROTECTED]>
Date: Oct 21, 2006 12:56 PM
Subject: Re: MTOM
To: [email protected]
Cc: [email protected]

Try this,
       OMElement theElement = null;
       OMNode theNode = theElement.getFirstOMChild();
       if (theNode.getType() == OMNode.TEXT_NODE) {
           OMText theText = (OMText) theNode;
            theText.setBinary(true);
           DataHandler dh = (DataHandler) theText.getDataHandler();
           InputStream stream = dh.getDataSource().getInputStream();
       } else if (theNode.getType() == OMNode.ELEMENT_NODE ) {
           // do what ever you need with the plain XML
       }

Axis2 cannot automatically identify whether a given string is
base64Binary or plain string. It's up to the user to provide that
information either as a schema or by manually setting the "setBinary"
property.  Axis2 can idetify this automatically in the case of MTOM
optimised MIME.

~Thilina


On 10/21/06, Tony Dean <[EMAIL PROTECTED]> wrote:


Thilina,

So the following code should work?

boolean binary = false;
OMElement theElement...
OMNode theNode =  theElement.getFirstOMChild();
if (theNode.getType() == OMNode.TEXT_NODE)  {
   OMText theText =  (OMText)  theNode;
   if (theText.isBinary() {
      // base64Binary:  could  be base64 encoded in soap body or mime 
attachment, how do  I know the  difference or should it even matter?
      binary =  true;
      DataHandler dh =  theText.getDataHandler();
      InputStream stream =  dh.getDataSource().getInputStream();
      ...
   }
}

if (!binary) {
   // then process the child nodes of theElement  as plain xml
   ...
}

Thank  you for your insight.
  ________________________________
From: Thilina Gunarathne  [mailto:[EMAIL PROTECTED]
Sent: Saturday, October 21, 2006 2:25  AM
To: [email protected]
Cc:  [email protected]
Subject: Re: MTOM



Hi,
You would be able to handle the case2 & 3 without much  hassle.. In the case2 you have to 
explicitly set that the content is  base64Binary. If not Axis2 will treat it as a normal string. You 
can do that  either by using a schema which defines that the content of the "output" element  
is base64Binary  or you can explicitly set that by setting the  "setBinary(true);" in that 
text node.

Following modified code will  handle both case 2 & 3..



>
> OMElement    outputElement ...
> OMNode node = outputElement.getFirstOMChild();
> if    (node.getType() == OMNode.TEXT_NODE) {
>    OMText text = (OMText)    node;


 test.setBinary(true);

>       DataHandler dh = text.getDataHandler();
>    InputStream stream =    dh.getDataSource().getInputStream();
> }

>
> Is    dh valid for case (2) as well? or is dh=null in this case?  I can    
test text.isOptimized() to see if base64 encoded?  How can I know if    its plain 
xml?


If the node is an  instance of OMElement then it's  a piece  of xml..  You can 
also test for node.getType() ==  OMNode.ELEMENT_NODE...

Thanks,
~Thilina


> Maybe    text.isBinary ()...
>
> Thanks for any suggestions.
>
>
>
> Tony    Dean
> SAS Institute Inc.
> 919.531.6704
> [EMAIL PROTECTED]
>
> SAS... The Power    to Know
> http://www.sas.com
>
>
> ---------------------------------------------------------------------
>  To    unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>



--
http://webservices.apache.org/~thilina/
 http://thilinag.blogspot.com/



--
http://webservices.apache.org/~thilina/
http://thilinag.blogspot.com/

--
http://webservices.apache.org/~thilina/
http://thilinag.blogspot.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to