From cxf-commits-return-3656-apmail-incubator-cxf-commits-archive=incubator.apache.org@incubator.apache.org Sun Nov 11 16:52:59 2007 Return-Path: Delivered-To: apmail-incubator-cxf-commits-archive@locus.apache.org Received: (qmail 40152 invoked from network); 11 Nov 2007 16:52:59 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 11 Nov 2007 16:52:59 -0000 Received: (qmail 34964 invoked by uid 500); 11 Nov 2007 16:52:46 -0000 Delivered-To: apmail-incubator-cxf-commits-archive@incubator.apache.org Received: (qmail 34847 invoked by uid 500); 11 Nov 2007 16:52:46 -0000 Mailing-List: contact cxf-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cxf-dev@incubator.apache.org Delivered-To: mailing list cxf-commits@incubator.apache.org Received: (qmail 34838 invoked by uid 99); 11 Nov 2007 16:52:46 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 11 Nov 2007 08:52:46 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 11 Nov 2007 16:52:46 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 129151A9832; Sun, 11 Nov 2007 08:52:26 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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... Date: Sun, 11 Nov 2007 16:52:24 -0000 To: cxf-commits@incubator.apache.org From: bimargulies@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071111165226.129151A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 implements StringMap { - @SuppressWarnings("unchecked") public T get(Class key) { - return (T)get(key.getName()); + return key.cast(get(key.getName())); } public void put(Class 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 > 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(); code.append("function " + currentInterfaceClassName + " () {\n"); - code.append("}\n"); + code.append("}\n\n"); Map localNameMap = new HashMap(); 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 elements = new ArrayList(); - List parts = null; - + List 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 inputParameterNames, String wrapperClassName, + List elements, List 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 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 - '' + + ''; + return value; } + CxfApacheOrgUtil.prototype.beginSoap11Message = org_apache_cxf_begin_soap11_message; function org_apache_cxf_end_soap11_message() @@ -164,5 +167,5 @@ return ''; } -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 serviceInfos; private Collection 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 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 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 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