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
|
- RE: WS-I compliancy problem for generated wrapped WSDL Eugene Shershnev
- RE: WS-I compliancy problem for generated wrapped W... Simon Fell
- Re: WS-I compliancy problem for generated wrapp... Eugene Shershnev
- Re: WS-I compliancy problem for generated w... Anne Thomas Manes