For what its worth, I figured out the source of the double schema.  Although my custom Serializers were coded to use a specific namespace, I had not updated the namespace of the type mapping in the WSDD:

    <typeMapping qname="list:ListKey" xmlns:list="http://localhost/List"

When generateWSDL gets called, it uses the methods defined in the class beign puiblished RPC style to find the parameter types -- and for the methods which had a ListKey parameter, it was using the typeMapping which told it to use the shorter namespace.  By changing the type mapping...

    <typeMapping qname="list:ListKey" xmlns:list="http://localhost:8081/List/services/List"

... to match what I had coded in my serializers, I was able to eliminate the second name space and keep everything in the first.

I still would like to know how to change the target namespace of the whole wsdl:definitions.

Regards,
Brian.

Brian J. Sayatovic wrote:
I'm trying to use the ?WSDL generating capabilities of Axis to generate a WSDL Consumable by a non-Axis client, Laszlo.  However is limited in that it expects the targetNamespace of the schema to be the same as the targetNamespace of the wsdl:definitions.

The wsdl:definitions targetNamespace appears to be the full path to my service:

   <wsdl:definitions targetNamespace="http://localhost:8081/List/services/List" ...

However, my schema namespace isn't so simple.  In fact, I have two schemas for some reason.  They are:

   <wsdl:types>
       <schema targetNamespace="http://localhost:8081/List/services/List" xmlns="http://www.w3.org/2001/XMLSchema">
           <import namespace="http://localhost/List" />
           <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
       </schema>
       <schema targetNamespace="http://localhost/List" xmlns="http://www.w3.org/2001/XMLSchema">
           <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
           <complexType name="ListKey">
               <all>
                   <element name="value" type="xsd:string" />
               </all>
           </complexType>
           <complexType name="ListOfThings">
               <all>
                   <element name="key" type="impl:ListKey" />
               </all>
           </complexType>
       </schema>
   </wsdl:types>

In the interest of full disclosure, I had to create custom Serializers because Laszlo also can't handle an xsd:sequence, so I'm using an xsd:all for my complexTypes.  Here's the writeSchema method for one of my types:

   public Element writeSchema(Class javaType, Types types) throws Exception {
       Element complexTypeElement = types.createElement("complexType");
       complexTypeElement.setAttribute("name", "ListKey");
             Element allElement = types.createElement("all");
       complexTypeElement.appendChild(allElement);
             Element elementElement = types.createElement("element");
       elementElement.setAttribute("name", "value");
       elementElement.setAttribute("type", "xsd:string");
       allElement.appendChild(elementElement);

       types.writeSchemaElement(ListManagerAxisDelegate.NAMESPACE, complexTypeElement);

       return complexTypeElement;
   }

And elsewhere, I have ListManagerAxisDelegate.NAMESPACE set to be:

       http://localhost:8081/List/services/List

So, I need to figure out who to get the targetNamespace of the schema with my types to match the targetNamespace of my wsdl:definitions.  The thing is, I thought I took care of that by using the writeSchemaElemnt... but that just ended up creatign an additional schema!

Any ideas?

Regards,
Brian.




Reply via email to