Eugene's point is that he attempted to do deploy a wrapped style
service using only an implementation and a WSDD file (which Axis claim
to do), but the generated WSDL document produced errors.

It did, in fact generate a doc/literal "wrapped" style service (not
rpc/encoded), but there are still errors in the generated WSDL.

In particular, there are a number of elements defined in the schema
with invalid names. An element name must be of NCName type, but they
have been give QNames instead of NCNames. For example:

  <element name="tns1:locale" type="xsd:string"/>

should be defined like this instead:

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

Also, it defines an complex type (ArrayOf_xsd_anyType) based on the
array convention defined in SOAP Encoding, which is not permitted by
WS-I.

These are bugs. Please file a bug report.

- Anne


On Fri, 21 Jan 2005 09:55:16 -0500, Eugene Shershnev <[EMAIL PROTECTED]> wrote:
> Thanks Simon!
>  
> Regarding the 2nd one, how come I "have rpc/encoded service"?
> In the .wsdd file:
> <service name="ent" provider="java:RPC" style="wrapped">
> Is there something else I have to specify in there?
>  
> And the 3rd one looks like an error to me - a namespace isn't defined
> anywhere.
>  
> Thanks,
> Eugene
>  
> ----- Original Message ----- 
> From: Simon Fell 
> To: [EMAIL PROTECTED] ; Eugene Shershnev 
> Sent: Thursday, January 20, 2005 5:01p
> Subject: RE: WS-I compliancy problem for generated wrapped WSDL
> 
> 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