Hello,

I am trying to run wsdl2java against my WSDL, but I am getting this error:

WSDLException (at /wsdl:definitions/types): faultCode=INVALID_WSDL:
Encountered illegal extension element 'types' in the context of a
'javax.wsdl.Definition'. Extension elements must be in a namespace
other than WSDL's.:
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseExtensibilityElement(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at 
org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:516)
    at 
org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:495)
    at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361)
    at java.lang.Thread.run(Unknown Source)

Any idea what causes this problem?  I am using a very basic service
and the WSDL is generated by axis.  Here is my WSDL:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
xmlns:impl="http://localhost/axis/services/MyService";
xmlns:intf="http://localhost/axis/services/MyService";
xmlns:apachesoap="http://xml.apache.org/xml-soap";
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:tns1="urn:MyService"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
targetNamespace="http://localhost/axis/services/MyService";>
<!--WSDL created by Apache Axis version: 1.2.1
Built on Jun 14, 2005 (09:15:57 EDT)-->
 <types>
  <schema xmlns="http://www.w3.org/2001/XMLSchema";
targetNamespace="urn:MyService">
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   <complexType name="MyBean">
    <sequence>
     <element name="name" nillable="true" type="xsd:string"/>
    </sequence>

   </complexType>
  </schema>
 </types>

   <wsdl:message name="getMyBeanResponse">

      <wsdl:part name="getMyBeanReturn" type="tns1:MyBean"/>

   </wsdl:message>

   <wsdl:message name="getMyBeanRequest">

   </wsdl:message>

   <wsdl:portType name="MyService">

      <wsdl:operation name="getMyBean">

         <wsdl:input name="getMyBeanRequest" message="impl:getMyBeanRequest"/>

         <wsdl:output name="getMyBeanResponse"
message="impl:getMyBeanResponse"/>

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="MyServiceSoapBinding" type="impl:MyService">

      <wsdlsoap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="getMyBean">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getMyBeanRequest">

            <wsdlsoap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
namespace="http://paulbarry.com"/>

         </wsdl:input>

         <wsdl:output name="getMyBeanResponse">

            <wsdlsoap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
namespace="http://localhost/axis/services/MyService"/>

         </wsdl:output>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="MyServiceService">

      <wsdl:port name="MyService" binding="impl:MyServiceSoapBinding">

         <wsdlsoap:address location="http://localhost/axis/services/MyService"/>

      </wsdl:port>

   </wsdl:service>

</wsdl:definitions>

The classes involved are very basic.  I have this bean:

package com.paulbarry;

public class MyBean {

    private String name;

    public MyBean() {}
    public MyBean(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

And this service:

package com.paulbarry;

public class MyService {

    public MyBean getMyBean() {
        return new MyBean("My Bean");
    }

}

I have this client, which works perfectly fine:

package com.paulbarry;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;

public class MyClient {

    public static void main(String[] args) throws Exception {

        String endpoint =
            "http://localhost/axis/services/MyService";;

       Service  service = new Service();
       Call call = (Call)service.createCall();

       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
       call.setOperationName(new QName("getMyBean") );

       QName qn = new QName("urn:MyService","MyBean");
       call.registerTypeMapping(MyBean.class, qn,
           new BeanSerializerFactory(MyBean.class, qn),
           new BeanDeserializerFactory(MyBean.class, qn));
       call.setReturnType(qn);

       MyBean bean = (MyBean)call.invoke(new Object[] {});

       System.out.println(bean.getName());

    }

}

And here is my deployment descriptor:

<deployment xmlns="http://xml.apache.org/axis/wsdd/";
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";>

  <service name="MyService" provider="java:RPC">
    <parameter name="className" value="com.paulbarry.MyService"/>
    <parameter name="allowedMethods" value="*"/>
    <beanMapping qname="myNS:MyBean" xmlns:myNS="urn:MyService"
languageSpecificType="java:com.paulbarry.MyBean"/>
 </service>

</deployment>

Reply via email to