scheu 2002/06/04 13:35:08
Modified: java/src/org/apache/axis Constants.java
java/src/org/apache/axis/encoding
DefaultTypeMappingImpl.java
java/src/org/apache/axis/encoding/ser BeanDeserializer.java
java/src/org/apache/axis/wsdl/symbolTable ElementDecl.java
SchemaUtils.java SymbolTable.java Utils.java
java/test/wsdl/extensibility server-deploy.wsdd
Log:
The following changes are made to improve
the extensibility processing of the xsd:any element.
1) The xsd:any element was being mapped to the xsd:anytype.
I don't think that this duel use is appropriate.
Introduced a new XSD_ANY type that maps to java.lang.Object
and automatically uses the ElementSerializer/ElementDeserializer.
a) Got rid of the special typemapping registered in
test/wsdl/extensibility/deploy.wsdd. No longer needed.
2) Changed SchemaUtils to use the new XSD_ANY type when an
xsd:any is identified. Also sets a flag on the ElementDecl
to indicate that this ElementDecl is a result of xsd:any.
3) Changed the symbol table to put an XSD_ANY in the symbol
table when an xsd:any is encountered.
4) If an XSD_ANY is referenced, then all complex types are
generated and deployed (just like the XSD_ANYTYPE case).
Revision Changes Path
1.62 +1 -0 xml-axis/java/src/org/apache/axis/Constants.java
Index: Constants.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/Constants.java,v
retrieving revision 1.61
retrieving revision 1.62
diff -u -r1.61 -r1.62
--- Constants.java 31 May 2002 19:08:06 -0000 1.61
+++ Constants.java 4 Jun 2002 20:35:08 -0000 1.62
@@ -391,6 +391,7 @@
public static final QName XSD_BASE64 = new QName(URI_DEFAULT_SCHEMA_XSD,
"base64Binary");
public static final QName XSD_HEXBIN = new QName(URI_DEFAULT_SCHEMA_XSD,
"hexBinary");
public static final QName XSD_ANYTYPE = new QName(URI_DEFAULT_SCHEMA_XSD,
"anyType");
+ public static final QName XSD_ANY = new QName(URI_DEFAULT_SCHEMA_XSD, "any");
public static final QName XSD_QNAME = new QName(URI_DEFAULT_SCHEMA_XSD,
"QName");
public static final QName XSD_DATE = new QName(URI_DEFAULT_SCHEMA_XSD,
"dateTime");
public static final QName XSD_DATE1 = new QName(URI_DEFAULT_SCHEMA_XSD, "date");
1.29 +6 -0
xml-axis/java/src/org/apache/axis/encoding/DefaultTypeMappingImpl.java
Index: DefaultTypeMappingImpl.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/DefaultTypeMappingImpl.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- DefaultTypeMappingImpl.java 31 May 2002 19:08:07 -0000 1.28
+++ DefaultTypeMappingImpl.java 4 Jun 2002 20:35:08 -0000 1.29
@@ -220,6 +220,12 @@
myRegister(Constants.XSD_ANYTYPE, java.lang.Object.class,
null, null, false);
+ // This is the special type for the xsd:any element used for
+ // extensibility.
+ myRegister(Constants.XSD_ANY, java.lang.Object.class,
+ new ElementSerializerFactory(),
+ new ElementDeserializerFactory(), false);
+
// The xsd primitive for date has changed through the various
// namespace versions.
// XSD_DATE is the current one, which is why it is
1.30 +1 -1
xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java
Index: BeanDeserializer.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- BeanDeserializer.java 25 May 2002 03:46:46 -0000 1.29
+++ BeanDeserializer.java 4 Jun 2002 20:35:08 -0000 1.30
@@ -255,7 +255,7 @@
dSer = context.getDeserializerForType(elemQName);
}
if (dSer == null) {
- qn = Constants.XSD_ANYTYPE;
+ qn = Constants.XSD_ANY;
// make sure that the Element Deserializer deserializes the
current element and not the child
messageContext.setProperty(ElementDeserializer.DESERIALIZE_CURRENT_ELEMENT,
Boolean.TRUE);
} else {
1.2 +12 -0
xml-axis/java/src/org/apache/axis/wsdl/symbolTable/ElementDecl.java
Index: ElementDecl.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/ElementDecl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ElementDecl.java 9 May 2002 13:14:27 -0000 1.1
+++ ElementDecl.java 4 Jun 2002 20:35:08 -0000 1.2
@@ -74,6 +74,10 @@
// causes nil=true to be passed over the wire.
private boolean minOccursIs0=false;
+ // Indicate if the ElementDecl represents
+ // an xsd:any element
+ private boolean anyElement = false;
+
public ElementDecl() {
}
@@ -104,5 +108,13 @@
public void setMinOccursIs0(boolean minOccursIs0) {
this.minOccursIs0 = minOccursIs0;
+ }
+
+ public boolean getAnyElement() {
+ return anyElement;
+ }
+
+ public void setAnyElement(boolean anyElement) {
+ this.anyElement = anyElement;
}
}
1.6 +10 -3
xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SchemaUtils.java
Index: SchemaUtils.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SchemaUtils.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SchemaUtils.java 30 May 2002 23:46:02 -0000 1.5
+++ SchemaUtils.java 4 Jun 2002 20:35:08 -0000 1.6
@@ -258,9 +258,16 @@
} else if (subNodeKind.getLocalPart().equals("group")) {
v.addAll(processGroupNode(children.item(j), symbolTable));
} else if (subNodeKind.getLocalPart().equals("any")) {
- TypeEntry type = new
DefinedType(Utils.getWSDLQName(Constants.XSD_ANYTYPE), sequenceNode);
- type.setName("java.lang.Object");
- ElementDecl elem = new ElementDecl(type, Utils.getAxisQName(new
QName("","any")));
+ // Represent this as an element named any of type any type.
+ // This will cause it to be serialized with the element
+ // serializer.
+ TypeEntry type =
+ symbolTable.getType(
+ Utils.getWSDLQName(Constants.XSD_ANY));
+ ElementDecl elem =
+ new ElementDecl(type,
+ Utils.getAxisQName(new QName("","any")));
+ elem.setAnyElement(true);
v.add(elem);
} else if (subNodeKind.getLocalPart().equals("element")) {
ElementDecl elem =
1.6 +8 -0
xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SymbolTable.java
Index: SymbolTable.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SymbolTable.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SymbolTable.java 17 May 2002 19:09:33 -0000 1.5
+++ SymbolTable.java 4 Jun 2002 20:35:08 -0000 1.6
@@ -655,6 +655,14 @@
}
}
}
+ else if (isXSD && localPart.equals("any")) {
+ // Map xsd:any element to any xsd:any so that
+ // it gets serialized using the ElementSerializer.
+ QName anyQName = Utils.getWSDLQName(Constants.XSD_ANY);
+ if (getType(anyQName) == null) {
+ symbolTablePut(new BaseType(anyQName));
+ }
+ }
else if (localPart.equals("part") &&
Constants.isWSDL(nodeKind.getNamespaceURI())) {
1.8 +2 -1 xml-axis/java/src/org/apache/axis/wsdl/symbolTable/Utils.java
Index: Utils.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/Utils.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Utils.java 3 Jun 2002 02:03:32 -0000 1.7
+++ Utils.java 4 Jun 2002 20:35:08 -0000 1.8
@@ -401,7 +401,8 @@
if (type != null && type.getNode() != null) {
getDerivedTypes(type, types, symbolTable);
} else if (Constants.isSchemaXSD(type.getQName().getNamespaceURI()) &&
- type.getQName().getLocalPart().equals("anyType")) {
+ (type.getQName().getLocalPart().equals("anyType")||
+ type.getQName().getLocalPart().equals("any"))) {
// All types are derived from anyType
types.addAll(symbolTable.getTypes());
}
1.4 +3 -0 xml-axis/java/test/wsdl/extensibility/server-deploy.wsdd
Index: server-deploy.wsdd
===================================================================
RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/server-deploy.wsdd,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- server-deploy.wsdd 10 May 2002 15:24:31 -0000 1.3
+++ server-deploy.wsdd 4 Jun 2002 20:35:08 -0000 1.4
@@ -26,6 +26,8 @@
encodingStyle=""
/>
+ <!-- Removed. The xsd:any is now mapped to a type XSD_ANY that
+ automatically uses the ElementSerializer/ElementDeserializer
<typeMapping
qname="xsd:anyType"
type="java:java.lang.Object"
@@ -33,6 +35,7 @@
deserializer="org.apache.axis.encoding.ser.ElementDeserializerFactory"
encodingStyle=""
/>
+ -->
<typeMapping