I have attached a patch for two things:
1. It fixes a bug when generating source for a <group> when the group
is mapped to a different XML Schema namespace and java package.
The source generated would not compile due to the group not being
assigned to the correct java package.
2. A set method was added to the Marshaller to disable generation of
namespace declarations within an element.
Regards,
Glenn
----------------------------------------------------------------------
Glenn Nielsen [EMAIL PROTECTED] | /* Spelin donut madder |
MOREnet System Programming | * if iz ina coment. |
Missouri Research and Education Network | */ |
----------------------------------------------------------------------
Index: src/main/org/exolab/castor/builder/MemberFactory.java
===================================================================
RCS file: /cvs/castor/castor/src/main/org/exolab/castor/builder/MemberFactory.java,v
retrieving revision 1.67
diff -u -r1.67 MemberFactory.java
--- src/main/org/exolab/castor/builder/MemberFactory.java 19 Apr 2002 18:40:36
-0000 1.67
+++ src/main/org/exolab/castor/builder/MemberFactory.java 27 Apr 2002 17:35:00
+-0000
@@ -552,13 +552,17 @@
if (groupClass == null) {
// Java class name is group name or.
className = JavaNaming.toJavaClassName(groupName);
+ if( group.getSchema() != null ) {
+ className = SourceGenerator.getQualifiedClassName(
+ group.getSchema().getTargetNamespace(),className);
+ }
xsType = new XSClass(new JClass(className));
}
else {
className = groupClass.getName();
}
- String fieldName = JavaNaming.toJavaMemberName(className);
+ String fieldName = JavaNaming.toJavaMemberName(groupName);
if (fieldName.charAt(0) != '_')
fieldName = "_"+fieldName;
Index: src/main/org/exolab/castor/builder/SourceFactory.java
===================================================================
RCS file: /cvs/castor/castor/src/main/org/exolab/castor/builder/SourceFactory.java,v
retrieving revision 1.91
diff -u -r1.91 SourceFactory.java
--- src/main/org/exolab/castor/builder/SourceFactory.java 8 Apr 2002 22:28:51
-0000 1.91
+++ src/main/org/exolab/castor/builder/SourceFactory.java 27 Apr 2002 17:35:01
+-0000
@@ -1586,6 +1586,7 @@
if (tmp.getContentModelGroup() != null) {
if (tmp.getName() != null) {
modelgroup.setName(tmp.getName());
+ modelgroup.setSchema(tmp.getSchema());
//create the field info for the element
//that is referring to a model group in order
//not to loose the Particle information
Index: src/main/org/exolab/castor/xml/Marshaller.java
===================================================================
RCS file: /cvs/castor/castor/src/main/org/exolab/castor/xml/Marshaller.java,v
retrieving revision 1.105
diff -u -r1.105 Marshaller.java
--- src/main/org/exolab/castor/xml/Marshaller.java 23 Apr 2002 20:25:43 -0000
1.105
+++ src/main/org/exolab/castor/xml/Marshaller.java 27 Apr 2002 17:35:01 -0000
@@ -81,8 +81,10 @@
//import java.io.Serializable;
import java.io.Writer;
import java.lang.reflect.Array;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
/**
@@ -214,6 +216,11 @@
private MarshalListener _marshalListener = null;
/**
+ * Flag whether to marshall namespace declarations.
+ **/
+ private boolean _marshalNamespace = true;
+
+ /**
* The namespace stack
**/
private Namespaces _namespaces = null;
@@ -1090,27 +1102,31 @@
//------------------/
//-- namespace management
+ String nsPrefix = null;
+ String nsURI = null;
- String nsPrefix = descriptor.getNameSpacePrefix();
- if (nsPrefix == null) nsPrefix = classDesc.getNameSpacePrefix();
-
- String nsURI = descriptor.getNameSpaceURI();
- if (nsURI == null) nsURI = classDesc.getNameSpaceURI();
-
- if ((nsURI == null) && (nsPrefix != null)) {
- nsURI = _namespaces.getNamespaceURI(nsPrefix);
+ if (_marshalNamespace) {
+ nsPrefix = descriptor.getNameSpacePrefix();
+ if (nsPrefix == null) nsPrefix = classDesc.getNameSpacePrefix();
+
+ nsURI = descriptor.getNameSpaceURI();
+ if (nsURI == null) nsURI = classDesc.getNameSpaceURI();
+
+ if ((nsURI == null) && (nsPrefix != null)) {
+ nsURI = _namespaces.getNamespaceURI(nsPrefix);
+ }
+ else if ((nsPrefix == null) && (nsURI != null)) {
+ nsPrefix = (String) _namespaces.getNamespacePrefix(nsURI);
+ }
+ //-- declare namespace at this element scope?
+ if (nsURI != null) {
+ if ((nsPrefix == null) && (!nsURI.equals(_defaultNamespace)))
+ {
+ nsPrefix = DEFAULT_PREFIX + (++NAMESPACE_COUNTER);
+ }
+ declareNamespace(nsPrefix, nsURI);
+ }
}
- else if ((nsPrefix == null) && (nsURI != null)) {
- nsPrefix = (String) _namespaces.getNamespacePrefix(nsURI);
- }
- //-- declare namespace at this element scope?
- if (nsURI != null) {
- if ((nsPrefix == null) && (!nsURI.equals(_defaultNamespace)))
- {
- nsPrefix = DEFAULT_PREFIX + (++NAMESPACE_COUNTER);
- }
- declareNamespace(nsPrefix, nsURI);
- }
//check if the value is a QName that needs to
//be resolved ({URI}value -> ns:value)
@@ -1122,7 +1138,7 @@
//-- declare all necesssary namespaces
- _namespaces.declareAsAttributes(atts, true);
+ _namespaces.declareAsAttributes(atts, true);
String qName = null;
if (nsPrefix != null) {
int len = nsPrefix.length();
@@ -1235,6 +1251,15 @@
marshal(item, elemDescriptor, handler);
}
}
else marshal(obj, elemDescriptor, handler);
}
@@ -1339,6 +1364,16 @@
public void setDebug(boolean debug) {
this._debug = debug;
} //-- setDebug
+
+ /**
+ * Sets the flag to turn on and off marshalling of namespace declarations
+ * @param declarations the flag indicating whether or not to marshal
+ * declarations
+ **/
+ public void setMarshalNamespace(boolean declarations) {
+ this._marshalNamespace = declarations;
+ } //-- setDebug
+
/**
* Sets the PrintWriter used for logging
Index: src/main/org/exolab/castor/xml/schema/Group.java
===================================================================
RCS file: /cvs/castor/castor/src/main/org/exolab/castor/xml/schema/Group.java,v
retrieving revision 1.18
diff -u -r1.18 Group.java
--- src/main/org/exolab/castor/xml/schema/Group.java 3 Apr 2002 07:19:51 -0000
1.18
+++ src/main/org/exolab/castor/xml/schema/Group.java 27 Apr 2002 17:35:01 -0000
@@ -474,4 +474,12 @@
_parent = parent;
} //-- setParent
-} //-- Group
\ No newline at end of file
+ /**
+ * Returns the schema that contains this modelGroup definition
+ */
+ public Schema getSchema() {
+ return null;
+ }
+
+} //-- Group
+
Index: src/main/org/exolab/castor/xml/schema/ModelGroup.java
===================================================================
RCS file: /cvs/castor/castor/src/main/org/exolab/castor/xml/schema/ModelGroup.java,v
retrieving revision 1.10
diff -u -r1.10 ModelGroup.java
--- src/main/org/exolab/castor/xml/schema/ModelGroup.java 17 Oct 2001 19:06:28
-0000 1.10
+++ src/main/org/exolab/castor/xml/schema/ModelGroup.java 27 Apr 2002 17:35:01
+-0000
@@ -201,4 +201,12 @@
return _schema;
}
-} //-- Group
\ No newline at end of file
+ /**
+ * Sets the schema that contains this modelGroup definition
+ */
+ public void setSchema(Schema schema) {
+ _schema = schema;
+ }
+
+} //-- Group
+