[ 
https://issues.apache.org/jira/browse/CXF-2139?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12693571#action_12693571
 ] 

Juergen Kellerer commented on CXF-2139:
---------------------------------------

.. 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.

Reply via email to