You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by "phil.xue" <ph...@propellerhead.co.nz> on 2013/08/01 06:11:48 UTC

Marshall xml with namespace prefix using xmljson

Hi,

Has anyone successfully marshalled XML with namespace prefixed using
camel-xmljson?

A sample XML is shown below in which all elements are prefixed with
namespace "rdm", I'd like to split on Record element to produce 2 json
outputs

<rdm:Results xmlns:rdm="http://www.arandomcompany.com">
    <rdm:Recordset>
        <rdm:Record>
            <rdm:Id>1</rdm:Id>
            <rdm:Name>Alex</rdm:Name>
        </rdm:Record>
        <rdm:Record>
            <rdm:Id>2</rdm:Id>
            <rdm:Name>Bob</rdm:Name>
        </rdm:Record>
    </rdm:Recordset>
</rdm:Results>

My route looks like this:

<camelContext id="blueprintContext" trace="false"
xmlns="http://camel.apache.org/schema/blueprint">
	<camel:route id="xmlFeed">
		<camel:from uri="file://source" />
		<camel:split streaming="true">
			<camel:tokenize token="Record" xml="true" />
			<camel:marshal>
				<camel:xmljson skipNamespaces="true" removeNamespacePrefixes="true"/>
			</camel:marshal>
			<camel:log message="${body}" />
		</camel:split>
	</camel:route>
</camelContext>

And I'm getting the following error:

Caused by: nu.xom.ParsingException: The prefix "rdm" for element
"rdm:Record" is not bound. at line 1, column 26
	at nu.xom.Builder.build(Unknown Source)[258:nu.xom:1.2.5.osgi]
	at nu.xom.Builder.build(Unknown Source)[258:nu.xom:1.2.5.osgi]
	at
net.sf.json.xml.XMLSerializer.read(XMLSerializer.java:309)[256:org.apache.servicemix.bundles.json-lib:2.4.0.1]
	... 83 more
Caused by: org.xml.sax.SAXParseException: The prefix "rdm" for element
"rdm:Record" is not bound.
	at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1236)[:1.7.0_25]
	... 86 more


Seems to me I need to bind the namespace with the marshaller so it's aware
of the namespace but nothing in the doc
(http://camel.apache.org/xmljson.html) shows that this can be do on xmljson.
btw, xmljson is able to perform the transformation If I add xmlns to each
Record elements, e.g. <rdm:Record xmlns:rdm="http://www.arandomcompany.com">
but unfortunately I have no control over the format of XML file

It's much appreciated if someone could please shed some lights on this

Thanks

Phil





--
View this message in context: http://camel.465427.n5.nabble.com/Marshall-xml-with-namespace-prefix-using-xmljson-tp5736616.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Marshall xml with namespace prefix using xmljson

Posted by "phil.xue" <ph...@propellerhead.co.nz>.
Sorted. The issue is not so much about xmljson but the way my XML is
tokenized where I should have inherited the namespace from top element
rdm:Results so that when xmljson does the parsing it knows about the
namespace

Adding inheritNamespaceTagName to tokenize fixed my issue:

<camel:tokenize token="Record" xml="true"
inheritNamespaceTagName="Results"/>



--
View this message in context: http://camel.465427.n5.nabble.com/Marshall-xml-with-namespace-prefix-using-xmljson-tp5736616p5736619.html
Sent from the Camel - Users mailing list archive at Nabble.com.