You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bi...@apache.org on 2007/11/11 17:52:24 UTC

svn commit: r593928 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/message/ rt/javascript/src/main/java/org/apache/cxf/javascript/ rt/javascript/src/main/java/org/apache/cxf/javascript/service/ rt/javascript/src/main/java/org/apache/cxf/ja...

Author: bimargulies
Date: Sun Nov 11 08:52:23 2007
New Revision: 593928

URL: http://svn.apache.org/viewvc?rev=593928&view=rev
Log:
Attempt to test Javascript message serialization. Sadly, apparently this 
is blocked on CXF-1197, or I'm just confused.


Modified:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/StringMapImpl.java
    incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/JavascriptUtils.java
    incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java
    incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/types/SchemaJavascriptBuilder.java
    incubator/cxf/trunk/rt/javascript/src/main/resources/org/apache/cxf/javascript/cxf-utils.js
    incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/JavascriptTestUtilities.java
    incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/service/DocLitWrappedTest.java
    incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/types/SerializationTest.java

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/StringMapImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/StringMapImpl.java?rev=593928&r1=593927&r2=593928&view=diff
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/StringMapImpl.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/StringMapImpl.java Sun Nov 11 08:52:23 2007
@@ -21,13 +21,16 @@
 
 import java.util.HashMap;
 
+/**
+ * A variation on HashMap which allows lookup by Class, via the string
+ * returned by {@link Class#getName()}.
+ */
 public class StringMapImpl 
     extends HashMap<String, Object> 
     implements StringMap {
     
-    @SuppressWarnings("unchecked")
     public <T> T get(Class<T> key) {
-        return (T)get(key.getName());
+        return key.cast(get(key.getName()));
     }
 
     public <T> void put(Class<T> key, T value) {

Modified: incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/JavascriptUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/JavascriptUtils.java?rev=593928&r1=593927&r2=593928&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/JavascriptUtils.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/JavascriptUtils.java Sun Nov 11 08:52:23 2007
@@ -192,7 +192,8 @@
         return token;
     }
     
-    public void generateCodeToSerializeElement(XmlSchemaElement element, 
+    public void generateCodeToSerializeElement(String utilsVarName,
+                                               XmlSchemaElement element, 
                                                String elementJavascriptName,
                                                String elementXmlName,
                                                XmlSchemaCollection xmlSchemaCollection,
@@ -234,7 +235,9 @@
                 startIf(elementJavascriptName + " == null");
                 appendString("<" + elementXmlName + " " + XmlSchemaUtils.NIL_ATTRIBUTES + "/>");
                 appendElse();
-                appendExpression(elementJavascriptName + ".serialize(cxfjsutils, '" + elementXmlName + "')");
+                appendExpression(elementJavascriptName + ".serialize(" 
+                                 + utilsVarName + ", '" 
+                                 + elementXmlName + "')");
                 endBlock();
             } else {
                 startIf(elementJavascriptName + " != null");
@@ -248,7 +251,7 @@
             // warning: this assumes that ordinary Javascript serialization is all we need.
             // except for &gt; ad all of that.
             if (isStringSimpleType(typeName)) {
-                appendExpression("cxfjsutils.escapeXmlEntities(" + elementJavascriptName + ")");
+                appendExpression(utilsVarName + ".escapeXmlEntities(" + elementJavascriptName + ")");
             } else {
                 appendExpression(elementJavascriptName);
             }

Modified: incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java?rev=593928&r1=593927&r2=593928&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java Sun Nov 11 08:52:23 2007
@@ -76,7 +76,7 @@
         this.nameManager = nameManager;
         xmlSchemaCollection = serviceInfo.getXmlSchemaCollection();
     }
-    
+
     public String getCode() {
         return code.toString();
     }
@@ -87,10 +87,12 @@
 
     @Override
     public void begin(InterfaceInfo intf) {
+        code.append("\n// Javascript for " + intf.getName() + "\n\n");
+        
         currentInterfaceClassName = nameManager.getJavascriptName(intf.getName());
         operationsWithNameConflicts = new HashSet<OperationInfo>();
         code.append("function " + currentInterfaceClassName + " () {\n");
-        code.append("}\n");
+        code.append("}\n\n");
         Map<String, OperationInfo> localNameMap = new HashMap<String, OperationInfo>();
         for (OperationInfo operation : intf.getOperations()) {
             OperationInfo conflict = localNameMap.get(operation.getName().getLocalPart());
@@ -110,12 +112,12 @@
     @Override
     public void begin(MessagePartInfo part) {
     }
-    
+
     private static class ElementAndNames {
         private XmlSchemaElement element;
         private String javascriptName;
         private String xmlName;
-        
+
         public ElementAndNames(XmlSchemaElement element, String javascriptName, String xmlName) {
             this.element = element;
             this.javascriptName = javascriptName;
@@ -134,7 +136,7 @@
             return javascriptName;
         }
     }
-    
+
     @Override
     public void begin(OperationInfo op) {
         assert !isRPC;
@@ -143,12 +145,10 @@
         if (op.isUnwrapped()) {
             return;
         }
-        // to make best use of the visitor scheme, we wait until end to
-        // create the function, since the message function can participate in
-        // building the argument list.
+
         boolean needsLongName = operationsWithNameConflicts.contains(op);
         String opFunctionName;
-        String opGlobalFunctionName = nameManager.getJavascriptName(op.getName());
+        String opGlobalFunctionName = nameManager.getJavascriptName(op.getName()) + "_op";
         if (needsLongName) {
             opFunctionName = opGlobalFunctionName;
         } else {
@@ -158,12 +158,13 @@
         MessageInfo inputMessage = op.getInput();
         String wrapperClassName = null;
         StringBuilder parameterList = new StringBuilder();
-        
-        // the message content is a set of elements. Perhaps they come from the parts,
+
+        // the message content is a set of elements. Perhaps they come from the
+        // parts,
         // or perhaps we invent them.
         List<ElementAndNames> elements = new ArrayList<ElementAndNames>();
-        List<MessagePartInfo> parts  = null;
-        
+        List<MessagePartInfo> parts = null;
+
         if (inputMessage != null) {
             parts = inputMessage.getMessageParts();
             if (isWrapped) {
@@ -177,75 +178,99 @@
         }
 
         code.append("function " + opGlobalFunctionName + "(" + parameterList
-                         + "responseCallback, errorCallback) {\n");
+                    + "responseCallback, errorCallback) {\n");
+        if (inputMessage != null) {
+            utils.appendLine("var args = new Array(" + inputParameterNames.size() + ");");
+            int px = 0;
+            for (String param : inputParameterNames) {
+                utils.appendLine("args[" + px + "] = " + param + ";");
+                px++;
+            }
+            utils.appendLine("var xml = this.serializeInputMessage(args);");
+            // more to come ...
+        }
+        code.append("}\n\n");
+        code.append(currentInterfaceClassName + ".prototype." + opFunctionName + " = " + opGlobalFunctionName
+                    + ";\n\n");
+
+        createInputSerializer(op, isWrapped, inputParameterNames, wrapperClassName, elements,
+                              parts);
+    }
+
+    private void createInputSerializer(OperationInfo op, boolean isWrapped,
+                                       List<String> inputParameterNames, String wrapperClassName,
+                                       List<ElementAndNames> elements, List<MessagePartInfo> parts) {
+        String serializerFunctionName = nameManager.getJavascriptName(op.getName()) + "_serializeInput";
         
+        code.append("function " + serializerFunctionName + "(args) {\n");
         NamespacePrefixAccumulator prefixAccumulator = new NamespacePrefixAccumulator(serviceSchemaInfo);
-
-        if (parts != null) {
-            for (MessagePartInfo mpi : parts) {
-                XmlSchemaElement element;
-                if (mpi.isElement()) {
-                    element = (XmlSchemaElement) mpi.getXmlSchema();
-                    if (element == null) {
-                        element = XmlSchemaUtils.findElementByRefName(xmlSchemaCollection, 
-                                                                      mpi.getElementQName(),
-                                                                      serviceInfo.getTargetNamespace());
-                    }
-                } else {
-                    // there is still an element in there, but it's not a very interesting element
-                    element = new XmlSchemaElement();
-                    XmlSchemaElement dummyElement = (XmlSchemaElement)mpi.getXmlSchema();
-                    element.setMaxOccurs(dummyElement.getMaxOccurs());
-                    element.setMinOccurs(dummyElement.getMinOccurs());
-                    element.setNillable(dummyElement.isNillable());
-                    element.setSchemaType(xmlSchemaCollection.getTypeByQName(mpi.getTypeQName()));
-                    element.setQName(mpi.getName());
+        for (MessagePartInfo mpi : parts) {
+            XmlSchemaElement element;
+            if (mpi.isElement()) {
+                element = (XmlSchemaElement)mpi.getXmlSchema();
+                if (element == null) {
+                    element = XmlSchemaUtils.findElementByRefName(xmlSchemaCollection, mpi.getElementQName(),
+                                                                  serviceInfo.getTargetNamespace());
                 }
-                assert element != null;
-                assert element.getQName() != null;
-                String partJavascriptVar = 
-                    JavascriptUtils.javaScriptNameToken(element.getQName().getLocalPart());
-                String elementXmlRef = prefixAccumulator.xmlElementString(element);
-
-                elements.add(new ElementAndNames(element, partJavascriptVar, elementXmlRef));
+            } else {
+                // there is still an element in there, but it's not a very
+                // interesting element
+                element = new XmlSchemaElement();
+                XmlSchemaElement dummyElement = (XmlSchemaElement)mpi.getXmlSchema();
+                element.setMaxOccurs(dummyElement.getMaxOccurs());
+                element.setMinOccurs(dummyElement.getMinOccurs());
+                element.setNillable(dummyElement.isNillable());
+                element.setSchemaType(xmlSchemaCollection.getTypeByQName(mpi.getTypeQName()));
+                element.setQName(mpi.getName());
             }
+            assert element != null;
+            assert element.getQName() != null;
+            String partJavascriptVar = JavascriptUtils.javaScriptNameToken(element.getQName().getLocalPart());
+            String elementXmlRef = prefixAccumulator.xmlElementString(element);
+
+            elements.add(new ElementAndNames(element, partJavascriptVar, elementXmlRef));
         }
-        
-        // if not wrapped, we already have parameter vars for each of the parts.
+
+        // if not wrapped, the param array matches up with the parts. If wrapped, the members
+        // of it have to be packed into an object.
 
         if (isWrapped) {
             String partJavascriptVar = elements.get(0).getJavascriptName();
             utils.appendLine("var " + partJavascriptVar + " = new " + wrapperClassName + "();");
+            int px = 0;
             for (String param : inputParameterNames) {
-                utils.appendLine(partJavascriptVar + ".set" 
-                                 + StringUtils.capitalize(param) + "(" + param + ");");
+                utils.appendLine(partJavascriptVar + ".set" + StringUtils.capitalize(param) + "(args[" + px
+                                 + "]);");
+                px++;
             }
+            // stick this into the array in slot 0.
+            utils.appendLine("args[0] = " + partJavascriptVar + ";");
         }
-        
+
         utils.appendLine("var cxfutils = new CxfApacheOrgUtil();");
-        
+
         SoapVersion soapVersion = soapBindingInfo.getSoapVersion();
         assert soapVersion.getVersion() == 1.1;
         utils.appendLine("var xml;");
-        utils.appendLine("xml = cxfutils.beginSoap11Message(\""
-                         + prefixAccumulator.getAttributes()
-                         + "\");");
+        utils.appendLine("xml = cxfutils.beginSoap11Message(\"" + prefixAccumulator.getAttributes() + "\");");
 
         utils.setXmlStringAccumulator("xml");
-        
+
+        int px = 0;
         for (ElementAndNames partElement : elements) {
-            utils.generateCodeToSerializeElement(partElement.getElement(),
-                                                 partElement.getJavascriptName(),
-                                                 partElement.getXmlName(), 
-                                                 xmlSchemaCollection, serviceSchemaInfo.getNamespaceURI(), 
-                                                 null);
+            utils.generateCodeToSerializeElement("cxfutils",
+                                                 partElement.getElement(), "args[" + px + "]",
+                                                 partElement.getXmlName(), xmlSchemaCollection,
+                                                 serviceSchemaInfo.getNamespaceURI(), null);
+            px++;
         }
-  
-        utils.appendLine("xml = xml + cxfutils.endSoap11Message();");
 
+        utils.appendLine("xml = xml + cxfutils.endSoap11Message();");
+        utils.appendLine("return xml;");
         code.append("}\n\n");
-        code.append(currentInterfaceClassName + ".prototype." + opFunctionName + " = " 
-                    + opGlobalFunctionName + "\n\n");
+        code.append(currentInterfaceClassName + ".prototype.serializeInputMessage = " 
+                    + serializerFunctionName
+                    + ";\n\n");
     }
 
     private String setupWrapperElement(OperationInfo op, List<String> inputParameterNames,
@@ -257,18 +282,15 @@
         // we expect a type
         assert wrapperPart.isElement();
         wrapperElement = (XmlSchemaElement)wrapperPart.getXmlSchema();
-        XmlSchemaComplexType wrapperType = 
-            (XmlSchemaComplexType)XmlSchemaUtils.getElementType(xmlSchemaCollection, 
-                                                                op.getName().getNamespaceURI(), 
-                                                                wrapperElement,
-                                                                null);
+        XmlSchemaComplexType wrapperType = (XmlSchemaComplexType)XmlSchemaUtils
+            .getElementType(xmlSchemaCollection, op.getName().getNamespaceURI(), wrapperElement, null);
         wrapperClassName = nameManager.getJavascriptName(wrapperType);
         XmlSchemaSequence wrapperTypeSequence = XmlSchemaUtils.getSequence(wrapperType);
         for (int i = 0; i < wrapperTypeSequence.getItems().getCount(); i++) {
             XmlSchemaObject thing = wrapperTypeSequence.getItems().getItem(i);
             if (!(thing instanceof XmlSchemaElement)) {
-                XmlSchemaUtils.unsupportedConstruct("NON_ELEMENT_CHILD", thing.getClass()
-                    .getSimpleName(), wrapperType);
+                XmlSchemaUtils.unsupportedConstruct("NON_ELEMENT_CHILD", thing.getClass().getSimpleName(),
+                                                    wrapperType);
             }
 
             XmlSchemaElement elChild = (XmlSchemaElement)thing;

Modified: incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/types/SchemaJavascriptBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/types/SchemaJavascriptBuilder.java?rev=593928&r1=593927&r2=593928&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/types/SchemaJavascriptBuilder.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/types/SchemaJavascriptBuilder.java Sun Nov 11 08:52:23 2007
@@ -20,9 +20,11 @@
 package org.apache.cxf.javascript.types;
 
 import java.util.Iterator;
+import java.util.logging.Logger;
 
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.javascript.JavascriptUtils;
 import org.apache.cxf.javascript.NameManager;
@@ -47,8 +49,7 @@
  */
 public class SchemaJavascriptBuilder {
     
-    //private static final Logger LOG = LogUtils.getL7dLogger(SchemaJavascriptBuilder.class);
-    
+    private static final Logger LOG = LogUtils.getL7dLogger(SchemaJavascriptBuilder.class);
     
     private XmlSchemaCollection xmlSchemaCollection;
     private NameManager nameManager;
@@ -85,7 +86,9 @@
             }
         }
         
-        return code.toString();
+        String returnValue = code.toString();
+        LOG.finer(returnValue);
+        return returnValue;
     }
     
     
@@ -232,7 +235,7 @@
             String elementName = elementPrefix + elChild.getName();
             String elementXmlRef = prefixAccumulator.xmlElementString(elChild);
             
-            utils.generateCodeToSerializeElement(elChild, elementName, 
+            utils.generateCodeToSerializeElement("cxfjsutils", elChild, elementName, 
                                                  elementXmlRef, xmlSchemaCollection, null, type);
         }
     }

Modified: incubator/cxf/trunk/rt/javascript/src/main/resources/org/apache/cxf/javascript/cxf-utils.js
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/main/resources/org/apache/cxf/javascript/cxf-utils.js?rev=593928&r1=593927&r2=593928&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/main/resources/org/apache/cxf/javascript/cxf-utils.js (original)
+++ incubator/cxf/trunk/rt/javascript/src/main/resources/org/apache/cxf/javascript/cxf-utils.js Sun Nov 11 08:52:23 2007
@@ -150,13 +150,16 @@
 
 function org_apache_cxf_begin_soap11_message(namespaceAttributes)
 {
-	return
-		'<?xml version="1.0" encoding="UTF-8"?><soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"'
+	var value = 
+	    '<?xml version="1.0" encoding="UTF-8"?>' 
+	    + '<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"'
 		+ ' xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"'
 	    + '><soap-env:Body '
-	    + namespaceAtttributes 
+	    + namespaceAttributes 
 	    + '>';
+		return value;
 }
+
 CxfApacheOrgUtil.prototype.beginSoap11Message = org_apache_cxf_begin_soap11_message; 
 
 function org_apache_cxf_end_soap11_message()
@@ -164,5 +167,5 @@
 	return '</soap-env:Body>';
 }
 	
-CxfApacheOrgUtil.prototype.envSoap11Message = org_apache_cxf_end_soap11_message; 
+CxfApacheOrgUtil.prototype.endSoap11Message = org_apache_cxf_end_soap11_message; 
 	

Modified: incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/JavascriptTestUtilities.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/JavascriptTestUtilities.java?rev=593928&r1=593927&r2=593928&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/JavascriptTestUtilities.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/JavascriptTestUtilities.java Sun Nov 11 08:52:23 2007
@@ -26,8 +26,10 @@
 
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.test.TestUtilities;
+import org.junit.Assert;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Function;
+import org.mozilla.javascript.RhinoException;
 import org.mozilla.javascript.ScriptableObject;
 
 /**
@@ -47,9 +49,9 @@
         }
     }
     
-    public static class Assert extends ScriptableObject {
+    public static class JsAssert extends ScriptableObject {
 
-        public Assert() { }
+        public JsAssert() { }
         public void jsConstructor(String exp) {
             LOG.severe("Assertion failed: " + exp);
             throw new JavaScriptAssertionFailed(exp);
@@ -86,7 +88,7 @@
         rhinoContext = Context.enter();
         rhinoScope = rhinoContext.initStandardObjects();
         try {
-            ScriptableObject.defineClass(rhinoScope, Assert.class);
+            ScriptableObject.defineClass(rhinoScope, JsAssert.class);
             ScriptableObject.defineClass(rhinoScope, Trace.class);
         } catch (IllegalAccessException e) {
             throw new RuntimeException(e);
@@ -127,7 +129,15 @@
             throw new RuntimeException("Missing test function " + functionName);
         }
         Function function = (Function)fObj;
-        return function.call(rhinoContext, rhinoScope, rhinoScope, args);
+        try {
+            return function.call(rhinoContext, rhinoScope, rhinoScope, args);
+        } catch (RhinoException angryRhino) {
+            String trace = angryRhino.getScriptStackTrace();
+            Assert.fail("JavaScript error: " + angryRhino.toString() + " " + trace);
+        } catch (JavaScriptAssertionFailed assertion) {
+            Assert.fail(assertion.getMessage());
+        }
+        // we never reach here, but Eclipse doesn't know about Assert.fail.
+        return null;
     }
-
 }

Modified: incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/service/DocLitWrappedTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/service/DocLitWrappedTest.java?rev=593928&r1=593927&r2=593928&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/service/DocLitWrappedTest.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/service/DocLitWrappedTest.java Sun Nov 11 08:52:23 2007
@@ -20,33 +20,52 @@
 package org.apache.cxf.javascript.service;
 
 import java.io.IOException;
+import java.io.StringReader;
 import java.util.Collection;
 import java.util.List;
+import java.util.logging.Logger;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.javascript.BasicNameManager;
 import org.apache.cxf.javascript.JavascriptTestUtilities;
 import org.apache.cxf.javascript.NameManager;
 import org.apache.cxf.javascript.types.SchemaJavascriptBuilder;
 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
+import org.apache.cxf.service.model.MessageInfo;
+import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.service.model.SchemaInfo;
 import org.apache.cxf.service.model.ServiceInfo;
+import org.junit.Ignore;
 import org.junit.Test;
+import org.mozilla.javascript.Scriptable;
 import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
 
+@Ignore
 public class DocLitWrappedTest extends AbstractDependencyInjectionSpringContextTests {
+    private static final Logger LOG = LogUtils.getL7dLogger(DocLitWrappedTest.class);
+    private static final String BASIC_TYPE_FUNCTION_RETURN_STRING_SERIALIZER_NAME 
+        = "org_apache_cxf_javascript_fortest_basicTypeFunctionReturnString_serializeInput";
+    
     private JavascriptTestUtilities testUtilities;
     private Client client;
     private List<ServiceInfo> serviceInfos;
     private Collection<SchemaInfo> schemata;
     private NameManager nameManager;
     private JaxWsProxyFactoryBean clientProxyFactory;
+    private XMLInputFactory xmlInputFactory;
 
     public DocLitWrappedTest() {
         testUtilities = new JavascriptTestUtilities(getClass());
         testUtilities.addDefaultNamespaces();
+        xmlInputFactory = XMLInputFactory.newInstance();
     }
 
     @Override
@@ -55,10 +74,47 @@
     }
 
     @Test 
-    public void testDeserialization() throws Exception {
+    public void testMessageSerialization() throws Exception {
         setupClientAndRhino("simple-dlwu-proxy-factory");
         DataBinding dataBinding = clientProxyFactory.getServiceFactory().getDataBinding();
         assertNotNull(dataBinding);
+        // the serialize function takes an array of the five parameters.
+        Object[] params = new Object[5];
+        params[0] = new String("Hello<Dolly&sheep");
+        params[1] = new Integer(42);
+        params[2] = new Long(420000);
+        params[3] = new Float("3.14159");
+        params[4] = new Double("7.90834");
+        Scriptable jsParamArray = 
+            testUtilities.getRhinoContext().newArray(testUtilities.getRhinoScope(), params);
+        Object xmlString = null;
+        xmlString = testUtilities.rhinoCall(BASIC_TYPE_FUNCTION_RETURN_STRING_SERIALIZER_NAME,
+                                                    jsParamArray);
+        assertTrue(xmlString instanceof String);
+        DataReader<XMLStreamReader> reader = dataBinding.createReader(XMLStreamReader.class);
+        ServiceInfo serviceInfo = serviceInfos.get(0); // assume we only have one.
+        QName messageName = 
+            new QName("uri:org.apache.cxf.javascript.fortest", "basicTypeFunctionReturnString");
+        MessageInfo inputMessage = serviceInfo.getMessage(messageName);
+        assertNotNull(inputMessage);
+        MessagePartInfo part = inputMessage.getMessagePartByIndex(0); // has only one part.
+        // we have the entire SOAP message in the string. Readng the entire message is
+        // really organized by the full endpoint. If we want to focus for the moment at the message
+        // or part part level, either need to invoke Javascript that builds less, or we need to fish out the 
+        // part from the DOM or the reader.
+        // we can use the DOM to local
+        StringReader stringReader = new StringReader((String)xmlString);
+        XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
+        boolean gotToPart = false;
+        do {
+            xmlStreamReader.nextTag();
+            if (xmlStreamReader.getName().equals(part.getElementQName())) {
+                gotToPart = true;
+            }
+        } while (!gotToPart && xmlStreamReader.hasNext());
+        assertTrue(gotToPart);
+        Object messageObject = reader.read(part, xmlStreamReader);
+        assertNotNull(messageObject);
     }
 
     private void setupClientAndRhino(String clientProxyFactoryBeanId) throws IOException {
@@ -80,6 +136,8 @@
                 new SchemaJavascriptBuilder(serviceInfo.getXmlSchemaCollection(), nameManager, schema);
             String allThatJavascript = builder.generateCodeForSchema(schema);
             assertNotNull(allThatJavascript);
+            LOG.info(schema.toString());
+            LOG.info(allThatJavascript);
             testUtilities.readStringIntoRhino(allThatJavascript, schema.toString() + ".js");
         }
         
@@ -87,6 +145,8 @@
             new ServiceJavascriptBuilder(serviceInfo, nameManager);
         serviceBuilder.walk();
         String serviceJavascript = serviceBuilder.getCode();
-        testUtilities.readStringIntoRhino(serviceJavascript, serviceInfo.toString() + ".js");
+        LOG.info(serviceInfo.toString());
+        LOG.info(serviceJavascript);
+        testUtilities.readStringIntoRhino(serviceJavascript, serviceInfo.getName() + ".js");
     }
 }

Modified: incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/types/SerializationTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/types/SerializationTest.java?rev=593928&r1=593927&r2=593928&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/types/SerializationTest.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/types/SerializationTest.java Sun Nov 11 08:52:23 2007
@@ -39,16 +39,13 @@
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.javascript.BasicNameManager;
 import org.apache.cxf.javascript.JavascriptTestUtilities;
-import org.apache.cxf.javascript.JavascriptTestUtilities.JavaScriptAssertionFailed;
 import org.apache.cxf.javascript.NameManager;
 import org.apache.cxf.javascript.fortest.TestBean1;
 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
 import org.apache.cxf.service.model.SchemaInfo;
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.wsdl.EndpointReferenceUtils;
-import org.junit.Assert;
 import org.junit.Test;
-import org.mozilla.javascript.RhinoException;
 import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
 
 public class SerializationTest extends AbstractDependencyInjectionSpringContextTests {
@@ -72,48 +69,39 @@
     protected String[] getConfigLocations() {
         return new String[] {"classpath:serializationTestBeans.xml"};
     }
-    
-    @Test 
+
+    @Test
     public void testEndpointGetSchema() throws IOException {
         setupClientAndRhino("simple-dlwu-proxy-factory");
         ServiceInfo serviceInfo = serviceInfos.get(0);
         EndpointReferenceUtils.getSchema(serviceInfo);
     }
-    
-    @Test 
+
+    @Test
     public void testDeserialization() throws Exception {
         setupClientAndRhino("simple-dlwu-proxy-factory");
         testUtilities.readResourceIntoRhino("/deserializationTests.js");
         DataBinding dataBinding = clientProxyFactory.getServiceFactory().getDataBinding();
         assertNotNull(dataBinding);
-        try {
-            TestBean1 bean = new TestBean1();
-            bean.stringItem = "bean1>stringItem";
-            bean.doubleItem = -1.0;
-            String serialized = serializeObject(dataBinding, bean);
-            testUtilities.rhinoCall("deserializeTestBean1_1", serialized);
-            
-            bean = new TestBean1();
-            bean.stringItem = null;
-            bean.intItem = 21;
-            bean.longItem = 200000001;
-            bean.optionalIntItem = 456123;
-            bean.optionalIntArrayItem = new int[4];
-            bean.optionalIntArrayItem[0] = 3;
-            bean.optionalIntArrayItem[1] = 1;
-            bean.optionalIntArrayItem[2] = 4;
-            bean.optionalIntArrayItem[3] = 1;
-            bean.doubleItem = -1.0;
-            serialized = serializeObject(dataBinding, bean);
-            testUtilities.rhinoCall("deserializeTestBean1_2", serialized);
-
-        } catch (JavaScriptAssertionFailed assertion) {
-            fail(assertion.getMessage());
-        } catch (RhinoException angryRhino) {
-            String trace = angryRhino.getScriptStackTrace();
-            Assert.fail("Javascript error: " + angryRhino.toString() + " " + trace);
-        }
-
+        TestBean1 bean = new TestBean1();
+        bean.stringItem = "bean1>stringItem";
+        bean.doubleItem = -1.0;
+        String serialized = serializeObject(dataBinding, bean);
+        testUtilities.rhinoCall("deserializeTestBean1_1", serialized);
+
+        bean = new TestBean1();
+        bean.stringItem = null;
+        bean.intItem = 21;
+        bean.longItem = 200000001;
+        bean.optionalIntItem = 456123;
+        bean.optionalIntArrayItem = new int[4];
+        bean.optionalIntArrayItem[0] = 3;
+        bean.optionalIntArrayItem[1] = 1;
+        bean.optionalIntArrayItem[2] = 4;
+        bean.optionalIntArrayItem[3] = 1;
+        bean.doubleItem = -1.0;
+        serialized = serializeObject(dataBinding, bean);
+        testUtilities.rhinoCall("deserializeTestBean1_2", serialized);
     }
 
     private String serializeObject(DataBinding dataBinding, TestBean1 bean) throws XMLStreamException {
@@ -125,80 +113,74 @@
         xmlStreamWriter.close();
         return stringWriter.toString();
     }
-    
+
     @Test
     public void testSerialization() throws Exception {
         setupClientAndRhino("simple-dlwu-proxy-factory");
-        
+
         testUtilities.readResourceIntoRhino("/serializationTests.js");
         DataBinding dataBinding = clientProxyFactory.getServiceFactory().getDataBinding();
         assertNotNull(dataBinding);
-        
-        try {
-            Object serialized = testUtilities.rhinoCall("serializeTestBean1_1");
-            assertTrue(serialized instanceof String);
-            String xml = (String)serialized;
-            DataReader<XMLStreamReader> reader = dataBinding.createReader(XMLStreamReader.class);
-            StringReader stringReader = new StringReader(xml);
-            XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
-            QName testBeanQName = new QName("uri:org.apache.cxf.javascript.testns", "TestBean1");
-            Object bean = reader.read(testBeanQName, xmlStreamReader, TestBean1.class);
-            assertNotNull(bean);
-            assertTrue(bean instanceof TestBean1);
-            TestBean1 testBean = (TestBean1)bean;
-            assertEquals("bean1<stringItem", testBean.stringItem);
-            assertEquals(64, testBean.intItem);
-            assertEquals(64000000, testBean.longItem);
-            assertEquals(101, testBean.optionalIntItem);
-            assertNotNull(testBean.optionalIntArrayItem);
-            assertEquals(1, testBean.optionalIntArrayItem.length);
-            assertEquals(543, testBean.optionalIntArrayItem[0]);
-            
-            serialized = testUtilities.rhinoCall("serializeTestBean1_2");
-            assertTrue(serialized instanceof String);
-            xml = (String)serialized;
-            reader = dataBinding.createReader(XMLStreamReader.class);
-            stringReader = new StringReader(xml);
-            xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
-            bean = reader.read(testBeanQName, xmlStreamReader, TestBean1.class);
-            assertNotNull(bean);
-            assertTrue(bean instanceof TestBean1);
-            testBean = (TestBean1)bean;
-            assertEquals("bean1<stringItem", testBean.stringItem);
-            assertEquals(64, testBean.intItem);
-            assertEquals(64000000, testBean.longItem);
-            assertEquals(0, testBean.optionalIntItem);
-            assertNotNull(testBean.optionalIntArrayItem);
-            assertEquals(3, testBean.optionalIntArrayItem.length);
-            assertEquals(543, testBean.optionalIntArrayItem[0]);
-            assertEquals(0, testBean.optionalIntArrayItem[1]);
-            assertEquals(345, testBean.optionalIntArrayItem[2]);
-            
-            serialized = testUtilities.rhinoCall("serializeTestBean1_3");
-            assertTrue(serialized instanceof String);
-            xml = (String)serialized;
-            reader = dataBinding.createReader(XMLStreamReader.class);
-            stringReader = new StringReader(xml);
-            xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
-            bean = reader.read(testBeanQName, xmlStreamReader, TestBean1.class);
-            assertNotNull(bean);
-            assertTrue(bean instanceof TestBean1);
-            testBean = (TestBean1)bean;
-            assertEquals("bean1<stringItem", testBean.stringItem);
-            assertEquals(64, testBean.intItem);
-            assertEquals(43, testBean.longItem);
-            assertEquals(33, testBean.optionalIntItem);
-            assertNull(testBean.optionalIntArrayItem);
-        } catch (RhinoException angryRhino) {
-            String trace = angryRhino.getScriptStackTrace();
-            Assert.fail("Javascript error: " + angryRhino.toString() + " " + trace);
-        }
-        
+
+        Object serialized = testUtilities.rhinoCall("serializeTestBean1_1");
+        assertTrue(serialized instanceof String);
+        String xml = (String)serialized;
+        DataReader<XMLStreamReader> reader = dataBinding.createReader(XMLStreamReader.class);
+        StringReader stringReader = new StringReader(xml);
+        XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
+        QName testBeanQName = new QName("uri:org.apache.cxf.javascript.testns", "TestBean1");
+        Object bean = reader.read(testBeanQName, xmlStreamReader, TestBean1.class);
+        assertNotNull(bean);
+        assertTrue(bean instanceof TestBean1);
+        TestBean1 testBean = (TestBean1)bean;
+        assertEquals("bean1<stringItem", testBean.stringItem);
+        assertEquals(64, testBean.intItem);
+        assertEquals(64000000, testBean.longItem);
+        assertEquals(101, testBean.optionalIntItem);
+        assertNotNull(testBean.optionalIntArrayItem);
+        assertEquals(1, testBean.optionalIntArrayItem.length);
+        assertEquals(543, testBean.optionalIntArrayItem[0]);
+
+        serialized = testUtilities.rhinoCall("serializeTestBean1_2");
+        assertTrue(serialized instanceof String);
+        xml = (String)serialized;
+        reader = dataBinding.createReader(XMLStreamReader.class);
+        stringReader = new StringReader(xml);
+        xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
+        bean = reader.read(testBeanQName, xmlStreamReader, TestBean1.class);
+        assertNotNull(bean);
+        assertTrue(bean instanceof TestBean1);
+        testBean = (TestBean1)bean;
+        assertEquals("bean1<stringItem", testBean.stringItem);
+        assertEquals(64, testBean.intItem);
+        assertEquals(64000000, testBean.longItem);
+        assertEquals(0, testBean.optionalIntItem);
+        assertNotNull(testBean.optionalIntArrayItem);
+        assertEquals(3, testBean.optionalIntArrayItem.length);
+        assertEquals(543, testBean.optionalIntArrayItem[0]);
+        assertEquals(0, testBean.optionalIntArrayItem[1]);
+        assertEquals(345, testBean.optionalIntArrayItem[2]);
+
+        serialized = testUtilities.rhinoCall("serializeTestBean1_3");
+        assertTrue(serialized instanceof String);
+        xml = (String)serialized;
+        reader = dataBinding.createReader(XMLStreamReader.class);
+        stringReader = new StringReader(xml);
+        xmlStreamReader = xmlInputFactory.createXMLStreamReader(stringReader);
+        bean = reader.read(testBeanQName, xmlStreamReader, TestBean1.class);
+        assertNotNull(bean);
+        assertTrue(bean instanceof TestBean1);
+        testBean = (TestBean1)bean;
+        assertEquals("bean1<stringItem", testBean.stringItem);
+        assertEquals(64, testBean.intItem);
+        assertEquals(43, testBean.longItem);
+        assertEquals(33, testBean.optionalIntItem);
+        assertNull(testBean.optionalIntArrayItem);
     }
 
     private void setupClientAndRhino(String clientProxyFactoryBeanId) throws IOException {
         testUtilities.setBus((Bus)applicationContext.getBean("cxf"));
-        
+
         testUtilities.initializeRhino();
         testUtilities.readResourceIntoRhino("/org/apache/cxf/javascript/cxf-utils.js");
 
@@ -211,8 +193,8 @@
         schemata = serviceInfo.getSchemas();
         nameManager = new BasicNameManager(serviceInfo);
         for (SchemaInfo schema : schemata) {
-            SchemaJavascriptBuilder builder = 
-                new SchemaJavascriptBuilder(serviceInfo.getXmlSchemaCollection(), nameManager, schema);
+            SchemaJavascriptBuilder builder = new SchemaJavascriptBuilder(serviceInfo
+                .getXmlSchemaCollection(), nameManager, schema);
             String allThatJavascript = builder.generateCodeForSchema(schema);
             assertNotNull(allThatJavascript);
             testUtilities.readStringIntoRhino(allThatJavascript, schema.toString() + ".js");