From: Dennis S. <dso...@us...> - 2005-07-21 22:01:13
|
Update of /cvsroot/jibx/core/build/test/extras In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22604/build/test/extras Modified Files: binding10.xml QNameReference.java Log Message: Fixes to test unmarshalling and marshalling with arbitrary namespaces and prefixes. Index: QNameReference.java =================================================================== RCS file: /cvsroot/jibx/core/build/test/extras/QNameReference.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** QNameReference.java 21 Jul 2005 08:02:23 -0000 1.1 --- QNameReference.java 21 Jul 2005 22:01:05 -0000 1.2 *************** *** 1,4 **** /* ! Copyright (c) 2004, Dennis M. Sosnoski All rights reserved. --- 1,4 ---- /* ! Copyright (c) 2005, Dennis M. Sosnoski All rights reserved. *************** *** 29,45 **** package extras; import org.jibx.extras.QName; public class QNameReference { ! private QName m_ref1; ! private QName m_ref2; ! private QName m_ref3; ! private QName getRef() { return m_ref3; } ! private void setRef(QName qname) { m_ref3 = qname; } } \ No newline at end of file --- 29,96 ---- package extras; + import java.io.IOException; + import java.util.ArrayList; + import org.jibx.extras.QName; + import org.jibx.runtime.IMarshallingContext; + import org.jibx.runtime.IUnmarshallingContext; + import org.jibx.runtime.IXMLWriter; + import org.jibx.runtime.JiBXException; + import org.jibx.runtime.impl.MarshallingContext; + import org.jibx.runtime.impl.UnmarshallingContext; public class QNameReference { ! protected QName m_ref1; ! protected QName m_ref2; ! protected QName m_ref3; ! protected ArrayList m_namespaces; ! protected QName getRef() { return m_ref3; } ! protected void setRef(QName qname) { m_ref3 = qname; } + + protected void getNamespaces(IUnmarshallingContext ictx) + throws JiBXException { + UnmarshallingContext ctx = (UnmarshallingContext)ictx; + int count = ctx.getNamespaceCount(); + if (count > 0) { + m_namespaces = new ArrayList(); + for (int i = 0; i < count; i++) { + m_namespaces.add(ctx.getNamespacePrefix(i)); + m_namespaces.add(ctx.getNamespaceUri(i)); + } + } else { + m_namespaces = null; + } + } + + protected void setNamespaces(IMarshallingContext ictx) throws IOException { + if (m_namespaces != null) { + IXMLWriter writer = ((MarshallingContext)ictx).getXmlWriter(); + String[] uris = new String[m_namespaces.size()/2]; + int[] indexes = new int[uris.length]; + String[] prefs = new String[uris.length]; + int base = writer.getNamespaceCount(); + for (int i = 0; i < uris.length; i++) { + indexes[i] = base + i; + String pref = (String)m_namespaces.get(i*2); + if (pref == null) { + pref = ""; + } + prefs[i] = pref; + uris[i] = (String)m_namespaces.get(i*2+1); + } + writer.pushExtensionNamespaces(uris); + writer.openNamespaces(indexes, prefs); + for (int i = 0; i < uris.length; i++) { + String prefix = prefs[i]; + String name = prefix.length() > 0 ? "xmlns:" + prefix : "xmlns"; + writer.addAttribute(0, name, uris[i]); + } + } + } } \ No newline at end of file Index: binding10.xml =================================================================== RCS file: /cvsroot/jibx/core/build/test/extras/binding10.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** binding10.xml 21 Jul 2005 08:02:07 -0000 1.1 --- binding10.xml 21 Jul 2005 22:01:05 -0000 1.2 *************** *** 1,13 **** <!-- Binding to test QName handling --> <binding> ! <namespace uri="urn:a" prefix="ns1" default="elements"/> ! <namespace uri="urn:b" prefix="ns2"/> ! <namespace uri="urn:c" prefix="ns3"/> <format type="org.jibx.extras.QName" serializer="org.jibx.extras.QName.serialize" deserializer="org.jibx.extras.QName.deserialize"/> ! <mapping name="qnames" class="extras.QNameReference"> ! <value name="qname" get-method="getRef" set-method="setRef"/> ! <value name="qname" field="m_ref1"/> <value style="attribute" name="qname" field="m_ref2"/> </mapping> --- 1,12 ---- <!-- Binding to test QName handling --> <binding> ! <namespace uri="urn:a" prefix="ns0" default="none"/> <format type="org.jibx.extras.QName" serializer="org.jibx.extras.QName.serialize" deserializer="org.jibx.extras.QName.deserialize"/> ! <mapping name="qnames" ns="urn:a" class="extras.QNameReference" ! pre-set="getNamespaces" pre-get="setNamespaces"> ! <value name="qname" ns="urn:a" get-method="getRef" set-method="setRef"/> ! <value name="qname" ns="urn:a" field="m_ref1"/> <value style="attribute" name="qname" field="m_ref2"/> </mapping> |