When I use the Microsoft.NET wsdl.exe tool to create C# stubs I get the following error:
Microsoft (R) Web Services Description Language Utility [Microsoft (R) .NET Framework, Version 1.1.4322.573] Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.
Error: Unable to import binding 'DeziroSoapBinding' from namespace 'http://localhost/api/Deziro'.
- Unable to import operation 'doAttachement'.
- The datatype 'DataHandler' is missing.
If you would like more help, please type "wsdl /?".
Using the wsdl tool from Apache I get a nice stub for my service: package com.cuhka.soap.service;
public interface Deziro extends java.rmi.Remote {
public javax.activation.DataHandler doAttachement() throws java.rmi.RemoteException;
public com.cuhka.soap.model.SomeType doFoo(java.lang.String foo, java.lang.String bar) throws java.rmi.RemoteException;
}
Note that I've mapped 'SomeData' to 'SomeType', but it works fine.
The "service" I have created looks as follows: package net.lerutte.deziro.soap;
public class Deziro {
public DataHandler doAttachement() { return null; }
public SomeData doFoo(String foo,String bar) { return new SomeData(); } }
My /WEB-INF/server-config.wsdd is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:deziro="urn:Deziro">
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<service name="Deziro" provider="java:RPC"> <parameter name="className" value="net.lerutte.deziro.soap.Deziro"/> <parameter name="allowedMethods" value="*"/> </service>
<transport name="http"> <requestFlow> <handler type="URLMapper"/> <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/> </requestFlow>
<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
</transport>
<transport name="local"> <responseFlow> <handler type="LocalResponder"/> </responseFlow> </transport>
<beanMapping languageSpecificType="java:net.lerutte.deziro.soap.SomeData" qname="cuhka:SomeType" xmlns:cuhka="http://www.cuhka.com/soap"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory" languageSpecificType="java:javax.activation.DataHandler" qname="deziro:DataHandler" serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> </deployment>
The wsdl, generated by Axis is as follows
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://localhost/api/Deziro" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost/api/Deziro" xmlns:intf="http://localhost/api/Deziro" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://www.cuhka.com/soap" 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 targetNamespace="http://www.cuhka.com/soap" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://xml.apache.org/xml-soap"/>
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="SomeType">
<sequence>
<element name="bar" nillable="true" type="soapenc:string"/>
<element name="foo" nillable="true" type="soapenc:string"/>
<element name="fubar" nillable="true" type="soapenc:string"/>
<element name="timestamp" nillable="true" type="xsd:dateTime"/>
</sequence>
</complexType>
</schema>
</wsdl:types>
<wsdl:message name="doFooRequest">
<wsdl:part name="foo" type="soapenc:string"/>
<wsdl:part name="bar" type="soapenc:string"/>
</wsdl:message>
<wsdl:message name="doAttachementRequest">
</wsdl:message>
<wsdl:message name="doAttachementResponse">
<wsdl:part name="doAttachementReturn" type="apachesoap:DataHandler"/>
</wsdl:message>
<wsdl:message name="doFooResponse">
<wsdl:part name="doFooReturn" type="tns1:SomeType"/>
</wsdl:message>
<wsdl:portType name="Deziro">
<wsdl:operation name="doAttachement">
<wsdl:input message="impl:doAttachementRequest" name="doAttachementRequest"/>
<wsdl:output message="impl:doAttachementResponse" name="doAttachementResponse"/>
</wsdl:operation>
<wsdl:operation name="doFoo" parameterOrder="foo bar">
<wsdl:input message="impl:doFooRequest" name="doFooRequest"/>
<wsdl:output message="impl:doFooResponse" name="doFooResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DeziroSoapBinding" type="impl:Deziro">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="doAttachement">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="doAttachementRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soap.deziro.lerutte.net" use="encoded"/>
</wsdl:input>
<wsdl:output name="doAttachementResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost/api/Deziro" use="encoded"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="doFoo">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="doFooRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soap.deziro.lerutte.net" use="encoded"/>
</wsdl:input>
<wsdl:output name="doFooResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost/api/Deziro" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="DeziroService">
<wsdl:port binding="impl:DeziroSoapBinding" name="Deziro">
<wsdlsoap:address location="http://localhost/api/Deziro"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>