You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@xmlbeans.apache.org by Gordon Rogers <go...@corelogic.co.uk> on 2008/09/22 12:23:50 UTC

XMLStreamReader namespace handling

Hi

I am using XMLBeans version 2.1.0 and have got a question about how the
XMLStreamReader handles namespaces and in particular why the semantics
used by the newXMLStreamReader() method and  the xmlText() method are
different when passed the same set of XmlOptions. This is best
illustrated by an example:

	Map ns = new HashMap();
      ns.put( EBXML_NAMESPACE_URI, EBXML_NAMESPACE_PREFIX );

	XmlOptions xmlOptions = new XmlOptions();
	xmlOptions.setSaveOuter();
	xmlOptions.setSaveSuggestedPrefixes( ns )
	
xmlOptions.setSaveAggressiveNamespaces().setSaveImplicitNamespaces( ns
);

	MessageHeaderDocument messageHeaderDocument =
MessageHeaderDocument.Factory.newInstance();
	MessageHeaderDocument.MessageHeader messageHeader =
messageHeaderDocument.addNewMessageHeader();
	messageHeader.setVersion( "2.0" );
	FromDocument.From from = messageHeader.addNewFrom();
      PartyIdDocument.PartyId fromPartyId = from.addNewPartyId();
      fromPartyId.setType( "urn:nhs:names:partyType:ocs+serviceInstance"
);
      fromPartyId.setStringValue( "from_party_key" );

	...

The output from the messageHeaderDocument.xmlText( xmlOptions ) looks
like:
<eb:MessageHeader
xmlns:eb="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-head
er-2_0.xsd" eb:version="2.0">
	<eb:From>
		<eb:PartyId
eb:type="urn:nhs:names:partyType:ocs+serviceInstance">from_party_key</eb
:PartyId>
	</eb:From>
</eb:MessageHeader>

The output from messageHeaderDocument.newXMLStreamReader( xmlOptions )
looks like:

<MessageHeader
xmlns="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-
2_0.xsd" 
	
xmlns:axis2ns1="http://www.oasis-open.org/committees/ebxml-msg/schema/ms
g-header-2_0.xsd"
 			axis2ns1:version="2.0">
	<From>
		<PartyId
xmlns:axis2ns2="http://www.oasis-open.org/committees/ebxml-msg/schema/ms
g-header-2_0.xsd" 
	
axis2ns2:type="urn:nhs:names:partyType:ocs+serviceInstance">from_party_k
ey</PartyId>
	</From>
</MessageHeader>

As you can see the namespaces, whilst valid, have not been prefixed
correctly or managed aggressively when using the XMLStreamReader
approach. Does this seem like odd behaviour or is this expected? From
looking at the 2.1.0 source the only options newXMLStreamReader() pays
attention to are saveInner and saveOuter, why is this?

I am writing an object that is a wrapper round an XmlObject and want to
expose an XMLStreamReader as part of that interface, but due to this
namespacing issue I'm considering exposing an InputStream instead, based
on the String returned from the xmlText() method. This seems a bit hacky
and I'm also concerned that it's not going to be the most efficient. I'm
using the result of that method as the input to a StAXOMBuilder so that
I can generate AXIOM classes for use in an axis 2 request. Has anyone
used a similar approach?

Thanks in advance for any help with this.

Gordon

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


RE: XMLStreamReader namespace handling

Posted by Gordon Rogers <go...@corelogic.co.uk>.
Thanks for that, Cezar, don't know why I assumed they were analogous.

So is it a really wasteful operation to create a stream from the String
returned by xmlText()? My issue is that I was trying to hide the use of
XmlBeans from any other classes that needed the document, so plumped for
an XmlStreamReader as the StAXOMBuilder class had a constructor that
could use that. The other constructor on StAXOMBuilder takes an
InputStream which means I need to produce an InputStream from my
XmlObject. What's the most efficient way of doing this?

Thanks
Gordon

-----Original Message-----
From: Cezar Andrei [mailto:cezar.andrei@oracle.com] 
Sent: 24 September 2008 17:59
To: user@xmlbeans.apache.org
Subject: RE: XMLStreamReader namespace handling

Gordon,

The two methods are not designed to return exactly the same info. While
xmlText() has to always return a valid XML document with more flexible
options, the newXMLStreamReader() is designed for speed to transfer the
contents of the XML store.

Cezar

> -----Original Message-----
> From: Gordon Rogers [mailto:gordon.rogers@corelogic.co.uk]
> Sent: Monday, September 22, 2008 5:24 AM
> To: user@xmlbeans.apache.org
> Subject: XMLStreamReader namespace handling
> 
> Hi
> 
> I am using XMLBeans version 2.1.0 and have got a question about how
the
> XMLStreamReader handles namespaces and in particular why the semantics
> used by the newXMLStreamReader() method and  the xmlText() method are
> different when passed the same set of XmlOptions. This is best
> illustrated by an example:
> 
> 	Map ns = new HashMap();
>       ns.put( EBXML_NAMESPACE_URI, EBXML_NAMESPACE_PREFIX );
> 
> 	XmlOptions xmlOptions = new XmlOptions();
> 	xmlOptions.setSaveOuter();
> 	xmlOptions.setSaveSuggestedPrefixes( ns )
> 
> xmlOptions.setSaveAggressiveNamespaces().setSaveImplicitNamespaces( ns
> );
> 
> 	MessageHeaderDocument messageHeaderDocument =
> MessageHeaderDocument.Factory.newInstance();
> 	MessageHeaderDocument.MessageHeader messageHeader =
> messageHeaderDocument.addNewMessageHeader();
> 	messageHeader.setVersion( "2.0" );
> 	FromDocument.From from = messageHeader.addNewFrom();
>       PartyIdDocument.PartyId fromPartyId = from.addNewPartyId();
>       fromPartyId.setType(
"urn:nhs:names:partyType:ocs+serviceInstance"
> );
>       fromPartyId.setStringValue( "from_party_key" );
> 
> 	...
> 
> The output from the messageHeaderDocument.xmlText( xmlOptions ) looks
> like:
> <eb:MessageHeader
>
xmlns:eb="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-head
> er-2_0.xsd" eb:version="2.0">
> 	<eb:From>
> 		<eb:PartyId
>
eb:type="urn:nhs:names:partyType:ocs+serviceInstance">from_party_key</eb
> :PartyId>
> 	</eb:From>
> </eb:MessageHeader>
> 
> The output from messageHeaderDocument.newXMLStreamReader( xmlOptions )
> looks like:
> 
> <MessageHeader
>
xmlns="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-
> 2_0.xsd"
> 
>
xmlns:axis2ns1="http://www.oasis-open.org/committees/ebxml-msg/schema/ms
> g-header-2_0.xsd"
>  			axis2ns1:version="2.0">
> 	<From>
> 		<PartyId
>
xmlns:axis2ns2="http://www.oasis-open.org/committees/ebxml-msg/schema/ms
> g-header-2_0.xsd"
> 
>
axis2ns2:type="urn:nhs:names:partyType:ocs+serviceInstance">from_party_k
> ey</PartyId>
> 	</From>
> </MessageHeader>
> 
> As you can see the namespaces, whilst valid, have not been prefixed
> correctly or managed aggressively when using the XMLStreamReader
> approach. Does this seem like odd behaviour or is this expected? From
> looking at the 2.1.0 source the only options newXMLStreamReader() pays
> attention to are saveInner and saveOuter, why is this?
> 
> I am writing an object that is a wrapper round an XmlObject and want
to
> expose an XMLStreamReader as part of that interface, but due to this
> namespacing issue I'm considering exposing an InputStream instead,
based
> on the String returned from the xmlText() method. This seems a bit
hacky
> and I'm also concerned that it's not going to be the most efficient.
I'm
> using the result of that method as the input to a StAXOMBuilder so
that
> I can generate AXIOM classes for use in an axis 2 request. Has anyone
> used a similar approach?
> 
> Thanks in advance for any help with this.
> 
> Gordon
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@xmlbeans.apache.org
> For additional commands, e-mail: user-help@xmlbeans.apache.org
> 


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


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


RE: XMLStreamReader namespace handling

Posted by Cezar Andrei <ce...@oracle.com>.
Gordon,

The two methods are not designed to return exactly the same info. While xmlText() has to always return a valid XML document with more flexible options, the newXMLStreamReader() is designed for speed to transfer the contents of the XML store.

Cezar

> -----Original Message-----
> From: Gordon Rogers [mailto:gordon.rogers@corelogic.co.uk]
> Sent: Monday, September 22, 2008 5:24 AM
> To: user@xmlbeans.apache.org
> Subject: XMLStreamReader namespace handling
> 
> Hi
> 
> I am using XMLBeans version 2.1.0 and have got a question about how the
> XMLStreamReader handles namespaces and in particular why the semantics
> used by the newXMLStreamReader() method and  the xmlText() method are
> different when passed the same set of XmlOptions. This is best
> illustrated by an example:
> 
> 	Map ns = new HashMap();
>       ns.put( EBXML_NAMESPACE_URI, EBXML_NAMESPACE_PREFIX );
> 
> 	XmlOptions xmlOptions = new XmlOptions();
> 	xmlOptions.setSaveOuter();
> 	xmlOptions.setSaveSuggestedPrefixes( ns )
> 
> xmlOptions.setSaveAggressiveNamespaces().setSaveImplicitNamespaces( ns
> );
> 
> 	MessageHeaderDocument messageHeaderDocument =
> MessageHeaderDocument.Factory.newInstance();
> 	MessageHeaderDocument.MessageHeader messageHeader =
> messageHeaderDocument.addNewMessageHeader();
> 	messageHeader.setVersion( "2.0" );
> 	FromDocument.From from = messageHeader.addNewFrom();
>       PartyIdDocument.PartyId fromPartyId = from.addNewPartyId();
>       fromPartyId.setType( "urn:nhs:names:partyType:ocs+serviceInstance"
> );
>       fromPartyId.setStringValue( "from_party_key" );
> 
> 	...
> 
> The output from the messageHeaderDocument.xmlText( xmlOptions ) looks
> like:
> <eb:MessageHeader
> xmlns:eb="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-head
> er-2_0.xsd" eb:version="2.0">
> 	<eb:From>
> 		<eb:PartyId
> eb:type="urn:nhs:names:partyType:ocs+serviceInstance">from_party_key</eb
> :PartyId>
> 	</eb:From>
> </eb:MessageHeader>
> 
> The output from messageHeaderDocument.newXMLStreamReader( xmlOptions )
> looks like:
> 
> <MessageHeader
> xmlns="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-
> 2_0.xsd"
> 
> xmlns:axis2ns1="http://www.oasis-open.org/committees/ebxml-msg/schema/ms
> g-header-2_0.xsd"
>  			axis2ns1:version="2.0">
> 	<From>
> 		<PartyId
> xmlns:axis2ns2="http://www.oasis-open.org/committees/ebxml-msg/schema/ms
> g-header-2_0.xsd"
> 
> axis2ns2:type="urn:nhs:names:partyType:ocs+serviceInstance">from_party_k
> ey</PartyId>
> 	</From>
> </MessageHeader>
> 
> As you can see the namespaces, whilst valid, have not been prefixed
> correctly or managed aggressively when using the XMLStreamReader
> approach. Does this seem like odd behaviour or is this expected? From
> looking at the 2.1.0 source the only options newXMLStreamReader() pays
> attention to are saveInner and saveOuter, why is this?
> 
> I am writing an object that is a wrapper round an XmlObject and want to
> expose an XMLStreamReader as part of that interface, but due to this
> namespacing issue I'm considering exposing an InputStream instead, based
> on the String returned from the xmlText() method. This seems a bit hacky
> and I'm also concerned that it's not going to be the most efficient. I'm
> using the result of that method as the input to a StAXOMBuilder so that
> I can generate AXIOM classes for use in an axis 2 request. Has anyone
> used a similar approach?
> 
> Thanks in advance for any help with this.
> 
> Gordon
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@xmlbeans.apache.org
> For additional commands, e-mail: user-help@xmlbeans.apache.org
> 


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