You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Andreas Vollmy (JIRA)" <ji...@apache.org> on 2012/11/22 09:54:59 UTC
[jira] [Commented] (AXIS2-5443) WSDL2C: incomplete code in
axis2_extension_mapper.c for xsd choice type
[ https://issues.apache.org/jira/browse/AXIS2-5443?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13502656#comment-13502656 ]
Andreas Vollmy commented on AXIS2-5443:
---------------------------------------
I had a very similar problem, possibly same cause: AXIS2-5457
> WSDL2C: incomplete code in axis2_extension_mapper.c for xsd choice type
> -----------------------------------------------------------------------
>
> Key: AXIS2-5443
> URL: https://issues.apache.org/jira/browse/AXIS2-5443
> Project: Axis2
> Issue Type: Bug
> Components: codegen, databinding
> Affects Versions: 1.6.0, 1.6.1, 1.6.2
> Environment: MacOS X 10.7.5
> $ java -version
> java version "1.6.0_37"
> Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
> Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
> Reporter: Jürgen Keil
> Fix For: 1.5.6
>
> Attachments: bug.wsdl, bug.xml, bug.xsd, test.c
>
>
> I'm trying to build an ANSI C xml (de)serializer for an xml schema using axis2c and axis2.
> The xml schema contains serveral choice elements.
> The xml deserializer build by axis2 WSDL2C has problems parsing these choice elements.
> The root cause is missing internal choice types in the generated axis2_extension_mapper.c file.
> Here's an example which reproduces the problem:
> bug.xsd schema file (contains a choice element)
> --------------------------------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> <xs:schema xmlns="urn:axis2:choice:bug" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:axis2:choice:bug">
> <xs:element name="Document" type="Document"/>
> <xs:complexType name="Document">
> <xs:sequence>
> <xs:choice>
> <xs:element name="IBAN" type="IBAN2007Identifier"/>
> <xs:element name="Othr" type="GenericAccountIdentification1"/>
> </xs:choice>
> </xs:sequence>
> </xs:complexType>
> <xs:complexType name="GenericAccountIdentification1">
> <xs:sequence>
> <xs:element name="Id" type="Max34Text"/>
> </xs:sequence>
> </xs:complexType>
> <xs:simpleType name="IBAN2007Identifier">
> <xs:restriction base="xs:string">
> <xs:pattern value="[A-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"/>
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType name="Max34Text">
> <xs:restriction base="xs:string">
> <xs:minLength value="1"/>
> <xs:maxLength value="34"/>
> </xs:restriction>
> </xs:simpleType>
> </xs:schema>
> --------------------------------------------------------------------------------
> bug.wsdl, references the bug.xsd schema file
> --------------------------------------------------------------------------------
> <definitions targetNamespace="http://localhost/bug/wsdl"
> xmlns="http://schemas.xmlsoap.org/wsdl/"
> xmlns:tns="http://localhost/bug/wsdl"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:types="urn:axis2:choice:bug"
> >
> <import namespace="urn:axis2:choice:bug" location="bug.xsd" />
> <message name="getReq">
> <part name="parameters" element="types:Document" />
> </message>
> <message name="getResp">
> <part name="parameters" element="types:Document" />
> </message>
> <portType name="PortType">
> <operation name="get">
> <input message="tns:getReq" />
> <output message="tns:getResp" />
> </operation>
> </portType>
> <binding name="SOAPBinding" type="tns:PortType">
> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
> <operation name="get">
> <soap:operation style="document" soapAction="get" />
> <input>
> <soap:body use="literal" />
> </input>
> <output>
> <soap:body use="literal" />
> </output>
> </operation>
> </binding>
> <service name="Service">
> <port name="SOAPPort" binding="tns:SOAPBinding">
> <soap:address location="http://localhost:8080/axis2/services/Service" />
> </port>
> </service>
> </definitions>
> --------------------------------------------------------------------------------
> And a sample xml document, bug.xml
> --------------------------------------------------------------------------------
> <Document xmlns="urn:axis2:choice:bug" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:axis2:choice:bug bug.xsd">
> <IBAN>DE1234</IBAN>
> </Document>
> --------------------------------------------------------------------------------
> Now I generate the ANSI C xml (de)serializer code using WSDL2C,
> axis2c-bin-1.7.0-linux/bin/tools/wsdl2c/WSDL2C.sh -uri bug.wsdl -d adb -u -S bug
> And finally a simple test program to call the generated xml deserializer for the <Document> root element:
> --------------------------------------------------------------------------------
> #include <stdio.h>
> #include <axiom.h>
> #include <axis2_util.h>
> #include <axiom_stax_builder.h>
> #include "adb_Document.h"
> int
> main(int argc, char **argv)
> {
> char *filename = "bug.xml";
> const axutil_env_t *env = NULL;
> axis2_status_t st;
> axiom_node_t* parent = NULL;
> axis2_bool_t is_early_node_valid;
> axiom_xml_reader_t *parser;
> axiom_stax_builder_t *builder;
> axiom_document_t *doc;
> adb_Document_t* Document;
>
> env = axutil_env_create_all("/tmp/axis.log", AXIS2_LOG_LEVEL_TRACE);
> if (argv[1] != NULL)
> filename = argv[1];
> parser = axiom_xml_reader_create_for_file(env, filename, AXIS2_UTF_8);
> if (parser == NULL) {
> fprintf(stderr, "failed to create parser for %s\n", filename);
> exit(1);
> }
> builder = axiom_stax_builder_create(env, parser);
> doc = axiom_stax_builder_get_document(builder, env);
> parent = axiom_document_get_root_element(doc, env);
> Document = adb_Document_create(env);
> st = adb_Document_deserialize(Document, env, &parent, &is_early_node_valid, 0);
> if (st == AXIS2_SUCCESS)
> printf("OK\n");
> else
> printf("status=%d\n", st),
> exit(0);
> }
> --------------------------------------------------------------------------------
> The parser fails with the following error message:
> $ cat /tmp/axis.log
> [Sun Oct 28 15:15:36 2012] [error] adb_Document.c(263) failed in building adb object for element DocumentChoice_type0
> [Sun Oct 28 15:15:36 2012] [error] adb_Document.c(273) failed in setting the value for DocumentChoice_type0
> When I look at the generated axis2_extension_mapper.c file, I notice that there are several places
> that handle the "adb_Document" type, but the internal "adb_DocumentChoice_type0" type is missing.
> As soon as I manually add "adb_DocumentChoice_type0" to the generated file
> axis2_extension_mapper.c I get a working xml deserializer.
> Workaround: Use axis2 1.5.6 - the old axis2 1.5.6 WSDL2C is able to produce a working xml
> deserializer
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org