The first one is a false assertion from the WS-I tools, if you read the WS-I BP erata, you'll see that it wasn't suposed to make inline schemas illegal.
The second one is because you have an rpc/encoded service, which uses that arrayType, you'll need to change your service to be doc/literal (probably wrapped) to be WS-I compliant.
 
Cheers
Simon
 

From: Eugene Shershnev [mailto:[EMAIL PROTECTED]
Sent: Thursday, January 20, 2005 1:58 PM
To: [EMAIL PROTECTED]
Subject: WS-I compliancy problem for generated wrapped WSDL

Hi All,
 
The WSDL generated from a simple class does not go though SOAPscope WS-I test.
It fails in 3 different points:
 
Assertion: WSI2102
Message: An XML schema import element references something other than an XML schema definition: the referenced element does not have "schema" from XML namespace "http://www.w3.org/2001/XMLSchema" as root element.
Detail Message: http://enterprise.ent

Assertion: WSI2108
Message: An Array declaration uses - restricts or extends - the soapenc:Array type, or the wsdl:arrayType attribute is used in the type declaration.
Detail Message: {http://localhost:9090/axis/services/ent}ArrayOf_xsd_anyType
 
Assertion: WSI2122
Result: failed
Message: A wsdl:types element contained a data type definition that is not an XML schema definition.
Detail Message: Error: UndeclaredPrefix: Cannot resolve 'tns2:Array' as a QName: the prefix 'tns2' is not declared.,
Error: cvc-datatype-valid.1.2.1: 'tns1:credentials' is not a valid 'NCName' value.
Here is the interface whose implementation was used to generate a WSDL.
 
package ent.enterprise;
 
import java.util.List;
 
public interface EntAPI
{
        public String login(String[] credentials, String locale);
        public void logout(String sid);
        public List list(String sid);
        public EntDocument load(String sid, String uri);
        public String create(String sid, String name);
        public void delete(String sid, String uri);
        public void write(String sid, String uri, byte[] data);
        public byte[] read(String sid, String uri, long offset, int length);
        public void clear(String sid, String uri);
}
 

public class EntDocument implements Serializable
{
        private String  _name;
        private long    _size;
        private String  _uri;
 
        public EntDocument()
        {
        }
 
        public String getName() { return _name; }
        public void setName(String name) { _name = name; }
 
        public long getSize() { return _size; }
        public void setSize(long size) { _size = size; }
 
        public String getURI() { return _uri; }
        public void setURI(String uri) { _uri = uri; }
}
 
 
The WSDL is generated "on-the-fly":
- a JAR file is on shared classpath
- Axis is deployed as a web app
- web services is deployed only using wsdd file
 
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="ent" provider="java:RPC" style="wrapped">
        <parameter name="className" value="ent.enterprise.EntAPI" />
        <parameter name="allowedMethods" value="load write clear list delete read create login logout"/>
        <beanMapping
                        xmlns:tns="http://enterprise.ent"
                    qname="tns:EntDocument"
                languageSpecificType="java:ent.enterprise.EntDocument"/>
    </service>
</deployment>
 
Here is the WSDL:
 
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://localhost:9090/axis/services/ent" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:9090/axis/services/ent" xmlns:intf="http://localhost:9090/axis/services/ent" xmlns:tns1="http://enterprise.ent" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.2RC2
Built on Nov 16, 2004 (12:19:44 EST)-->
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://enterprise.ent" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://localhost:9090/axis/services/ent"/>
   <element name="login">
    <complexType>
     <sequence>
      <element maxOccurs="unbounded" name="tns1:credentials" type="xsd:string"/>
      <element name="tns1:locale" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="loginResponse">
    <complexType>
     <sequence>
      <element name="loginReturn" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="logout">
    <complexType>
     <sequence>
      <element name="tns1:sid" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="logoutResponse">
    <complexType/>
   </element>
   <element name="clear">
    <complexType>
     <sequence>
      <element name="tns1:sid" type="xsd:string"/>
      <element name="tns1:uri" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="clearResponse">
    <complexType/>
   </element>
   <element name="load">
    <complexType>
     <sequence>
      <element name="tns1:sid" type="xsd:string"/>
      <element name="tns1:uri" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="loadResponse">
    <complexType>
     <sequence>
      <element name="loadReturn" type="tns1:EntDocument"/>
     </sequence>
    </complexType>
   </element>
   <complexType name="EntDocument">
    <sequence>
     <element name="URI" nillable="true" type="xsd:string"/>
     <element name="name" nillable="true" type="xsd:string"/>
     <element name="size" type="xsd:long"/>
    </sequence>
   </complexType>
   <element name="write">
    <complexType>
     <sequence>
      <element name="tns1:sid" type="xsd:string"/>
      <element name="tns1:uri" type="xsd:string"/>
      <element name="tns1:data" type="xsd:base64Binary"/>
     </sequence>
    </complexType>
   </element>
   <element name="writeResponse">
    <complexType/>
   </element>
   <element name="list">
    <complexType>
     <sequence>
      <element name="tns1:sid" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="listResponse">
    <complexType>
     <sequence>
      <element name="listReturn" type="impl:ArrayOf_xsd_anyType"/>
     </sequence>
    </complexType>
   </element>
   <element name="delete">
    <complexType>
     <sequence>
      <element name="tns1:sid" type="xsd:string"/>
      <element name="tns1:uri" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="deleteResponse">
    <complexType/>
   </element>
   <element name="read">
    <complexType>
     <sequence>
      <element name="tns1:sid" type="xsd:string"/>
      <element name="tns1:uri" type="xsd:string"/>
      <element name="tns1:offset" type="xsd:long"/>
      <element name="tns1:length" type="xsd:int"/>
     </sequence>
    </complexType>
   </element>
   <element name="readResponse">
    <complexType>
     <sequence>
      <element name="readReturn" type="xsd:base64Binary"/>
     </sequence>
    </complexType>
   </element>
   <element name="create">
    <complexType>
     <sequence>
      <element name="tns1:sid" type="xsd:string"/>
      <element name="tns1:name" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="createResponse">
    <complexType>
     <sequence>
      <element name="createReturn" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
  </schema>
  <schema elementFormDefault="qualified" targetNamespace="http://localhost:9090/axis/services/ent" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://enterprise.ent"/>
   <complexType name="ArrayOf_xsd_anyType">
    <complexContent>
     <restriction base="tns2:Array">
      <attribute ref="tns2:arrayType" wsdl:arrayType="xsd:anyType[]"/>
     </restriction>
    </complexContent>
   </complexType>
  </schema>
 </wsdl:types>
   <wsdl:message name="logoutResponse">
      <wsdl:part element="tns1:logoutResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="createRequest">
      <wsdl:part element="tns1:create" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="clearRequest">
      <wsdl:part element="tns1:clear" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="clearResponse">
      <wsdl:part element="tns1:clearResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="readRequest">
      <wsdl:part element="tns1:read" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="deleteResponse">
      <wsdl:part element="tns1:deleteResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="logoutRequest">
      <wsdl:part element="tns1:logout" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="loginResponse">
      <wsdl:part element="tns1:loginResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="writeRequest">
      <wsdl:part element="tns1:write" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="readResponse">
      <wsdl:part element="tns1:readResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="loadRequest">
      <wsdl:part element="tns1:load" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="deleteRequest">
      <wsdl:part element="tns1:delete" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="writeResponse">
      <wsdl:part element="tns1:writeResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="listRequest">
      <wsdl:part element="tns1:list" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="listResponse">
      <wsdl:part element="tns1:listResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="loadResponse">
      <wsdl:part element="tns1:loadResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="createResponse">
      <wsdl:part element="tns1:createResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="loginRequest">
      <wsdl:part element="tns1:login" name="parameters"/>
   </wsdl:message>
   <wsdl:portType name="EntAPI">
      <wsdl:operation name="login">
         <wsdl:input message="impl:loginRequest" name="loginRequest"/>
         <wsdl:output message="impl:loginResponse" name="loginResponse"/>
      </wsdl:operation>
      <wsdl:operation name="logout">
         <wsdl:input message="impl:logoutRequest" name="logoutRequest"/>
         <wsdl:output message="impl:logoutResponse" name="logoutResponse"/>
      </wsdl:operation>
      <wsdl:operation name="clear">
         <wsdl:input message="impl:clearRequest" name="clearRequest"/>
         <wsdl:output message="impl:clearResponse" name="clearResponse"/>
      </wsdl:operation>
      <wsdl:operation name="load">
         <wsdl:input message="impl:loadRequest" name="loadRequest"/>
         <wsdl:output message="impl:loadResponse" name="loadResponse"/>
      </wsdl:operation>
      <wsdl:operation name="write">
         <wsdl:input message="impl:writeRequest" name="writeRequest"/>
         <wsdl:output message="impl:writeResponse" name="writeResponse"/>
      </wsdl:operation>
      <wsdl:operation name="list">
         <wsdl:input message="impl:listRequest" name="listRequest"/>
         <wsdl:output message="impl:listResponse" name="listResponse"/>
      </wsdl:operation>
      <wsdl:operation name="delete">
         <wsdl:input message="impl:deleteRequest" name="deleteRequest"/>
         <wsdl:output message="impl:deleteResponse" name="deleteResponse"/>
      </wsdl:operation>
      <wsdl:operation name="read">
         <wsdl:input message="impl:readRequest" name="readRequest"/>
         <wsdl:output message="impl:readResponse" name="readResponse"/>
      </wsdl:operation>
      <wsdl:operation name="create">
         <wsdl:input message="impl:createRequest" name="createRequest"/>
         <wsdl:output message="impl:createResponse" name="createResponse"/>
      </wsdl:operation>
   </wsdl:portType>
   <wsdl:binding name="entSoapBinding" type="impl:EntAPI">
      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="login">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="loginRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="loginResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="logout">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="logoutRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="logoutResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="clear">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="clearRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="clearResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="load">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="loadRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="loadResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="write">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="writeRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="writeResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="list">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="listRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="listResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="delete">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="deleteRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="deleteResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="read">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="readRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="readResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="create">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="createRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="createResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="EntAPIService">
      <wsdl:port binding="impl:entSoapBinding" name="ent">
         <wsdlsoap:address location="http://localhost:9090/axis/services/ent"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>
 
I will appreciate any help with the pointers on fixing this WSDL and hopefully some information on tns2 namespace.
 
Thanks,
Eugene

Reply via email to