Return-Path: Delivered-To: apmail-ws-axis-user-archive@www.apache.org Received: (qmail 83151 invoked from network); 12 Jan 2007 09:56:24 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 12 Jan 2007 09:56:24 -0000 Received: (qmail 7722 invoked by uid 500); 12 Jan 2007 09:56:18 -0000 Delivered-To: apmail-ws-axis-user-archive@ws.apache.org Received: (qmail 7713 invoked by uid 500); 12 Jan 2007 09:56:18 -0000 Mailing-List: contact axis-user-help@ws.apache.org; run by ezmlm Precedence: bulk Reply-To: axis-user@ws.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-user@ws.apache.org Received: (qmail 7702 invoked by uid 99); 12 Jan 2007 09:56:18 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Jan 2007 01:56:18 -0800 X-ASF-Spam-Status: No, hits=2.3 required=10.0 tests=HTML_MESSAGE,MAILTO_TO_SPAM_ADDR,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: domain of xjchen001@gmail.com designates 66.249.92.169 as permitted sender) Received: from [66.249.92.169] (HELO ug-out-1314.google.com) (66.249.92.169) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Jan 2007 01:56:08 -0800 Received: by ug-out-1314.google.com with SMTP id j40so705103ugd for ; Fri, 12 Jan 2007 01:55:47 -0800 (PST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=pMEt06ObZ4l5QsTWZvrJjTyJikDtgsiFZ85M4SK93FOPSWtEQt3lVJ+Lw2eJZA6OeJflNguwdwOQLJb1E1KeAE7RoHZLVwMVKGkSC6MjAeE4wiaXYu9jj0pBR48aCNikGUU1xTsOe9IwodexVEVbifBEgtT0vy1JdOU9KyudgmM= Received: by 10.78.166.7 with SMTP id o7mr140440hue.1168595745523; Fri, 12 Jan 2007 01:55:45 -0800 (PST) Received: by 10.78.18.10 with HTTP; Fri, 12 Jan 2007 01:55:44 -0800 (PST) Message-ID: <84f31d220701120155l34d84aa7x7753c43a2ab02137@mail.gmail.com> Date: Fri, 12 Jan 2007 17:55:44 +0800 From: "Xinjun Chen" To: axis-user@ws.apache.org Subject: Re: [Axis2] Namespace issue during conversion from DOM Element to OMElement In-Reply-To: <88f5d710701112357p465077f3w66b6730f0b034ef8@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_33803_21372647.1168595744951" References: <84f31d220701091836r460c74bpedadad4e06d05c53@mail.gmail.com> <559c463d0701100320u33d17ba1j649e916aa53a2745@mail.gmail.com> <84f31d220701102128ja1f56d0i72a7e45831533f55@mail.gmail.com> <88f5d710701110741p74ef0787ob203e04ab98f3743@mail.gmail.com> <84f31d220701112229g7b499b92j31771fd30dd23db8@mail.gmail.com> <88f5d710701112357p465077f3w66b6730f0b034ef8@mail.gmail.com> X-Virus-Checked: Checked by ClamAV on apache.org ------=_Part_33803_21372647.1168595744951 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi Paul, Thank you for your reply. Before I chose Castor, I have already looked into JIBX. JIBX also enable binding for Java collections. But what I understand JIBX databinding is that, JIBX needs to modify the bytecode. The original class file will be replaced by the new class file which added some marshalling/unmarshalling related codes. I have sent an email to Dennis on whether JIBX can separating the marshalling code from the original class, but did not get response. I did not find example of using JIBX and keeping the original class unchanged. Please enlighten me this if you know how to do this. Any comments or pointers will be helpful. I also want to use StAX-based binding framework directly if possible. On 1/12/07, Paul Fremantle wrote: > > Xinjun > > Have you tried some of the databinding frameworks that Axis2 supports? > Maybe JIBX or XMLBeans, or even ADB would suit you better. The DOM > approach will be very slow indeed compared to using a STAX based > binding framework. > > The DOM over OM is in axiom-dom-**.jar. This is an implementation of > DOM that uses Axiom underneath, and so can let you switch between > them. > > Paul > > On 1/12/07, Xinjun Chen wrote: > > Hi Paul, > > > > Thank you for your reply. > > I am using Castor to create DOM Node, and then convert the DOM Node into > OM. > > It seems that Castor does not support AXIOM. > > > > I choose Castor marshalling framework because I got the class files from > my > > client and I am not supposed to modify the class files. And there are > some > > java.util.Map and java.util.Vector inside the class file. It hits me > that > > Castor marshalling framework may satisfy both requirements. Do I have > other > > options which may satisfy these two requirements? > > > > Do you mean if I construct the OM directly I will have control on > > eliminating the null elements at node creation time? > > What do you mean there is a version of DOM that uses OM underneath? > > > > Thanks. > > > > Regards, > > Xinjun > > > > > > > > On 1/11/07, Paul Fremantle wrote: > > > Xinjun > > > > > > How are you creating the DOM element? There might be some options to > > > use OM directly. Firstly, maybe you could just code to OM. Or if you > > > already have lots of DOM code then there is also a version of DOM that > > > uses OM underneath. > > > > > > Paul > > > > > > On 1/11/07, Xinjun Chen wrote: > > > > Hi Ruchith, > > > > > > > > setNamespaceAware to the original DocumentBuilderFactory solve the > > problem > > > > partially. > > > > > > > > Now the DOM Element reads: > > > > > > > encoding="UTF-8"?> > > > > > xmlns="http://cis.com"> > > > > > > > > > > > > sAppNo0 > > > > > > > > > > > > > > > > But the OMElement reads: > > > > > > > > > > > > > > > > > > > > sAppNo0 > > > > > > > > > > > > > > > > Observations: > > > > 1. After I setNamespaceAware to the original DOM > DocumentBuilderFactory, > > the > > > > inner element gets correct namespace. But root > > element > > > > does not. The > > namespace > > > > of is lost. I > > created > > > > this element in the following way: > > > > > > > > DocumentBuilderFactory dbf = > > > > DocumentBuilderFactory.newInstance(); > > > > dbf.setNamespaceAware(true); > > > > Document doc = dbf.newDocumentBuilder().newDocument(); > > > > Element root = doc.createElementNS(" http://cis.com", > > > > "getHearingDetailsByCaseNoWSReturn"); > > > > > > > > I think OMElement does not include "http://cis.com" as namespace > because > > > > " http://cis.com" is not explicitly declared as a namespace in DOM > doc. > > I > > > > searched the interfaces of Document and Element, but cannot find a > way > > to > > > > explicitly declare a namespace. > > > > I think I need to treat namespace as attribute in DOM. Please > correct me > > if > > > > I am wrong. > > > > > > > > Thus I added one line to declare xmlns as attribute. > > > > > > > > root.setAttribute("xmlns", " http://cis.com"). > > > > > > > > Is there any other elegant way? > > > > > > > > > > > > 2. Do you have a good way to remove all null elements like > ? > > The > > > > original DOM Element also contains other null elements which > contains no > > > > value. > > > > > > > > > > > > > > > > Regards, > > > > Xinjun > > > > > > > > > > > > > > > > > > > > On 1/10/07, Ruchith Fernando wrote: > > > > > Hi Xinjun, > > > > > > > > > > How did u create the DOM element that is to be converted to OM? If > you > > > > > read it from a file you MUST make sure you the > DocumentBuilderFactory > > > > > instance that you use to create the DocumentBuilder instance that > > > > > parses the xml is *namspaceAware*. > > > > > > > > > > Please see here[1] for an example. > > > > > > > > > > Thanks, > > > > > Ruchith > > > > > > > > > > [1] http://rafb.net/p/DDc2NH37.html > > > > > > > > > > > > > > > On 1/10/07, Xinjun Chen wrote: > > > > > > Hi, > > > > > > > > > > > > I am trying to convert a DOM Element to OMElement using the > > following > > > > toOM > > > > > > code in org.apache.axis2.security.util.Axis2Util. > > > > > > > > > > > > public static OMElement toOM(Element element) throws Exception > { > > > > > > try { > > > > > > org.apache.xml.security.Init.init(); > > > > > > ByteArrayOutputStream os = new ByteArrayOutputStream(); > > > > > > XMLUtils.outputDOM (element, os, true); > > > > > > > > > > > > ByteArrayInputStream is = new ByteArrayInputStream( > > os.toByteArray()); > > > > > > XMLStreamReader reader = > > > > > > XMLInputFactory.newInstance().createXMLStreamReader(is); > > > > > > > > > > > > StAXOMBuilder builder = new StAXOMBuilder(reader); > > > > > > builder.setCache(true); > > > > > > return builder.getDocumentElement(); > > > > > > } catch (XMLStreamException e) { > > > > > > log.fatal(e.getMessage (), e); > > > > > > throw new Exception("Error when converting from DOM Element > to > > OM."); > > > > > > } > > > > > > > > > > > > There are two problems with the code: > > > > > > 1. I must add the bolded line in the toOM() method. > > > > > > 2. This method seems not deal with namespace correctly. > > > > > > > > > > > > My original DOM Element is as follows: > > > > > > > > > > > > > encoding="UTF-8"?> > > > > > xmlns=" > > > > > > > > > > > > http://cis.com > ">sAppNo0 > > > > > > > > > > > > But when I use the method to convert the DOM Element into > OMElement, > > it > > > > > > reads: > > > > > > > > > > > > > > > > > > > > > > > > />sAppNo0 > > > > > > > > > > > > > > > > > > It seems that the namespace is ignored by the Axis2Util.toOM(). > > > > > > > > > > > > After I add the OMElement to a SOAPEnvelope using the following > > code, > > > > every > > > > > > element is qualified with "" namespace which is unexpected. > > > > > > > > > > > > SOAPFactory fac = > > OMAbstractFactory.getSOAP11Factory(); > > > > > > SOAPEnvelope envelope = fac.getDefaultEnvelope(); > > > > > > OMElement om = Axis2Util.toOM((Element)retNode); > > > > > > envelope.getBody().addChild(om); > > > > > > > > > > > > /******************************* > > > > > > Result SOAPEnvelope > > > > > > *******************************/ > > > > > > > > > > > > > > > > > xmlns:soapenv=" > > > > http://schemas.xmlsoap.org/soap/envelope/ "> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > sAppNo0 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Could anyone tell me how can I solve the problems? > > > > > > > > > > > > > > > > > > Regards, > > > > > > Xinjun > > > > > > > > > > > > > > > -- > > > > > www.ruchith.org > > > > > www.wso2.org > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > > To unsubscribe, e-mail: > > > > axis-user-unsubscribe@ws.apache.org > > > > > For additional commands, e-mail: axis-user-help@ws.apache.org > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > Paul Fremantle > > > VP/Technology, WSO2 and OASIS WS-RX TC Co-chair > > > > > > http://bloglines.com/blog/paulfremantle > > > paul@wso2.com > > > > > > "Oxygenating the Web Service Platform", www.wso2.com > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: > > axis-user-unsubscribe@ws.apache.org > > > For additional commands, e-mail: axis-user-help@ws.apache.org > > > > > > > > > > > > > -- > Paul Fremantle > VP/Technology, WSO2 and OASIS WS-RX TC Co-chair > > http://bloglines.com/blog/paulfremantle > paul@wso2.com > > "Oxygenating the Web Service Platform", www.wso2.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org > For additional commands, e-mail: axis-user-help@ws.apache.org > > ------=_Part_33803_21372647.1168595744951 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline
Hi Paul,
 
Thank you for your reply.
Before I chose Castor, I have already looked into JIBX. JIBX also enable binding for Java collections. But what I understand JIBX databinding is that, JIBX needs to modify the bytecode. The original class file will be replaced by the new class file which added some marshalling/unmarshalling related codes. I have sent an email to Dennis on whether JIBX can separating the marshalling code from the original class, but did not get response. I did not find example of using JIBX and keeping the original class unchanged. Please enlighten me this if you know how to do this. Any comments or pointers will be helpful.
 
I also want to use StAX-based binding framework directly if possible.

 
On 1/12/07, Paul Fremantle <pzfreo@gmail.com> wrote:
Xinjun

Have you tried some of the databinding frameworks that Axis2 supports?
Maybe JIBX or XMLBeans, or even ADB would suit you better. The DOM
approach will be very slow indeed compared to using a STAX based
binding framework.

The DOM over OM is in axiom-dom-**.jar. This is an implementation of
DOM that uses Axiom underneath, and so can let you switch between
them.

Paul

On 1/12/07, Xinjun Chen <xjchen001@gmail.com> wrote:
> Hi Paul,
>
> Thank you for your reply.
> I am using Castor to create DOM Node, and then convert the DOM Node into OM.
> It seems that Castor does not support AXIOM.
>
> I choose Castor marshalling framework because I got the class files from my
> client and I am not supposed to modify the class files. And there are some
> java.util.Map and java.util.Vector inside the class file. It hits me that
> Castor marshalling framework may satisfy both requirements. Do I have other
> options which may satisfy these two requirements?
>
> Do you mean if I construct the OM directly I will have control on
> eliminating the null elements at node creation time?
> What do you mean there is a version of DOM that uses OM underneath?
>
> Thanks.
>
> Regards,
> Xinjun
>
>
>
> On 1/11/07, Paul Fremantle <pzfreo@gmail.com> wrote:
> > Xinjun
> >
> > How are you creating the DOM element? There might be some options to
> > use OM directly. Firstly, maybe you could just code to OM. Or if you
> > already have lots of DOM code then there is also a version of DOM that
> > uses OM underneath.
> >
> > Paul
> >
> > On 1/11/07, Xinjun Chen <xjchen001@gmail.com> wrote:
> > > Hi Ruchith,
> > >
> > > setNamespaceAware to the original DocumentBuilderFactory solve the
> problem
> > > partially.
> > >
> > > Now the DOM Element reads:
> > > <?xml version=" 1.0"
> > >   encoding="UTF-8"?>
> > > <getHearingDetailsByCaseNoWSReturn
> xmlns="http://cis.com">
> > >     <hearingDetailsVO xmlns=" http://vo.cis.com">
> > >       <duration/>
> > >       <applicationNo>sAppNo0</applicationNo>
> > >     </hearingDetailsVO>
> > > </getHearingDetailsByCaseNoWSReturn>
> > >
> > > But the OMElement reads:
> > >
> > > <getHearingDetailsByCaseNoWSReturn xmlns="">
> > >     <hearingDetailsVO xmlns="http://vo.cis.com">
> > >       <duration/>
> > >       <applicationNo>sAppNo0</applicationNo>
> > >     </hearingDetailsVO>
> > > </getHearingDetailsByCaseNoWSReturn>
> > >
> > > Observations:
> > > 1. After I setNamespaceAware to the original DOM DocumentBuilderFactory,
> the
> > > inner element <hearingDetailsVO> gets correct namespace. But root
> element
> > > <getHearingDetailsByCaseNoWSReturn> does not. The
> namespace
> > > of <getHearingDetailsByCaseNoWSReturn> is lost. I
> created
> > > this element in the following way:
> > >
> > > DocumentBuilderFactory dbf =
> > > DocumentBuilderFactory.newInstance();
> > > dbf.setNamespaceAware (true);
> > > Document doc = dbf.newDocumentBuilder().newDocument();
> > > Element root = doc.createElementNS(" http://cis.com",
> > > "getHearingDetailsByCaseNoWSReturn");
> > >
> > > I think OMElement does not include "http://cis.com" as namespace because
> > > " http://cis.com" is not explicitly declared as a namespace in DOM doc.
> I
> > > searched the interfaces of Document and Element, but cannot find a way
> to
> > > explicitly declare a namespace.
> > > I think I need to treat namespace as attribute in DOM. Please correct me
> if
> > > I am wrong.
> > >
> > > Thus I added one line to declare xmlns as attribute.
> > >
> > > root.setAttribute("xmlns", " http://cis.com").
> > >
> > > Is there any other elegant way?
> > >
> > >
> > > 2. Do you have a good way to remove all null elements like <duration/>?
> The
> > > original DOM Element also contains other null elements which contains no
> > > value.
> > >
> > >
> > >
> > > Regards,
> > > Xinjun
> > >
> > >
> > >
> > >
> > > On 1/10/07, Ruchith Fernando <ruchith.fernando@gmail.com> wrote:
> > > > Hi Xinjun,
> > > >
> > > > How did u create the DOM element that is to be converted to OM? If you
> > > > read it from a file you MUST make sure you the DocumentBuilderFactory
> > > > instance that you use to create the DocumentBuilder instance that
> > > > parses the xml is *namspaceAware*.
> > > >
> > > > Please see here[1] for an example.
> > > >
> > > > Thanks,
> > > > Ruchith
> > > >
> > > > [1] http://rafb.net/p/DDc2NH37.html
> > > >
> > > >
> > > > On 1/10/07, Xinjun Chen < xjchen001@gmail.com> wrote:
> > > > > Hi,
> > > > >
> > > > > I am trying to convert a DOM Element to OMElement using the
> following
> > > toOM
> > > > > code in  org.apache.axis2.security.util.Axis2Util.
> > > > >
> > > > >  public static OMElement toOM(Element element) throws Exception {
> > > > >   try {
> > > > >     org.apache.xml.security.Init.init();
> > > > >    ByteArrayOutputStream os = new ByteArrayOutputStream();
> > > > >     XMLUtils.outputDOM (element, os, true);
> > > > >
> > > > >    ByteArrayInputStream is = new ByteArrayInputStream(
> os.toByteArray());
> > > > >    XMLStreamReader reader =
> > > > > XMLInputFactory.newInstance().createXMLStreamReader(is);
> > > > >
> > > > >    StAXOMBuilder builder = new StAXOMBuilder(reader);
> > > > >     builder.setCache(true);
> > > > >    return builder.getDocumentElement();
> > > > >   } catch (XMLStreamException e) {
> > > > >    log.fatal(e.getMessage (), e);
> > > > >    throw new Exception("Error when converting from DOM Element to
> OM.");
> > > > >   }
> > > > >
> > > > > There are two problems with the code:
> > > > > 1. I must add the bolded line in the toOM() method.
> > > > > 2. This method seems not deal with namespace correctly.
> > > > >
> > > > > My original DOM Element is as follows:
> > > > > <?xml version=" 1.0"
> > > > >
> encoding="UTF-8"?><getHearingDetailsByCaseNoWSReturn
> > > > > xmlns="
> > > > >
> > >
> http://cis.com"><hearingDetailsVO><duration/><applicationNo>sAppNo0</applicationNo></hearingDetailsVO></getHearingDetailsByCaseNoWSReturn>
> > > > >
> > > > > But when I use the method to convert the DOM Element into OMElement,
> it
> > > > > reads:
> > > > >
> > >
> <getHearingDetailsByCaseNoWSReturn><hearingDetailsVO><duration
> > > > >
> > >
> /><applicationNo>sAppNo0</applicationNo></hearingDetailsVO></getHearingDetailsByCaseNoWSReturn>
> > > > >
> > > > >
> > > > > It seems that the namespace is ignored by the Axis2Util.toOM().
> > > > >
> > > > > After I add the OMElement to a SOAPEnvelope using the following
> code,
> > > every
> > > > > element is qualified with "" namespace which is unexpected.
> > > > >
> > > > > SOAPFactory fac =
> OMAbstractFactory.getSOAP11Factory();
> > > > > SOAPEnvelope envelope = fac.getDefaultEnvelope();
> > > > > OMElement om = Axis2Util.toOM((Element)retNode);
> > > > > envelope.getBody().addChild(om);
> > > > >
> > > > > /*******************************
> > > > > Result SOAPEnvelope
> > > > > *******************************/
> > > > > <?xml version=' 1.0' encoding='utf-8'?>
> > > > > <soapenv:Envelope
> > > > >  xmlns:soapenv="
> > > http://schemas.xmlsoap.org/soap/envelope/ ">
> > > > >  <soapenv:Header />
> > > > >  <soapenv:Body>
> > > > >   <getHearingDetailsByCaseNoWSReturn xmlns="">
> > > > >    <hearingDetailsVO xmlns="">
> > > > >     <duration xmlns="" />
> > > > >     <applicationNo xmlns="">sAppNo0</applicationNo>
> > > > >    </hearingDetailsVO>
> > > > >   </getHearingDetailsByCaseNoWSReturn>
> > > > >  </soapenv:Body>
> > > > > </soapenv:Envelope>
> > > > >
> > > > >
> > > > > Could anyone tell me how can I solve the problems?
> > > > >
> > > > >
> > > > > Regards,
> > > > > Xinjun
> > > >
> > > >
> > > > --
> > > > www.ruchith.org
> > > > www.wso2.org
> > > >
> > > >
> > >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail:
> > > axis-user-unsubscribe@ws.apache.org
> > > > For additional commands, e-mail: axis-user-help@ws.apache.org
> > > >
> > > >
> > >
> > >
> >
> >
> > --
> > Paul Fremantle
> > VP/Technology, WSO2 and OASIS WS-RX TC Co-chair
> >
> > http://bloglines.com/blog/paulfremantle
> > paul@wso2.com
> >
> > "Oxygenating the Web Service Platform", www.wso2.com
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> axis-user-unsubscribe@ws.apache.org
> > For additional commands, e-mail: axis-user-help@ws.apache.org
> >
> >
>
>


--
Paul Fremantle
VP/Technology, WSO2 and OASIS WS-RX TC Co-chair

http://bloglines.com/blog/paulfremantle
paul@wso2.com

"Oxygenating the Web Service Platform", www.wso2.com

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


------=_Part_33803_21372647.1168595744951--