[ 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-unsubscr...@axis.apache.org For additional commands, e-mail: java-dev-h...@axis.apache.org