RE: While parsing with xmlBeans, sub branch is coming null
"Gillen, Paul" <[email protected]> Tue, 09 Nov 2010 14:34:08 -0500
| Newsgroups | gmane.text.xml.xmlbeans.user |
|---|---|
| Message-ID | <6A51CF4158562249906CB0F24DC99E4451EABC1C93@GATUCEXCH03ASV.nscorp.ad.nscorp.com> |
While I agree about the mess, XMLSpy generates the attached from the supplied XML. Compiling these with XMLBeans appears to let you address elements below the "command" level:
{
IqDocument doc = IqDocument.Factory.parse(new File("getProfile.xml"));
Iq iq = doc.getIq();
Command command = iq.getCommand();
Iodata iodata = command.getIodata();
System.out.println("Iodata: "+iodata);
}
Paul
-----Original Message-----
From: Tim Watts [mailto:[email protected]]
Sent: Tuesday, November 09, 2010 1:57 PM
To: [email protected]
Subject: Re: While parsing with xmlBeans, sub branch is coming null
This is quite a mess. I'm assuming you have to accept the input as is.
Basically you've got 4 different XML vocabularies active in each xml
instance doc:
* The 1st one, which isn't in any namespace at all, containing
only the {iq} element as well as ALL the attributes in ALL the
elements (yes, ALL)
* a 2nd containing only the {command} element
* a 3rd containing the {iodata, out} elements
* a 4th containing the {profiles, profile, actions, action}
elements.
Note that, according to the XML namespace spec, unqualified attributes
are in NO namespace (not even the default) whereas unqualified elements
are in the default namespace (assuming a default ns has been declared).
[ sidenote: I doubt this effect was intended by design here. If it won't
get you into trouble, do smack the author ever so gently at the back of
the head. :-) ]
Given that an .xsd can define a schema for only a single namespace I
think you're going to have to create a separate .xsd for each of the
above namespaces and set the targetNamespace to the appropriate xmlns.
I'm not absolutely sure but I think for the "no namespace" stuff (i.e.
<iq> and all the attributes) you should create an .xsd without a
targetNamespace attr -- don't make it empty, leave it out entirely.
Alternatively, you might be able to get away with creating a single "no
namespace" .xsd and turning off namespace processing when parsing the
xml docs. However, I'm not sure XmlBeans or Jaxb can function this way.
On Tue, 2010-11-09 at 01:31 -0800, olamalam wrote:
> Hello Tim, Thanks for your reply.
>
> I'm developing an integration project and I created that xsd file from the
> xml file that our client sends us. I tried several different tools but none
> of them creates a targetnamespace from the xml file that I attached. When I
> try to assign a namespace manually I'm getting invalid xsd errors.
>
> But yes, you are right, there must be stg wrong with the xsd since I'm
> having the same problem with Jaxb too.
>
> In the Jaxb forum, they advised me to remove xmlns="..." field from the tags
> of xml. This is maybe why my xsd doesnt have a targetnamespace. Removing
> xmlns fields from the each xml file received by my system programatically is
> not a very practical solution. Therefore I guess I need to assign a
> targetnamespace to my xsd. What should I put there?
>
> Thanks again,
> ilker
>
>
> Tim Watts-3 wrote:
> >
> > I could be wrong, but the odd thing I noticed was that the .xsd doesn't
> > have a targetNamespace attr. I don't think simply declaring a namespace
> > in the .xsd makes it part of the xml schema being defined. But maybe I'm
> > misunderstanding your intent. It looks like you're trying to define a
> > schema that spans multiple namespaces and I"m not sure that's supported
> > in XML Schema. I'd love to learn otherwise.
> >
> >
> > On Mon, 2010-11-08 at 08:27 -0800, olamalam wrote:
> >> Hi to all,
> >>
> >> Actually, I'm not new to XmlBeans :) however I've faced with a problem
> >> for
> >> the first time and couldn't solve it.
> >>
> >> I"m using xmlBeans 2.4.0 and the xml file I'm trying to parse and it's
> >> schema are attached. I created the .jar file by using "scomp" command
> >> properly but when I parse the file, the first tag is returned with
> >> correct
> >> values at "id", "to", "from" and "type" fields but "command" object
> >> returns
> >> null. I also tried parsing it with JaxB but I got the same problem there
> >> too. (I'm going to ask the same question to Jaxb forum)
> >>
> >> Can you see what I'm missing?
> >>
> >> http://old.nabble.com/file/p30162231/getProfile.xml getProfile.xml
> >> http://old.nabble.com/file/p30162231/getProfile.xsd getProfile.xsd
> >
> > ________
> > It does not matter how slowly you go so long as you do not stop.
> > -- Confucius
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
> >
> >
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
nabble.xsd
(text/xml, 1.3 KB)
<?xml version="1.0" encoding="UTF-8"?> <!--W3C Schema generated by XMLSpy v2010 rel. 3 sp1 (http://www.altova.com)--> <xs:schema xmlns:n1="http://jabber.org/protocol/commands" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:import namespace="http://jabber.org/protocol/commands" schemaLocation="nabble1.xsd"/> <xs:element name="iq"> <xs:complexType> <xs:sequence> <xs:element ref="n1:command"/> </xs:sequence> <xs:attribute name="type" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="result"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="to" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="admin@localhost/Smack"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="id" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="rPJNN-5"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="from" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="openlink.localhost"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> </xs:schema>
nabble1.xsd
(text/xml, 823 B)
<?xml version="1.0" encoding="UTF-8"?> <!--W3C Schema generated by XMLSpy v2010 rel. 3 sp1 (http://www.altova.com)--> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:n3="urn:xmpp:tmp:io-data" xmlns:ns1="http://jabber.org/protocol/commands" targetNamespace="http://jabber.org/protocol/commands"> <xs:import namespace="urn:xmpp:tmp:io-data" schemaLocation="nabble2.xsd"/> <xs:element name="command"> <xs:complexType> <xs:sequence> <xs:element ref="n3:iodata"/> </xs:sequence> <xs:attribute name="status" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="completed"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="node" type="xs:anyURI" use="required"/> </xs:complexType> </xs:element> </xs:schema>
nabble2.xsd
(text/xml, 932 B)
<?xml version="1.0" encoding="UTF-8"?> <!--W3C Schema generated by XMLSpy v2010 rel. 3 sp1 (http://www.altova.com)--> <xs:schema targetNamespace="urn:xmpp:tmp:io-data" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:n2="http://xmpp.org/protocol/openlink:01:00:00/profiles" xmlns:n3="urn:xmpp:tmp:io-data"> <xs:import namespace="http://xmpp.org/protocol/openlink:01:00:00/profiles" schemaLocation="nabble3.xsd"/> <xs:element name="out"> <xs:complexType> <xs:sequence> <xs:element ref="n2:profiles"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="iodata"> <xs:complexType> <xs:sequence> <xs:element ref="n3:out"/> </xs:sequence> <xs:attribute name="type" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="output"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> </xs:schema>
nabble3.xsd
(text/xml, 2.3 KB)
<?xml version="1.0" encoding="UTF-8"?> <!--W3C Schema generated by XMLSpy v2010 rel. 3 sp1 (http://www.altova.com)--> <xs:schema targetNamespace="http://xmpp.org/protocol/openlink:01:00:00/profiles" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:n2="http://xmpp.org/protocol/openlink:01:00:00/profiles"> <xs:element name="profiles"> <xs:complexType> <xs:sequence> <xs:element ref="n2:profile" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="profile"> <xs:complexType> <xs:sequence> <xs:element ref="n2:actions"/> </xs:sequence> <xs:attribute name="label" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="ITS AnyWhere user"/> <xs:enumeration value="ITS Mobile user"/> <xs:enumeration value="Netrix user"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="id" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="alan.trader_itsanywhere"/> <xs:enumeration value="alan.trader_itsmobile"/> <xs:enumeration value="alan.trader_netrix"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="default" type="xs:boolean"/> </xs:complexType> </xs:element> <xs:element name="actions"> <xs:complexType> <xs:sequence> <xs:element ref="n2:action" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="action"> <xs:complexType> <xs:attribute name="label" use="required" type="xs:string"/> <xs:attribute name="id" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="AnswerCall"/> <xs:enumeration value="ClearCall"/> <xs:enumeration value="ClearConnection"/> <xs:enumeration value="ConferenceCall"/> <xs:enumeration value="ConsultationCall"/> <xs:enumeration value="DivertCall"/> <xs:enumeration value="HoldCall"/> <xs:enumeration value="OutputCall"/> <xs:enumeration value="SendDigit"/> <xs:enumeration value="SingleStepTransfer"/> <xs:enumeration value="TransferCall"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> </xs:schema>