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