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/08 13:26:01 UTC
svn commit: r593145 - in /incubator/cxf/trunk/rt/javascript/src:
main/java/org/apache/cxf/javascript/service/
main/resources/org/apache/cxf/javascript/
test/java/org/apache/cxf/javascript/service/
Author: bimargulies
Date: Thu Nov 8 04:26:00 2007
New Revision: 593145
URL: http://svn.apache.org/viewvc?rev=593145&view=rev
Log:
Javascript message serialization for doc/literal/wrapped.
Modified:
incubator/cxf/trunk/rt/javascript/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.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/service/DocLitWrappedTest.java
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=593145&r1=593144&r2=593145&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 Thu Nov 8 04:26:00 2007
@@ -89,8 +89,8 @@
public void begin(InterfaceInfo intf) {
currentInterfaceClassName = nameManager.getJavascriptName(intf.getName());
operationsWithNameConflicts = new HashSet<OperationInfo>();
- utils.appendLine("function " + currentInterfaceClassName + " () {");
- utils.appendLine("}");
+ code.append("function " + currentInterfaceClassName + " () {\n");
+ code.append("}\n");
Map<String, OperationInfo> localNameMap = new HashMap<String, OperationInfo>();
for (OperationInfo operation : intf.getOperations()) {
OperationInfo conflict = localNameMap.get(operation.getName().getLocalPart());
@@ -111,17 +111,46 @@
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;
+ this.xmlName = xmlName;
+ }
+
+ public XmlSchemaElement getElement() {
+ return element;
+ }
+
+ public String getXmlName() {
+ return xmlName;
+ }
+
+ public String getJavascriptName() {
+ return javascriptName;
+ }
+ }
+
@Override
public void begin(OperationInfo op) {
assert !isRPC;
boolean isWrapped = op.isUnwrappedCapable();
+ // we only process the wrapped operation, not the unwrapped alternative.
+ 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());
if (needsLongName) {
- opFunctionName = nameManager.getJavascriptName(op.getName());
+ opFunctionName = opGlobalFunctionName;
} else {
opFunctionName = JavascriptUtils.javaScriptNameToken(op.getName().getLocalPart());
}
@@ -132,13 +161,13 @@
// the message content is a set of elements. Perhaps they come from the parts,
// or perhaps we invent them.
- List<XmlSchemaElement> elements = new ArrayList<XmlSchemaElement>();
+ List<ElementAndNames> elements = new ArrayList<ElementAndNames>();
List<MessagePartInfo> parts = null;
if (inputMessage != null) {
parts = inputMessage.getMessageParts();
if (isWrapped) {
- wrapperClassName = setupWrapperElement(op, inputParameterNames, elements, parts);
+ wrapperClassName = setupWrapperElement(op, inputParameterNames, parts);
}
for (String param : inputParameterNames) {
@@ -147,25 +176,21 @@
}
}
- // note that these functions operate in terms of async callbacks, they
- // don't
- // ever have return values. Hypothetically, I suppose that users who
- // wanted a
- // synchronous behavior might want a synchronous function (rather like
- // the Microsoft
- // wsdl.exe behavior), but I'm not going to worry about it for now.
- utils.appendLine("function " + opFunctionName + "(" + parameterList
- + "responseCallback, errorCallback) {");
+ code.append("function " + opGlobalFunctionName + "(" + parameterList
+ + "responseCallback, errorCallback) {\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 = xmlSchemaCollection.getElementByQName(mpi.getElementQName());
+ 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();
@@ -178,19 +203,21 @@
}
assert element != null;
assert element.getQName() != null;
- elements.add(element);
+ 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 (isWrapped) {
- // this will need Javascript name cleanup
- String partElementName =
- JavascriptUtils.javaScriptNameToken(elements.get(0).getQName().getLocalPart());
- utils.appendLine("var " + partElementName + " = new " + wrapperClassName + "();");
+ String partJavascriptVar = elements.get(0).getJavascriptName();
+ utils.appendLine("var " + partJavascriptVar + " = new " + wrapperClassName + "();");
for (String param : inputParameterNames) {
- utils.appendLine(partElementName + ".set"
+ utils.appendLine(partJavascriptVar + ".set"
+ StringUtils.capitalize(param) + "(" + param + ");");
}
}
@@ -200,27 +227,29 @@
SoapVersion soapVersion = soapBindingInfo.getSoapVersion();
assert soapVersion.getVersion() == 1.1;
utils.appendLine("var xml;");
- utils.appendLine("xml = cxfutils.beginSoap11Message();");
+ utils.appendLine("xml = cxfutils.beginSoap11Message(\""
+ + prefixAccumulator.getAttributes()
+ + "\");");
+
utils.setXmlStringAccumulator("xml");
- NamespacePrefixAccumulator prefixAccumulator = new NamespacePrefixAccumulator(serviceSchemaInfo);
-
- for (XmlSchemaElement partElement : elements) {
- String partElementName =
- JavascriptUtils.javaScriptNameToken(partElement.getQName().getLocalPart());
- String elementXmlRef = prefixAccumulator.xmlElementString(partElement);
- utils.generateCodeToSerializeElement(partElement, partElementName, elementXmlRef,
+ for (ElementAndNames partElement : elements) {
+ utils.generateCodeToSerializeElement(partElement.getElement(),
+ partElement.getJavascriptName(),
+ partElement.getXmlName(),
xmlSchemaCollection, serviceSchemaInfo.getNamespaceURI(),
null);
}
utils.appendLine("xml = xml + cxfutils.endSoap11Message();");
- utils.appendLine("}");
+ code.append("}\n\n");
+ code.append(currentInterfaceClassName + ".prototype." + opFunctionName + " = "
+ + opGlobalFunctionName + "\n\n");
}
private String setupWrapperElement(OperationInfo op, List<String> inputParameterNames,
- List<XmlSchemaElement> elements, List<MessagePartInfo> parts) {
+ List<MessagePartInfo> parts) {
String wrapperClassName;
// expect one input part.
assert parts.size() == 1;
@@ -228,7 +257,6 @@
// we expect a type
assert wrapperPart.isElement();
wrapperElement = (XmlSchemaElement)wrapperPart.getXmlSchema();
- elements.add(wrapperElement);
XmlSchemaComplexType wrapperType =
(XmlSchemaComplexType)XmlSchemaUtils.getElementType(xmlSchemaCollection,
op.getName().getNamespaceURI(),
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=593145&r1=593144&r2=593145&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 Thu Nov 8 04:26:00 2007
@@ -148,12 +148,14 @@
// The following could be parameterized using the SoapVersion class, but does anyone believe that
// there will ever be another soap version?
-function org_apache_cxf_begin_soap11_message()
+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/"' +
- ' xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"' +
- '><soap-env:Body>';
+ '<?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
+ + '>';
}
CxfApacheOrgUtil.prototype.beginSoap11Message = org_apache_cxf_begin_soap11_message;
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=593145&r1=593144&r2=593145&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 Thu Nov 8 04:26:00 2007
@@ -33,11 +33,9 @@
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.service.model.SchemaInfo;
import org.apache.cxf.service.model.ServiceInfo;
-import org.junit.Ignore;
import org.junit.Test;
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
-@Ignore
public class DocLitWrappedTest extends AbstractDependencyInjectionSpringContextTests {
private JavascriptTestUtilities testUtilities;
private Client client;