[
https://issues.apache.org/jira/browse/CXF-2139?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12693571#action_12693571
]
Juergen Kellerer edited comment on CXF-2139 at 3/29/09 8:48 AM:
----------------------------------------------------------------
.. was a bit to fast with the given HACK, simply using the method from the
serializer code seems the fix the problem better, the solution I used before
doesn't cover inheritance. However I'm still not sure if this causes any other
side effects, it's just a quick HACK that does the trick for me.
public void domDeserializerFunction(QName name, XmlSchemaComplexType type) {
utils = new JavascriptUtils(code);
List<XmlSchemaObject> items = XmlSchemaUtils.getContentElements(type,
xmlSchemaCollection);
String typeObjectName = nameManager.getJavascriptName(name);
code.append("function " + typeObjectName + "_deserialize (cxfjsutils,
element) {\n");
// create the object we are deserializing into.
utils.appendLine("var newobject = new " + typeObjectName + "();");
utils.appendLine("cxfjsutils.trace('element: ' +
cxfjsutils.traceElementName(element));");
utils.appendLine("var curElement =
cxfjsutils.getFirstElementChild(element);");
utils.appendLine("var item;");
for (ListIterator<XmlSchemaObject> i = items.listIterator();
i.hasNext();) {
utils.appendLine("cxfjsutils.trace('curElement: ' +
cxfjsutils.traceElementName(curElement));");
XmlSchemaObject thing = i.next();
ParticleInfo itemInfo = ParticleInfo.forLocalItem(thing,
schemaInfo.getSchema(),
xmlSchemaCollection, prefixAccumulator,
type.getQName());
if (itemInfo.isAny()) {
ParticleInfo nextItem = null;
if (i.hasNext()) {
XmlSchemaObject nextThing = i.next();
nextItem = ParticleInfo.forLocalItem(nextThing,
schemaInfo.getSchema(),
xmlSchemaCollection,
prefixAccumulator, type.getQName());
// theoretically, you could have two anys with
different
// namespaces.
if (nextItem.isAny()) {
unsupportedConstruct("MULTIPLE_ANY",
type.getQName());
}
}
deserializeAny(type, itemInfo, nextItem);
} else {
deserializeElement(type, thing);
}
}
utils.appendLine("return newobject;");
code.append("}\n\n");
}
was (Author: juergenk):
.. was a bit to fast with the given HACK, simply using the method from the
serializer code seems the fix the problem better, the solution I used before
doesn't cover inheritance. However I'm still not sure if this causes any other
side effects, it's just a quick HACK that does the trick for me.
public void domDeserializerFunction(QName name, XmlSchemaComplexType
type) {
utils = new JavascriptUtils(code);
List<XmlSchemaObject> items =
XmlSchemaUtils.getContentElements(type, xmlSchemaCollection);
String typeObjectName = nameManager.getJavascriptName(name);
code.append("function " + typeObjectName + "_deserialize
(cxfjsutils, element) {\n");
// create the object we are deserializing into.
utils.appendLine("var newobject = new " + typeObjectName +
"();");
utils.appendLine("cxfjsutils.trace('element: ' +
cxfjsutils.traceElementName(element));");
utils.appendLine("var curElement =
cxfjsutils.getFirstElementChild(element);");
utils.appendLine("var item;");
for (ListIterator<XmlSchemaObject> i = items.listIterator();
i.hasNext();) {
utils.appendLine("cxfjsutils.trace('curElement: ' +
cxfjsutils.traceElementName(curElement));");
XmlSchemaObject thing = i.next();
ParticleInfo itemInfo =
ParticleInfo.forLocalItem(thing, schemaInfo.getSchema(),
xmlSchemaCollection, prefixAccumulator,
type.getQName());
if (itemInfo.isAny()) {
ParticleInfo nextItem = null;
if (i.hasNext()) {
XmlSchemaObject nextThing = i.next();
nextItem =
ParticleInfo.forLocalItem(nextThing, schemaInfo.getSchema(),
xmlSchemaCollection,
prefixAccumulator, type.getQName());
// theoretically, you could have two
anys with different
// namespaces.
if (nextItem.isAny()) {
unsupportedConstruct("MULTIPLE_ANY", type.getQName());
}
}
deserializeAny(type, itemInfo, nextItem);
} else {
deserializeElement(type, thing);
}
}
utils.appendLine("return newobject;");
code.append("}\n\n");
}
> Deserializer for complex types is not created inside the generated JavaScript
> client code
> -----------------------------------------------------------------------------------------
>
> Key: CXF-2139
> URL: https://issues.apache.org/jira/browse/CXF-2139
> Project: CXF
> Issue Type: Bug
> Components: JavaScript Client
> Affects Versions: 2.1.4, 2.2
> Environment: Java 1.6, ANT based build script
> Reporter: Juergen Kellerer
>
> The JavaScript client code generator successfully creates serializers and
> deserializers for first level soap requests and response objects. Serializing
> code is also created for complex types but the deserializer code is not
> created.
> Digging down the code it seems that the problem is in the class
> "org.apache.cxf.javascript.types.SchemaJavascriptBuilder" the following HACK
> made the JS client work correctly:
> ----
> public void domDeserializerFunction(QName name, XmlSchemaComplexType
> type) {
> utils = new JavascriptUtils(code);
> XmlSchemaSequence sequence = null;
> sequence = XmlSchemaUtils.getSequence(type);
> // HACK, use alternate way to get sequence
> if (sequence.getItems().getCount() == 0) {
> XmlSchemaSequence s = XmlSchemaUtils.getContentSequence(type);
> if (s != null) {
> System.err.println("HACK-applied, generating
> deserializer for " + name);
> sequence = s;
> }
> }
> // HACK-END, use alternate way to get sequence
> String typeObjectName = nameManager.getJavascriptName(name);
> ---
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.