sandholm 2003/02/25 21:21:26
Modified: java/test/wsdl/extensibility Tag:
dynamic_deserialization_branch
ExtensibilityQueryBindingImpl.java
ExtensibilityQueryTestCase.java QueryTypes.wsdl
server-deploy.wsdd
Log:
added test for dynamic deserialization based on class meta data (in separate branch)
Revision Changes Path
No revision
No revision
1.16.2.1 +22 -48
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.16
retrieving revision 1.16.2.1
diff -u -r1.16 -r1.16.2.1
--- ExtensibilityQueryBindingImpl.java 11 Dec 2002 22:40:20 -0000 1.16
+++ ExtensibilityQueryBindingImpl.java 26 Feb 2003 05:21:26 -0000
1.16.2.1
@@ -29,81 +29,55 @@
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
+import java.io.PrintWriter;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Vector;
-
+import org.apache.axis.components.logger.LogFactory;
+import org.apache.commons.logging.Log;
public class ExtensibilityQueryBindingImpl implements ExtensibilityQueryPortType {
private final static String[] books = new String[] { "The Grid", "The Oxford
Dictionary" };
private final static String[] subjects = new String[] { "Computer Science",
"English" };
+ protected static Log log =
+ LogFactory.getLog(ExtensibilityQueryBindingImpl.class.getName());
public ExtensibilityType query(ExtensibilityType query) throws RemoteException {
ExtensibilityType result = new ExtensibilityType();
- Object obj = query.get_any()[0].getObjectValue();
- if (obj instanceof FindBooksQueryExpressionElement) {
- BookType bookQuery =
((FindBooksQueryExpressionElement)obj).getBookQuery();
+ Object obj = null;
+ try {
+ obj = query.get_any()[0].getObjectValue(BookType.class);
+ } catch (Exception e) {
+ StringWriter writer = new StringWriter();
+ PrintWriter out = new PrintWriter(writer);
+ log.error("Error converting query: " + writer.toString());
+ throw new RemoteException(e.toString());
+ }
+ log.error("Incoming MessageContext " + obj + " : " +
query.get_any()[0].toString());
+ if (obj instanceof BookType) {
+ BookType bookQuery = (BookType)obj;
String subject = bookQuery.getSubject();
if (!"all".equals(subject)) {
throw new RemoteException("ExtensibilityQueryBindingImpl: Book
subject query should be all, instead was " + subject);
}
- QueryResultElement resultElement = new QueryResultElement();
ResultListType resultList = new ResultListType();
- resultElement.setResultList(resultList);
QueryResultType[] queryResult = new QueryResultType[books.length];
for (int i = 0; i < books.length; i++) {
queryResult[i] = new QueryResultType();
queryResult[i].setName(subjects[i]);
+ queryResult[i].setStatus(StatusType.MORE);
queryResult[i].setValue(books[i]);
queryResult[i].setTime(Calendar.getInstance());
queryResult[i].setQueryType(new QName("urn:QueryType","BookQuery"));
}
resultList.setResult(queryResult);
- MessageElement me = new MessageElement("foo", "bar", resultElement);
+ QName elementName =
QueryResultElement.getTypeDesc().getFields()[0].getXmlName();
+ MessageElement me = new MessageElement(elementName.getNamespaceURI(),
elementName.getLocalPart(), resultList);
+ log.debug("Outgoing message: " + me.toString());
result.set_any(new MessageElement [] { me });
} else {
- throw new RemoteException("Failed to get
FindBooksQueryExpressionElement. Got: " + obj.getClass().getName() + ":" +
obj.toString());
+ throw new RemoteException("Failed to get
FindBooksQueryExpressionElement. Got: " + obj);
}
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);
- 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.14.2.1 +12 -31
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.14
retrieving revision 1.14.2.1
diff -u -r1.14 -r1.14.2.1
--- ExtensibilityQueryTestCase.java 11 Dec 2002 22:40:20 -0000 1.14
+++ ExtensibilityQueryTestCase.java 26 Feb 2003 05:21:26 -0000 1.14.2.1
@@ -37,7 +37,6 @@
try {
ExtensibilityQueryLocator locator = new ExtensibilityQueryLocator();
binding = locator.getExtensibilityQueryPort();
- addDynamicTypeMappings(locator.getEngine());
deployServer();
}
catch (javax.xml.rpc.ServiceException jre) {
@@ -53,60 +52,42 @@
try {
ExtensibilityType expression = new ExtensibilityType();
- FindBooksQueryExpressionElement bookQuery = new
FindBooksQueryExpressionElement();
BookType book = new BookType();
book.setSubject("all");
- bookQuery.setBookQuery(book);
- MessageElement el = new MessageElement("foo", "Bar", bookQuery);
+ QName elementName =
FindBooksQueryExpressionElement.getTypeDesc().getFields()[0].getXmlName();
+ MessageElement el = new MessageElement(elementName.getNamespaceURI(),
elementName.getLocalPart(), book);
expression.set_any(new MessageElement [] { el });
// call the operation
ExtensibilityType any = binding.query(expression);
// validate results
MessageElement [] anyContent = any.get_any();
assertEquals(1, anyContent.length);
- QueryResultElement resEl = (QueryResultElement
)anyContent[0].getObjectValue();
- assertNotNull("QueryResultElement back from
anyContent[0].getObjectValue()", resEl);
- ResultListType result = resEl.getResultList();
- assertNotNull("ResultListType back from getResultList()", result);
+ ResultListType result =
(ResultListType)anyContent[0].getObjectValue(ResultListType.class);
+ root.debug("Message " + result + ": " + anyContent[0].toString());
+ assertNotNull("ResultListType back from getResultList() is null",
result);
QueryResultType[] queryResult = result.getResult();
assertTrue(queryResult.length == 2);
isValid(queryResult[0], "Computer Science", "The Grid");
isValid(queryResult[1], "English", "The Oxford Dictionary");
}
- catch (java.rmi.RemoteException re) {
- throw new junit.framework.AssertionFailedError("Remote Exception
caught: " + re);
+ catch (Exception e) {
+ e.printStackTrace();
+ throw new junit.framework.AssertionFailedError("Exception caught: " +
e);
}
}
private void isValid(QueryResultType result, String name, String value) {
+ Logger root = Logger.getRootLogger();
+ root.debug("Name: " + result.getName());
+ root.debug("Value: " + result.getValue());
assertTrue(result.getName().equals(name));
assertTrue(result.getValue().equals(value));
+ assertTrue(result.getStatus().equals(StatusType.MORE));
Calendar now = Calendar.getInstance();
Calendar then = result.getTime();
assertTrue("Time check failed. Result time = " + then + ", current time =
" + now, then.before(now));
assertTrue(result.getQueryType().getNamespaceURI().equals("urn:QueryType"));
assertTrue(result.getQueryType().getLocalPart().equals("BookQuery"));
- }
-
- private void addDynamicTypeMappings(AxisEngine engine) throws Exception {
- TypeMappingRegistry registry = engine.getTypeMappingRegistry();
- TypeMapping mapping = registry.createTypeMapping();
- addBeanMapping(mapping, "FindBooksQueryExpressionElement",
FindBooksQueryExpressionElement.class);
- addBeanMapping(mapping, "BookType", BookType.class);
- addBeanMapping(mapping, "ResultListType", ResultListType.class);
- addBeanMapping(mapping, "QueryResultType", QueryResultType.class);
- addBeanMapping(mapping, "QueryResultElement", QueryResultElement.class);
- registry.register("",mapping);
- EngineConfiguration config = engine.getConfig();
- config.writeEngineConfig(engine);
- }
-
- private void addBeanMapping(TypeMapping mapping, String localName, Class
javaClass) {
- QName qname = new QName("urn:QueryTypes", localName);
- mapping.register(javaClass,
- qname,
- new BeanSerializerFactory(javaClass, qname),
- new BeanDeserializerFactory(javaClass, qname));
}
private void deployServer() {
1.2.14.1 +8 -0 xml-axis/java/test/wsdl/extensibility/QueryTypes.wsdl
Index: QueryTypes.wsdl
===================================================================
RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/QueryTypes.wsdl,v
retrieving revision 1.2
retrieving revision 1.2.14.1
diff -u -r1.2 -r1.2.14.1
--- QueryTypes.wsdl 8 May 2002 13:04:46 -0000 1.2
+++ QueryTypes.wsdl 26 Feb 2003 05:21:26 -0000 1.2.14.1
@@ -38,8 +38,16 @@
<xsd:attribute name="value" type="xsd:string"/>
<xsd:attribute name="time" type="xsd:dateTime"/>
<xsd:attribute name="queryType" type="xsd:QName"/>
+ <xsd:attribute name="status" type="tns:StatusType"/>
</xsd:complexType>
+ <xsd:simpleType name="StatusType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="MORE"/>
+ <xsd:enumeration value="LESS"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
</xsd:schema>
</types>
</definitions>
1.6.8.1 +0 -61 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.6
retrieving revision 1.6.8.1
diff -u -r1.6 -r1.6.8.1
--- server-deploy.wsdd 19 Sep 2002 20:25:12 -0000 1.6
+++ server-deploy.wsdd 26 Feb 2003 05:21:26 -0000 1.6.8.1
@@ -16,67 +16,6 @@
<parameter name="className"
value="test.wsdl.extensibility.ExtensibilityQueryBindingSkeleton"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="scope" value="Session"/>
-
- <typeMapping
- xmlns:ns="urn:ExtensibilityQuery"
- qname="ns:ExtensibilityType"
- type="java:test.wsdl.extensibility.ExtensibilityType"
- serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
- deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
- 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"
- serializer="org.apache.axis.encoding.ser.ElementSerializerFactory"
- deserializer="org.apache.axis.encoding.ser.ElementDeserializerFactory"
- encodingStyle=""
- />
- -->
-
-
- <typeMapping
- qname="query:QueryResultElement"
- type="java:test.wsdl.extensibility.QueryResultElement"
- serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
- deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
- encodingStyle=""
- />
-
- <typeMapping
- qname="query:QueryResultType"
- type="java:test.wsdl.extensibility.QueryResultType"
- serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
- deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
- encodingStyle=""
- />
-
- <typeMapping
- qname="query:ResultListType"
- type="java:test.wsdl.extensibility.ResultListType"
- serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
- deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
- encodingStyle=""
- />
-
- <typeMapping
- qname="query:BookType"
- type="java:test.wsdl.extensibility.BookType"
- serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
- deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
- encodingStyle=""
- />
-
- <typeMapping
- qname="query:FindBooksQueryExpressionElement"
- type="java:test.wsdl.extensibility.FindBooksQueryExpressionElement"
- serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
- deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
- encodingStyle=""
- />
</service>