Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-1780

WSDL2JAVA fails with multiple anonymous simple types

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Blocker
    • Resolution: Fixed
    • 1.1
    • None
    • codegen
    • None
    • JRE1.4.2, Tomcat 4, Axis 2 1.1

    Description

      The problem is that WSDL2JAVA fails when there is more than 1 anonymous simple type. For some reason it works fine if there is 1 anonymous simple type. I'm not sure but this may affect multiple anonymous complex types as well.

      Consider the example where the schema defines 2 elements (first and last name). If the schema defined in the WSDL includes 1 anonymous simple type, everything works fine (like this)...

      <xsd:element name="firstName">
      <xsd:simpleType>
      <xsd:restriction base="xsd:string">
      <xsd:maxLength value="10" />
      </xsd:restriction>
      </xsd:simpleType>
      </xsd:element>

      <xsd:element name="lastName" type="xsd:string" />

      As soon as you add more than one anonymous simple type (like below) WSDL2JAVA throws an exception.
      <xsd:element name="firstName">
      <xsd:simpleType>
      <xsd:restriction base="xsd:string">
      <xsd:maxLength value="10" />
      </xsd:restriction>
      </xsd:simpleType>
      </xsd:element>

      <xsd:element name="lastName">
      <xsd:simpleType>
      <xsd:restriction base="xsd:string">
      <xsd:maxLength value="20" />
      </xsd:restriction>
      </xsd:simpleType>
      </xsd:element>

      The exception and full WSDL is listed at the bottom of this email. We can work around this problem by pulling out all the anonymous simple types and creating named types. However we are not the ones generating the service code and WSDL. It is being generated by another language and it uses these anonymous simple (and complex) types extensively. So we would have to do this for some very complex WSDL across a lot of services and hundreds of operations. And each time a service or operation was changed we have to do it by hand all over again which would be very tedious and error prone.

      Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException
      : java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
      at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGener
      ationEngine.java:224)
      at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:32)
      at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:21)
      Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetExcepti
      on
      at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(Simp
      leDBExtension.java:52)
      at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGener
      ationEngine.java:177)
      ... 2 more
      Caused by: java.lang.reflect.InvocationTargetException
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
      java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
      sorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(Simp
      leDBExtension.java:49)
      ... 3 more
      Caused by: org.apache.axis2.schema.SchemaCompilationException: java.lang.NullPoi
      nterException
      at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:25
      7)
      at org.apache.axis2.schema.ExtensionUtility.invoke(ExtensionUtility.java
      :72)
      ... 8 more
      Caused by: java.lang.NullPointerException
      at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.
      java:592)
      at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.
      java:489)
      at org.apache.axis2.schema.SchemaCompiler.process(SchemaCompiler.java:14
      88)
      at org.apache.axis2.schema.SchemaCompiler.processParticle(SchemaCompiler
      .java:1450)
      at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompi
      ler.java:950)
      at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(
      SchemaCompiler.java:909)
      at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.j
      ava:864)
      at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.
      java:527)
      at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.
      java:499)
      at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:33
      6)
      at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:24
      8)
      ... 9 more

      Full WSDL

      <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
      <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
      name="AddressBook" targetNamespace="http://sears.org/"
      xmlns:sears="http://sears.org/"
      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <wsdl:types>
      <xsd:schema elementFormDefault="qualified"
      targetNamespace="http://sears.org/" xmlns:s1="http://sears.org/">

      <xsd:complexType name="Person">
      <xsd:sequence>
      <xsd:element name="firstName" type="xsd:string" />
      <xsd:element name="lastName" type="xsd:string" />
      </xsd:sequence>
      </xsd:complexType>

      <xsd:complexType name="AddressBookEntry">
      <xsd:sequence>
      <xsd:element name="firstName">
      <xsd:simpleType>
      <xsd:restriction base="xsd:string">
      <xsd:maxLength value="10" />
      </xsd:restriction>
      </xsd:simpleType>
      </xsd:element>
      <xsd:element name="lastName">
      <xsd:simpleType>
      <xsd:restriction base="xsd:string">
      <xsd:maxLength value="20" />
      </xsd:restriction>
      </xsd:simpleType>
      </xsd:element>
      <xsd:element name="streetAddress" type="xsd:string" />
      <xsd:element name="city" type="xsd:string" />
      <xsd:element name="state" type="xsd:string" />
      <xsd:element name="zipCode" type="xsd:int" />
      <xsd:element name="phoneNumber" type="xsd:string" />
      </xsd:sequence>
      </xsd:complexType>

      <xsd:element name="addressLookupRequest" type="Person" />

      <xsd:element name="addressLookupResponse"
      type="AddressBookEntry" />
      </xsd:schema>
      </wsdl:types>
      <wsdl:message name="AddressLookupIn">
      <wsdl:part element="sears:addressLookupRequest"
      name="parameters" />
      </wsdl:message>
      <wsdl:message name="AddressLookupOut">
      <wsdl:part element="sears:addressLookupResponse"
      name="parameters" />
      </wsdl:message>
      <wsdl:portType name="AddressBookPortType">
      <wsdl:operation name="AddressLookup">
      <wsdl:input message="sears:AddressLookupIn"
      name="addressLookupRequest" />
      <wsdl:output message="sears:AddressLookupOut"
      name="addressLookupResponse" />
      </wsdl:operation>
      </wsdl:portType>
      <wsdl:binding name="AddressBookBinding"
      type="sears:AddressBookPortType">
      <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
      <wsdl:operation name="AddressLookup">
      <soap:operation soapAction="AddressLookup" style="document" />
      <wsdl:input name="addressLookupRequest">
      <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output name="addressLookupResponse">
      <soap:body use="literal" />
      </wsdl:output>
      </wsdl:operation>
      </wsdl:binding>
      <wsdl:service name="AddressBook">
      <wsdl:port binding="sears:AddressBookBinding"
      name="AddressBookPortType">
      <soap:address
      location="http://localhost:8080/axis2/services/AddressBook" />
      </wsdl:port>
      </wsdl:service>
      </wsdl:definitions>

      Attachments

        Activity

          People

            Unassigned Unassigned
            tdoolitt Todd Doolittle
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: