You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2002/05/10 17:24:31 UTC
cvs commit: xml-axis/java/test/wsdl/extensibility ExtensibilityQueryBindingImpl.java ExtensibilityQueryTestCase.java server-deploy.wsdd
dims 02/05/10 08:24:31
Modified: java/src/org/apache/axis/encoding/ser BeanDeserializer.java
ElementDeserializer.java
java/src/org/apache/axis/message RPCHandler.java
java/test/wsdl/extensibility
ExtensibilityQueryBindingImpl.java
ExtensibilityQueryTestCase.java server-deploy.wsdd
Log:
"minor patches to xsd:any support" from "Thomas Sandholm" <sa...@mcs.anl.gov>
Revision Changes Path
1.24 +8 -3 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.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- BeanDeserializer.java 7 May 2002 16:08:49 -0000 1.23
+++ BeanDeserializer.java 10 May 2002 15:24:31 -0000 1.24
@@ -92,6 +92,8 @@
Class javaType;
protected HashMap propertyMap = new HashMap();
protected QName prevQName;
+
+ public static final String DESERIALIZE_ANY = "DeserializeAny";
/** Type metadata about this class for XML deserialization */
protected TypeDesc typeDesc = null;
@@ -212,14 +214,17 @@
Deserializer dSer = null;
MessageContext messageContext = context.getMessageContext();
if (propDesc == null && !messageContext.isEncoded()) {
- // try to put unknown elements into an Object[] property
+ // try to put unknown elements into an Object property
propDesc = getObjectPropertyDesc(elemQName, context);
if (propDesc != null) {
- dSer = context.getDeserializerForType(elemQName);
+ Boolean deserializeAny = (Boolean) messageContext.getProperty(DESERIALIZE_ANY);
+ if ((deserializeAny != null) && (deserializeAny.booleanValue())) {
+ dSer = context.getDeserializerForType(elemQName);
+ }
if (dSer == null) {
qn = Constants.XSD_ANYTYPE;
// make sure that the Element Deserializer deserializes the current element and not the child
- messageContext.setProperty("DeserializeCurrentElement", Boolean.TRUE);
+ messageContext.setProperty(ElementDeserializer.DESERIALIZE_CURRENT_ELEMENT, Boolean.TRUE);
} else {
qn = elemQName;
}
1.5 +5 -2 xml-axis/java/src/org/apache/axis/encoding/ser/ElementDeserializer.java
Index: ElementDeserializer.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/ElementDeserializer.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ElementDeserializer.java 7 May 2002 16:08:50 -0000 1.4
+++ ElementDeserializer.java 10 May 2002 15:24:31 -0000 1.5
@@ -92,6 +92,9 @@
protected static Log log =
LogFactory.getLog(ElementDeserializer.class.getName());
+ public static final String DESERIALIZE_CURRENT_ELEMENT = "DeserializeCurrentElement";
+ public static final String SERIALIZE_CURRENT_ELEMENT = "SerializeCurrentElement";
+
public final void onEndElement(String namespace, String localName,
DeserializationContext context)
throws SAXException
@@ -100,10 +103,10 @@
MessageElement msgElem = context.getCurElement();
if ( msgElem != null ) {
MessageContext messageContext = context.getMessageContext();
- Boolean currentElement = (Boolean) messageContext.getProperty("DeserializeCurrentElement");
+ Boolean currentElement = (Boolean) messageContext.getProperty(DESERIALIZE_CURRENT_ELEMENT);
if (currentElement != null && currentElement.booleanValue()) {
value = msgElem.getAsDOM();
- messageContext.setProperty("SerializeCurrentElement", Boolean.FALSE);
+ messageContext.setProperty(SERIALIZE_CURRENT_ELEMENT, Boolean.FALSE);
return;
}
ArrayList children = msgElem.getChildren();
1.38 +6 -4 xml-axis/java/src/org/apache/axis/message/RPCHandler.java
Index: RPCHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/RPCHandler.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- RPCHandler.java 9 May 2002 18:25:17 -0000 1.37
+++ RPCHandler.java 10 May 2002 15:24:31 -0000 1.38
@@ -219,10 +219,12 @@
if ((type == null) && (namespace != null) && (!namespace.equals(""))) {
dser = context.getDeserializerForType(qname);
}
- if ((type != null) && (dser == null)) {
- dser = context.getDeserializerForType(type);
- } else {
- dser = new DeserializerImpl();
+ if (dser == null) {
+ if (type != null) {
+ dser = context.getDeserializerForType(type);
+ } else {
+ dser = new DeserializerImpl();
+ }
}
if (dser == null) {
1.3 +86 -2 xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryBindingImpl.java
Index: ExtensibilityQueryBindingImpl.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryBindingImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ExtensibilityQueryBindingImpl.java 8 May 2002 13:04:46 -0000 1.2
+++ ExtensibilityQueryBindingImpl.java 10 May 2002 15:24:31 -0000 1.3
@@ -8,13 +8,53 @@
import java.util.Calendar;
import javax.xml.rpc.namespace.QName;
+
+import org.apache.axis.AxisEngine;
+import org.apache.axis.server.AxisServer;
+import org.apache.axis.Message;
+import org.apache.axis.MessageContext;
+import org.apache.axis.message.SOAPEnvelope;
+import org.apache.axis.message.SOAPBodyElement;
+import org.apache.axis.message.RPCParam;
+import org.apache.axis.message.RPCElement;
+import org.apache.axis.encoding.SerializationContextImpl;
+import org.apache.axis.encoding.SerializationContext;
+import org.apache.axis.encoding.DeserializationContext;
+import org.apache.axis.encoding.DeserializationContextImpl;
+import org.apache.axis.encoding.ser.BeanDeserializer;
+import org.apache.axis.utils.XMLUtils;
+import org.apache.axis.client.Call;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+
+import javax.xml.rpc.namespace.QName;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.io.StringReader;
+import java.util.Calendar;
+import java.util.Vector;
+import java.rmi.RemoteException;
+
public class ExtensibilityQueryBindingImpl implements ExtensibilityQueryBinding {
private final static String[] books = new String[] { "The Grid", "The Oxford Dictionary" };
private final static String[] subjects = new String[] { "Computer Science", "English" };
- public ExtensibilityType query(ExtensibilityType query) throws java.rmi.RemoteException {
+ public ExtensibilityType query(ExtensibilityType query) throws RemoteException {
ExtensibilityType result = new ExtensibilityType();
- Object obj = query.getAny();
+ Element element = (Element) query.getAny();
+ Object obj = null;
+ try {
+ obj = ObjectSerializer.toObject(element);
+ } catch (Exception e) {
+ throw new RemoteException("Failed to deserialize any to object: " + e);
+ }
+
if (obj instanceof BookType) {
BookType bookQuery = (BookType) obj;
String subject = bookQuery.getSubject();
@@ -33,7 +73,51 @@
}
resultList.setResult(queryResult);
result.setAny(resultElement);
+ } else {
+ throw new RemoteException("Failed to get book type. Got: " + obj.getClass().getName() + ":" + obj.toString());
}
return result;
+ }
+}
+
+class ObjectSerializer {
+
+ static Log logger =
+ LogFactory.getLog(ObjectSerializer.class.getName());
+
+ static Object toObject(Element element) throws Exception {
+ MessageContext currentContext = MessageContext.getCurrentContext();
+ MessageContext messageContext = new MessageContext(currentContext.getAxisEngine());
+ messageContext.setTypeMappingRegistry(currentContext.getTypeMappingRegistry());
+ messageContext.setEncodingStyle("");
+ messageContext.setProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
+ SOAPEnvelope message = new SOAPEnvelope();
+ Document doc = XMLUtils.newDocument();
+ Element operationWrapper = doc.createElementNS("urn:operationNS","operation");
+ doc.appendChild(operationWrapper);
+ Node node = doc.importNode(element,true);
+ operationWrapper.appendChild(node);
+
+ message.addBodyElement(new SOAPBodyElement(operationWrapper));
+
+ StringWriter stringWriter = new StringWriter();
+ SerializationContext context = new SerializationContextImpl(stringWriter, messageContext);
+ context.setDoMultiRefs(false);
+ message.output(context);
+ stringWriter.close();
+ String messageString = stringWriter.getBuffer().toString();
+ logger.debug(messageString);
+ Reader reader = new StringReader(messageString);
+ messageContext.setProperty(BeanDeserializer.DESERIALIZE_ANY, Boolean.TRUE);
+ DeserializationContext deserializer = new DeserializationContextImpl(new InputSource(reader),
+ messageContext,
+ Message.REQUEST);
+ deserializer.parse();
+ SOAPEnvelope env = deserializer.getEnvelope();
+
+ RPCElement rpcElem = (RPCElement)env.getFirstBody();
+ Vector parameters = rpcElem.getParams();
+ RPCParam param = (RPCParam) parameters.get(0);
+ return param.getValue();
}
}
1.3 +3 -0 xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryTestCase.java
Index: ExtensibilityQueryTestCase.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryTestCase.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ExtensibilityQueryTestCase.java 8 May 2002 13:04:46 -0000 1.2
+++ ExtensibilityQueryTestCase.java 10 May 2002 15:24:31 -0000 1.3
@@ -10,9 +10,11 @@
import org.apache.axis.EngineConfiguration;
import org.apache.axis.AxisEngine;
import org.apache.axis.client.AdminClient;
+import org.apache.axis.client.Stub;
import org.apache.axis.encoding.TypeMappingRegistry;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
+import org.apache.axis.encoding.ser.BeanDeserializer;
import javax.xml.rpc.encoding.TypeMapping;
import javax.xml.rpc.namespace.QName;
@@ -45,6 +47,7 @@
book.setSubject("all");
bookQuery.setBookQuery(book);
expression.setAny(bookQuery);
+ ((Stub)binding)._setProperty(BeanDeserializer.DESERIALIZE_ANY, Boolean.TRUE);
ExtensibilityType any = binding.query(expression);
ResultListType result = (ResultListType) any.getAny();
QueryResultType[] queryResult = result.getResult();
1.3 +9 -7 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- server-deploy.wsdd 8 May 2002 13:04:46 -0000 1.2
+++ server-deploy.wsdd 10 May 2002 15:24:31 -0000 1.3
@@ -34,13 +34,6 @@
encodingStyle=""
/>
- <typeMapping
- qname="query:bookQuery"
- type="java:test.wsdl.extensibility.BookType"
- serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
- deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
- encodingStyle=""
- />
<typeMapping
qname="query:QueryResultElement"
@@ -65,6 +58,15 @@
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle=""
/>
+
+ <typeMapping
+ qname="query:bookQuery"
+ type="java:test.wsdl.extensibility.BookType"
+ serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
+ deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
+ encodingStyle=""
+ />
</service>
+
</deployment>