Have you tried loading the type as an xmlobject, getting the value of the namespace, and casting to the correct type? ie //pcode, please excuse incorrectness
if(xmlobject.getNamespace() == namespace1) type = (typeDocument)xmlobject; -or- you could change the namespace using the xmlcursor or DOM apis before creating the type. In other words: XmlObject xo = XmlObject.Factory.parse(instance); XmlCursor xc = XmlObject.newCursor(); xc.changeNS(); and then assign to the most recent NS, type If ns replacement is a valid solution for you, you could always just try something like: (yes, way more hackish) String goodInstance = xo.xmlText().replaceAll("oldNS", "newNs"); TypeDocument t = TypeDocument.factory.parse(goodInstance); Please let us know if any of these solutions works for you. -jacob danner -------------------
sent from my nokia 9500 On 3/28/07, Matthieu Riou <[EMAIL PROTECTED]> wrote:
Hi, I'm having some difficulties to support the reading of an XML instance document that could belong to two different target namespaces. I'm using XMLBeans to compile a schema and then read and browse instances using the generated Java data structures. Originally, my schema was in a first namespace: http://ode.fivesight.com/schemas/2006/06/27/dd. So my schema header declaration was something like: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ode.fivesight.com/schemas/2006/06/27/dd" .... And in my xsdconfig I had the following: <xb:namespace uri="http://ode.fivesight.com/schemas/2006/06/27/dd"> <xb:package>org.apache.ode.bpel.dd</xb:package> </xb:namespace> Now I want to update that target namespace to http://www.apache.org/ode/schemas/dd/2007/03 while still maintaining backward compatibility with older documents. So if someone gives me a document that looks like: <deploy xmlns="http://ode.fivesight.com/schemas/2006/06/27/dd" ... I would like XMLBeans to either ignore this namespace and replace it with the new one or generate exactly the same data structure as with the new namespace so I don't need to change my whole java code. I've tried different approaches, the first one was to declare the two namespaces in my xsdconfig: <xb:namespace uri="http://ode.fivesight.com/schemas/2006/06/27/dd"> <xb:package>org.apache.ode.bpel.dd</xb:package> </xb:namespace> <xb:namespace uri="http://www.apache.org/ode/schemas/dd/2007/03"> <xb:package>org.apache.ode.bpel.dd</xb:package> </xb:namespace> The gotcha is that my schema can only have one target namespace anyway so that doesn't quite fly. My second try was to do: XmlOptions options = new XmlOptions(); HashMap otherNs = new HashMap(); otherNs.put("http://ode.fivesight.com/schemas/2006/06/27/dd", "http://www.apache.org/ode/schemas/dd/2007/03"); options.setLoadSubstituteNamespaces(otherNs); _dd = DeployDocument.Factory.parse(ddLocation); When I load the instance. That didn't work either, in both cases XMLBeans complains with: org.apache.xmlbeans.XmlException: /home/dusty/Dev/Tools/Platform/apache- tomcat-5.5.17/webapps/ode/WEB-INF/processes/DynPartner/deploy.xml:0: error: The document is not a [EMAIL PROTECTED]://www.apache.org/ode/schemas/dd/2007/03: document element namespace mismatch expected " http://www.apache.org/ode/schemas/dd/2007/03" got " http://ode.fivesight.com/schemas/2006/06/27/dd". Is there any solution to my problem? Thanks, Matthieu