Author: ajith
Date: Mon Mar 5 13:13:09 2007
New Revision: 514868
URL: http://svn.apache.org/viewvc?view=rev&rev=514868
Log:
1. Adding the change proposed in WSCOMMONS-171
(https://issues.apache.org/jira/browse/WSCOMMONS-171)
I. Added the new set of classes to handle extension
II. Modified the schemaBuilder and schemaCollection to take an extra
parameter, the extension registry
Note - the serializer changes are not complete but the existing tests cases run
just fine. Would be adding more test cases as soon as the serializer change is
complete
Added:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionDeserializer.java
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionSerializer.java
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionDeserializer.java
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionRegistry.java
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionSerializer.java
Modified:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaCollection.java
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaObject.java
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaSerializer.java
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/constants/Constants.java
Modified:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java?view=diff&rev=514868&r1=514867&r2=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java
(original)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java
Mon Mar 5 13:13:09 2007
@@ -17,8 +17,6 @@
package org.apache.ws.commons.schema;
-import java.util.HashMap;
-import java.util.Map;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -31,6 +29,7 @@
import org.apache.ws.commons.schema.utils.NodeNamespaceContext;
import org.apache.ws.commons.schema.utils.TargetNamespaceValidator;
import org.apache.ws.commons.schema.utils.XDOMUtil;
+import org.apache.ws.commons.schema.extensions.ExtensionRegistry;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -47,12 +46,31 @@
DocumentBuilderFactory docFac;
/**
+ * The extension registry to be used while building the
+ * schema model
+ */
+ private ExtensionRegistry extReg = null;
+
+ public ExtensionRegistry getExtReg() {
+ return extReg;
+ }
+
+ public void setExtReg(ExtensionRegistry extReg) {
+ this.extReg = extReg;
+ }
+
+ /**
* Schema builder constructor
* @param collection
*/
SchemaBuilder(XmlSchemaCollection collection, TargetNamespaceValidator
validator) {
this.collection = collection;
this.validator = validator;
+
+ if (collection.getExtReg()!=null){
+ this.extReg = collection.getExtReg();
+ }
+
schema = new XmlSchema(collection);
}
@@ -180,7 +198,7 @@
schema.notations.collection.put(notation.name, notation);
schema.items.add(notation);
} else if (el.getLocalName().equals("annotation")) {
- XmlSchemaAnnotation annotation = handleAnnotation(el);
+ XmlSchemaAnnotation annotation = handleAnnotation(el);
schema.setAnnotation(annotation);
}
}
@@ -352,8 +370,8 @@
XmlSchema.SCHEMA_NS, "simpleType");
if (restrictionEl.hasAttribute("base")) {
- NamespaceContext ctx = new NodeNamespaceContext(restrictionEl);
- restriction.baseTypeName =
getRefQName(restrictionEl.getAttribute("base"), ctx);
+ NamespaceContext ctx = new NodeNamespaceContext(restrictionEl);
+ restriction.baseTypeName =
getRefQName(restrictionEl.getAttribute("base"), ctx);
} else if (inlineSimpleType != null) {
restriction.baseType = handleSimpleType(schema,
inlineSimpleType, schemaEl);
@@ -493,32 +511,32 @@
}
private QName getRefQName(String pName, NamespaceContext pContext) {
- final int offset = pName.indexOf(':');
- String uri;
- final String localName;
- final String prefix;
- if (offset == -1) {
- uri = pContext.getNamespaceURI(Constants.DEFAULT_NS_PREFIX);
- if (Constants.NULL_NS_URI.equals(uri)) {
- return new QName(schema.logicalTargetNamespace, pName);
- }
- localName = pName;
- prefix = Constants.DEFAULT_NS_PREFIX;
- } else {
- prefix = pName.substring(0, offset);
- uri = pContext.getNamespaceURI(prefix);
+ final int offset = pName.indexOf(':');
+ String uri;
+ final String localName;
+ final String prefix;
+ if (offset == -1) {
+ uri = pContext.getNamespaceURI(Constants.DEFAULT_NS_PREFIX);
+ if (Constants.NULL_NS_URI.equals(uri)) {
+ return new QName(schema.logicalTargetNamespace, pName);
+ }
+ localName = pName;
+ prefix = Constants.DEFAULT_NS_PREFIX;
+ } else {
+ prefix = pName.substring(0, offset);
+ uri = pContext.getNamespaceURI(prefix);
if (uri == null || Constants.NULL_NS_URI.equals(uri)) {
if(schema.parent != null &&
schema.parent.getNamespaceContext() != null) {
uri =
schema.parent.getNamespaceContext().getNamespaceURI(prefix);
}
}
- if (uri == null || Constants.NULL_NS_URI.equals(uri)) {
+ if (uri == null || Constants.NULL_NS_URI.equals(uri)) {
throw new IllegalStateException("The prefix " + prefix + " is
not bound.");
- }
- localName = pName.substring(offset+1);
- }
- return new QName(uri, localName, prefix);
+ }
+ localName = pName.substring(offset+1);
+ }
+ return new QName(uri, localName, prefix);
}
/**
@@ -687,10 +705,10 @@
if (el.getLocalName().equals("restriction")) {
complexContent.content =
handleComplexContentRestriction(schema, el,
- schemaEl);
+ schemaEl);
} else if (el.getLocalName().equals("extension")) {
complexContent.content = handleComplexContentExtension(schema,
el,
- schemaEl);
+ schemaEl);
} else if (el.getLocalName().equals("annotation")) {
complexContent.setAnnotation(handleAnnotation(el));
}
@@ -1158,6 +1176,7 @@
return new QName(uri, pLocalName);
}
+
private XmlSchemaAttribute handleAttribute(XmlSchema schema,
Element attrEl, Element
schemaEl) {
//todo: need to implement different rule of attribute such as
@@ -1172,7 +1191,7 @@
attr.name = name;
}
-
+
boolean isQualified =
schema.getAttributeFormDefault().getValue().equals(XmlSchemaForm.QUALIFIED);
if (attr.name != null) {
final String name = attr.name;
@@ -1800,12 +1819,12 @@
if (schema != null) {
return schema;
}
- try {
+ try {
return collection.read(source, null, validator);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
+ }
/**
* Resolve the schemas
@@ -1823,36 +1842,55 @@
/**
* A generic method to process the extra attributes and the the extra
* elements present within the schema.
- * What it does right now is to attach extra attributes to a map
- * having QName/value pairs and store the map in the metadata section
- * of the schema object
+ * What are considered extensions are child elements with non schema
namespace
+ * and child attributes with any namespace
* @param schemaObject
- * @param elt
+ * @param parentElement
*/
- private void processExtensibilityComponents(XmlSchemaObject
schemaObject,Element elt){
- Map attribMap = new HashMap();
- NamedNodeMap attributes = elt.getAttributes();
- for (int i=0 ;i < attributes.getLength();i++){
- Attr attribute = (Attr)attributes.item(i);
-
- String namespaceURI = attribute.getNamespaceURI();
- String name = attribute.getName();
-
- if (namespaceURI!= null &&
- !"".equals(namespaceURI) && //ignore unqualified
attributes
- !name.startsWith(Constants.XMLNS_ATTRIBUTE) && //ignore
namespaces
- !Constants.URI_2001_SCHEMA_XSD.equals(namespaceURI)){
- attribMap.put(new QName(namespaceURI,name),
- attribute.getValue());
+ private void processExtensibilityComponents(XmlSchemaObject
schemaObject,Element parentElement){
+
+ if (extReg!=null){
+ //process attributes
+ NamedNodeMap attributes = parentElement.getAttributes();
+ for (int i=0 ;i < attributes.getLength();i++){
+ Attr attribute = (Attr)attributes.item(i);
+
+ String namespaceURI = attribute.getNamespaceURI();
+ String name = attribute.getName();
+
+ if (namespaceURI!= null &&
+ !"".equals(namespaceURI) && //ignore unqualified
attributes
+ !name.startsWith(Constants.XMLNS_ATTRIBUTE) &&
//ignore namespaces
+ !Constants.URI_2001_SCHEMA_XSD.equals(namespaceURI))
+ //does not belong to the schema namespace by any chance!
+ {
+ QName qName = new QName(namespaceURI,name);
+ extReg.deserializeExtension(schemaObject,qName,attribute);
+
+
+ }
}
- }
- if (!attribMap.isEmpty()){
- schemaObject.addMetaInfo(
- Constants.MetaDataConstants.EXTERNAL_ATTRIBUTES,
- attribMap
- );
+ //process elements
+ NodeList allChildren = parentElement.getChildNodes();
+ for (int i=0 ;i < allChildren.getLength();i++){
+ if (allChildren.item(i).getNodeType()==Node.ELEMENT_NODE){
+
+ Element extElement = (Element)allChildren.item(i);
+
+ String namespaceURI = extElement.getNamespaceURI();
+ String name = extElement.getLocalName();
+
+ if (namespaceURI!= null &&
+
!Constants.URI_2001_SCHEMA_XSD.equals(namespaceURI))
+ //does not belong to the schema namespace
+ {
+ QName qName = new QName(namespaceURI,name);
+
extReg.deserializeExtension(schemaObject,qName,extElement);
+ }
+ }
+ }
}
}
Modified:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaCollection.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaCollection.java?view=diff&rev=514868&r1=514867&r2=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaCollection.java
(original)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaCollection.java
Mon Mar 5 13:13:09 2007
@@ -42,6 +42,7 @@
import org.apache.ws.commons.schema.resolver.URIResolver;
import org.apache.ws.commons.schema.utils.TargetNamespaceValidator;
import org.apache.ws.commons.schema.utils.NamespacePrefixList;
+import org.apache.ws.commons.schema.extensions.ExtensionRegistry;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -53,6 +54,19 @@
*
*/
public final class XmlSchemaCollection {
+
+ // the default extension registry
+ private ExtensionRegistry extReg = new ExtensionRegistry();
+
+ public ExtensionRegistry getExtReg() {
+ return extReg;
+ }
+
+ public void setExtReg(ExtensionRegistry extReg) {
+ this.extReg = extReg;
+ }
+
+
static class SchemaKey {
private final String namespace;
private final String systemId;
Modified:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaObject.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaObject.java?view=diff&rev=514868&r1=514867&r2=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaObject.java
(original)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaObject.java
Mon Mar 5 13:13:09 2007
@@ -41,6 +41,14 @@
}
/**
+ * Directly set the meta info map into the schema element
+ * @param metaInfoMap
+ */
+ public void setMetaInfoMap(Map metaInfoMap) {
+ this.metaInfoMap = metaInfoMap;
+ }
+
+ /**
* Add a value to the meta info map
* will be initialized if not used
* previously
Modified:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaSerializer.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaSerializer.java?view=diff&rev=514868&r1=514867&r2=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaSerializer.java
(original)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/XmlSchemaSerializer.java
Mon Mar 5 13:13:09 2007
@@ -18,6 +18,7 @@
import org.apache.ws.commons.schema.constants.Constants;
import org.apache.ws.commons.schema.utils.NamespacePrefixList;
+import org.apache.ws.commons.schema.extensions.ExtensionRegistry;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -36,6 +37,17 @@
import java.util.Iterator;
import java.util.Map;
public class XmlSchemaSerializer {
+
+ private ExtensionRegistry extReg;
+
+ public ExtensionRegistry getExtReg() {
+ return extReg;
+ }
+
+ public void setExtReg(ExtensionRegistry extReg) {
+ this.extReg = extReg;
+ }
+
private Hashtable schema_ns;
static String xsdPrefix = "xs";
@@ -108,10 +120,10 @@
}
String prefix = null;
if(schemaObj.getNamespaceContext() != null) {
- prefix =
schemaObj.getNamespaceContext().getPrefix(schemaObj.syntacticalTargetNamespace);
+ prefix =
schemaObj.getNamespaceContext().getPrefix(schemaObj.syntacticalTargetNamespace);
}
if(prefix == null && schemaObj.parent != null &&
schemaObj.parent.getNamespaceContext() != null) {
- prefix =
schemaObj.parent.getNamespaceContext().getPrefix(schemaObj.syntacticalTargetNamespace);
+ prefix =
schemaObj.parent.getNamespaceContext().getPrefix(schemaObj.syntacticalTargetNamespace);
}
if(prefix == null) {
prefix = "";
@@ -269,7 +281,7 @@
NamespacePrefixList ctx = schemaObj.getNamespaceContext();
schemaObj.schema_ns_prefix = xsdPrefix = ctx.getPrefix(xsdNamespace);
if(xsdPrefix == null) {
- schemaObj.schema_ns_prefix = xsdPrefix = "";
+ schemaObj.schema_ns_prefix = xsdPrefix = "";
}
String[] prefixes = ctx.getDeclaredPrefixes();
for (int i = 0; i < prefixes.length; i++) {
@@ -608,7 +620,7 @@
}
}
if (elementObj.isNillable) {
- serializedEl.setAttribute("nillable", "true");
+ serializedEl.setAttribute("nillable", "true");
}
return serializedEl;
@@ -2575,4 +2587,23 @@
super(msg);
}
}
+
+
+ /**
+ * A generic method to process the extra attributes and the the extra
+ * elements present within the schema.
+ * What are considered extensions are child elements with non schema
namespace
+ * and child attributes with any namespace
+ * @param schemaObject
+ * @param parentElement
+ */
+ private void processExtensibilityComponents(XmlSchemaObject
schemaObject,Element parentElement){
+
+ if (extReg!=null){
+ // need to call the extensions registry here
+
+ }
+
+ }
+
}
Modified:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/constants/Constants.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/constants/Constants.java?view=diff&rev=514868&r1=514867&r2=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/constants/Constants.java
(original)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/constants/Constants.java
Mon Mar 5 13:13:09 2007
@@ -122,6 +122,7 @@
*/
public static class MetaDataConstants{
public static final String EXTERNAL_ATTRIBUTES = "EXTERNAL_ATTRIBUTES";
+ public static final String EXTERNAL_ELEMENTS = "EXTERNAL_ELEMENTS";
}
public static final String XMLNS_ATTRIBUTE_NS_URI =
Added:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionDeserializer.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionDeserializer.java?view=auto&rev=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionDeserializer.java
(added)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionDeserializer.java
Mon Mar 5 13:13:09 2007
@@ -0,0 +1,73 @@
+package org.apache.ws.commons.schema.extensions;
+
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.apache.ws.commons.schema.constants.Constants;
+import org.w3c.dom.Node;
+
+import javax.xml.namespace.QName;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * Default deserializer. The action taken when there is nothing specific
+ * to be done would be to attach the raw element object as it is to the
+ * meta information map for an element or the raw attribute object
+ *
+ */
+public class DefaultExtensionDeserializer implements ExtensionDeserializer {
+
+ /**
+ * deserialize the given element
+ *
+ * @param schemaObject - Parent schema element
+ * @param name - the QName of the element/attribute to be
deserialized.
+ * in the case where a deserializer is used to handle
multiple elements/attributes
+ * this may be useful to determine the correct
deserialization
+ * @param node - the raw DOM Node read from the source. This will be the
+ * extension element itself if for an element or the extension attribute
object if
+ * it is an attribute
+ */
+ public void deserialize(XmlSchemaObject schemaObject, QName name, Node
node) {
+
+ // we just attach the raw node either to the meta map of
+ // elements or the attributes
+ Map metaInfoMap = new HashMap();
+
+
+
+ if (node.getNodeType()==Node.ATTRIBUTE_NODE){
+
+ Map attribMap;
+ if
(metaInfoMap.containsKey(Constants.MetaDataConstants.EXTERNAL_ATTRIBUTES)){
+ attribMap =
(Map)metaInfoMap.get(Constants.MetaDataConstants.EXTERNAL_ATTRIBUTES);
+ }else{
+ attribMap = new HashMap();
+
metaInfoMap.put(Constants.MetaDataConstants.EXTERNAL_ATTRIBUTES,attribMap);
+ }
+ attribMap.put(name,node);
+
+ }else if (node.getNodeType()==Node.ELEMENT_NODE){
+ Map elementMap;
+ if
(metaInfoMap.containsKey(Constants.MetaDataConstants.EXTERNAL_ELEMENTS)){
+ elementMap =
(Map)metaInfoMap.get(Constants.MetaDataConstants.EXTERNAL_ELEMENTS);
+ }else{
+ elementMap = new HashMap();
+
metaInfoMap.put(Constants.MetaDataConstants.EXTERNAL_ELEMENTS,elementMap);
+ }
+ elementMap.put(name,node);
+ }
+
+ //subsequent processing takes place only if this map is not empty
+ if (!metaInfoMap.isEmpty()){
+ Map metaInfoMapFromSchemaElement = schemaObject.getMetaInfoMap();
+ if (metaInfoMapFromSchemaElement==null){
+ schemaObject.setMetaInfoMap(metaInfoMap);
+ }else{
+ metaInfoMapFromSchemaElement.putAll(metaInfoMap);
+ }
+
+ }
+
+
+ }
+}
Added:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionSerializer.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionSerializer.java?view=auto&rev=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionSerializer.java
(added)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/DefaultExtensionSerializer.java
Mon Mar 5 13:13:09 2007
@@ -0,0 +1,55 @@
+package org.apache.ws.commons.schema.extensions;
+
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.apache.ws.commons.schema.constants.Constants;
+import org.w3c.dom.Node;
+import org.w3c.dom.Document;
+
+import java.util.Map;
+import java.util.Iterator;
+
+/**
+
+ */
+public class DefaultExtensionSerializer implements ExtensionSerializer{
+
+ /**
+ * serialize the given element
+ *
+ * @param schemaObject - Parent schema element
+ * @param classOfType - the class of the object to be serialized
+ * @param node - The DOM Node that is the parent of the serialzation
+ */
+ public void serialize(XmlSchemaObject schemaObject, Class classOfType,
Node node) {
+ // serialization is somewhat tricky in most cases hence this default
serializer will
+ // do the exact reverse of the deserializer - look for any plain 'as
is' items
+ // and attach them to the parent node.
+ // we just attach the raw node either to the meta map of
+ // elements or the attributes
+ Map metaInfoMap = schemaObject.getMetaInfoMap();
+ Document parentDoc = node.getOwnerDocument();
+ if
(metaInfoMap.containsKey(Constants.MetaDataConstants.EXTERNAL_ATTRIBUTES)){
+ Map attribMap =
(Map)metaInfoMap.get(Constants.MetaDataConstants.EXTERNAL_ATTRIBUTES);
+ for(Iterator it = attribMap.keySet().iterator();it.hasNext();){
+ Object key = it.next();
+ Object value = attribMap.get(key);
+ // this comparison may not be the most ideal but lets keep it
for now
+ if (value.getClass().equals(classOfType)){
+// Attr newAtt =
+ }
+
+ node.appendChild(
+ parentDoc.importNode((Node)it.next(),true));
+ }
+ }
+
+ if
(metaInfoMap.containsKey(Constants.MetaDataConstants.EXTERNAL_ELEMENTS)){
+ Map elementMap =
(Map)metaInfoMap.get(Constants.MetaDataConstants.EXTERNAL_ELEMENTS);
+ for(Iterator it = elementMap.values().iterator();it.hasNext();){
+ node.appendChild(
+ parentDoc.importNode((Node)it.next(),true));
+ }
+ }
+
+ }
+}
Added:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionDeserializer.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionDeserializer.java?view=auto&rev=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionDeserializer.java
(added)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionDeserializer.java
Mon Mar 5 13:13:09 2007
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Portions Copyright 2006 International Business Machines Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.commons.schema.extensions;
+
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.w3c.dom.Node;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Interface for the extension deserializer. The purpose of an instance
+ * of this is to deserialize the relevant attribute/element and perhaps
generate
+ * a desired custom object. This custom object can be stored in the metadata
map
+ * of the parent schema object. When to invoke a given deserializer is a
decision
+ * taken by the extension registry
+ */
+public interface ExtensionDeserializer {
+
+ /**
+ * deserialize the given element
+ * @param schemaObject - Parent schema element
+ * @param name - the QName of the element/attribute to be deserialized.
+ * in the case where a deserializer is used to handle multiple
elements/attributes
+ * this may be useful to determine the correct deserialization
+ * @param domNode - the raw DOM Node read from the source. This will be the
+ * extension element itself if for an element or the extension attribute
object if
+ * it is an attribute
+ *
+ */
+ public void deserialize(XmlSchemaObject schemaObject,
+ QName name,
+ Node domNode);
+
+}
Added:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionRegistry.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionRegistry.java?view=auto&rev=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionRegistry.java
(added)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionRegistry.java
Mon Mar 5 13:13:09 2007
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Portions Copyright 2006 International Business Machines Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.commons.schema.extensions;
+
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.w3c.dom.Node;
+
+import javax.xml.namespace.QName;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * The task of the extension serializer is to delegate the serilization of
+ * the extensions. The extension serializers/deserializers are retained in
seperate
+ * maps and there are also two seperate references to default serializers and
deserializers
+ * which would jump into action when there are no specifically attached
+ * serializers/deserializers
+ */
+public class ExtensionRegistry {
+
+ /**
+ * Maps for the storage of extension serializers /deserializers
+ */
+ private Map extensionSerializers = new HashMap();
+ private Map extensionDeserializers = new HashMap();
+
+ /**
+ * Default serializer and serializer
+ */
+ private ExtensionSerializer defaultExtensionSerializer =new
DefaultExtensionSerializer();
+ private ExtensionDeserializer defaultExtensionDeserializer = new
DefaultExtensionDeserializer();
+
+
+ public ExtensionSerializer getDefaultExtensionSerializer() {
+ return defaultExtensionSerializer;
+ }
+
+ public void setDefaultExtensionSerializer(ExtensionSerializer
defaultExtensionSerializer) {
+ this.defaultExtensionSerializer = defaultExtensionSerializer;
+ }
+
+ public ExtensionDeserializer getDefaultExtensionDeserializer() {
+ return defaultExtensionDeserializer;
+ }
+
+ public void setDefaultExtensionDeserializer(ExtensionDeserializer
defaultExtensionDeserializer) {
+ this.defaultExtensionDeserializer = defaultExtensionDeserializer;
+ }
+
+ /**
+ * Register a deserializer with a QName
+ * @param name - the QName of the element/attribute
+ * @param deserializer - an instance of the deserializer
+ */
+ public void registerDeserializer(QName name,ExtensionDeserializer
deserializer){
+ extensionSerializers.put(name,deserializer);
+ }
+ /**
+ * Register a serializer with a Class
+ * @param classOfType - the class of the object that would be serialized
+ * @param serializer - an instance of the deserializer
+ */
+ public void registerserializer(Class classOfType,ExtensionSerializer
serializer){
+ extensionDeserializers.put(classOfType,serializer);
+ }
+
+
+ /**
+ * remove the registration for a serializer with a QName
+ * @param name - the QName of the element/attribute the
+ * serializer is associated with
+ */
+ public void unregisterSerializer(QName name){
+ extensionSerializers.remove(name);
+ }
+
+ /**
+ * remove the registration for a deserializer with a QName
+ * @param classOfType - the the
+ * deserializer is associated with
+ */
+ public void unregisterDeserializer(Class classOfType){
+ extensionDeserializers.remove(classOfType);
+ }
+
+
+ /**
+ * Serialize a given extension element
+ * @param parentSchemaObject - the parent schema object. This is what
+ * would contain the extension object, probably in side its meta
information
+ * map
+ * @param classOfType - The class of type to be serialized
+ * @param node - the parent DOM Node that will ultimately be serialized.
The XMLSchema
+ * serialization mechanism is to create a DOM tree first and serialize it
+ */
+ public void serializeExtension(XmlSchemaObject parentSchemaObject,
+ Class classOfType,
+ Node node){
+ Object serializerObject = extensionSerializers.get(classOfType);
+ if (serializerObject!=null){
+ //perform the serialization
+ ExtensionSerializer ser = (ExtensionSerializer)serializerObject;
+ ser.serialize(parentSchemaObject,classOfType,node);
+ }else if (defaultExtensionSerializer!=null) {
+
defaultExtensionSerializer.serialize(parentSchemaObject,classOfType,node);
+ }
+
+
+ }
+
+
+ /**
+ * Deserialize a given extension element
+ * @param parentSchemaObject - the parent schema object. This is
anticipated
+ * to be created already and the relevant object would contain the
extension
+ * object, probably in side its meta information map
+ * @param name - The qname of the element/attribute to be deserialized.
This will be used to
+ * search for the extension as well as by the deserializer if a single
deserializer is
+ * registered against a number of qnames
+ * @param rawNode - the raw DOM Node read from the source. This will be
the
+ * extension element itself if for an element or extension attribute itself
+ * in case of an attribute
+ */
+ public void deserializeExtension(XmlSchemaObject parentSchemaObject,
+ QName name,
+ Node rawNode){
+ Object deserializerObject = extensionDeserializers.get(name);
+ if (deserializerObject !=null){
+ //perform the serialization
+ ExtensionDeserializer deser =
(ExtensionDeserializer)deserializerObject;
+ deser.deserialize(parentSchemaObject,name,rawNode);
+ } else if (defaultExtensionDeserializer!=null){
+
defaultExtensionDeserializer.deserialize(parentSchemaObject,name,rawNode);
+ }
+ }
+
+}
Added:
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionSerializer.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionSerializer.java?view=auto&rev=514868
==============================================================================
---
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionSerializer.java
(added)
+++
webservices/commons/trunk/modules/XmlSchema/src/main/java/org/apache/ws/commons/schema/extensions/ExtensionSerializer.java
Mon Mar 5 13:13:09 2007
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ * Portions Copyright 2006 International Business Machines Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.commons.schema.extensions;
+
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.w3c.dom.Node;
+
+
+/**
+ * Interface for the extension serializer. The purpose of an instance
+ * of this is to serialize the relevant custom object
+ * and generate attribute/elementa desired . This custom object
+ * may be stored in the metadata map
+ * of the parent schema object. When to invoke a given serializer is a decision
+ * taken by the extension registry
+ */
+public interface ExtensionSerializer {
+
+ /**
+ * serialize the given element
+ * @param schemaObject - Parent schema object.contains the extension
+ * to be serialized
+ * @param classOfType - The class of type to be serialized
+ * @param domNode - the parent DOM Node that will ultimately be
serialized. The XMLSchema
+ * serialization mechanism is to create a DOM tree first and serialize it
+ */
+ public void serialize(XmlSchemaObject schemaObject,
+ Class classOfType,
+ Node domNode);
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]