All,
I have a web service implemented in Java using Axis. In this service, I have
a method that takes some simple params and returns a single attachment.
Following the Axis examples, I have defined the signature of this method as:
public DataHandler fileReadAttach(AvakiPrincipal principal, String path,
long offset, int count)
throws RemoteException;
Then, I use java2wsdl wrapped/literal to generate a WSDL for this. The
relevant parts of the WSDL are as below:
<element name="fileReadAttachResponse">
<complexType>
<sequence>
<element name="fileReadAttachReturn"
type="apachesoap:DataHandler"/>
</sequence>
</complexType>
</element>
...
<wsdl:operation name="fileReadAttach">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="fileReadAttachRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="fileReadAttachResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
Notice how the attachment refers to an apache:DataHandler element. This
works without a problem when I write Java/Axis clients that target this
service. However, .NET won't even swallow the WSDL because it does not
recognise the apachesoap namespace.
My question is: why isn't the generated WSDL something like:
<wsdl:operation name="fileReadAttach">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="fileReadAttachRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="fileReadAttachResponse">
<mime:multipartRelated>
<mime:part>
<wsdlsoap:body parts="body" use="literal"/>
</mime:part>
<mime:part>
<mime:content part="docs" type="text/plain"/>
</mime:part>
</mime:multipartRelated>
</wsdl:output>
</wsdl:operation>
Seems to me that's how it should come out. How do I make it so?
For giggles, I changed the WSDL by hand and tried to generate stubs for it.
wsdl2java failed to do so, with a NullPointerException:
[axis-wsdl2java] WSDL2Java
/home/local/anand/System/Jabc/wsdl/MyServiceWithMIMEDocLit.wsdl
[axis-wsdl2java] Running Wsdl2javaAntTask with parameters:
[axis-wsdl2java] verbose:false
[axis-wsdl2java] debug:false
[axis-wsdl2java] quiet:false
[axis-wsdl2java] server-side:true
[axis-wsdl2java] skeletonDeploy:false
[axis-wsdl2java] helperGen:false
[axis-wsdl2java] factory:null
[axis-wsdl2java] nsIncludes:[]
[axis-wsdl2java] nsExcludes:[]
[axis-wsdl2java] factoryProps:[]
[axis-wsdl2java] testCase:false
[axis-wsdl2java] noImports:false
[axis-wsdl2java] NStoPkg:{urn:MyServiceCommon=com.abc.api.common.doclit,
urn:MyServiceWithMIMEDocLit=com.abc.ws.stubs}
[axis-wsdl2java] output:/home/local/anand/System/Jabc/wsdl
[axis-wsdl2java] protocolHandlerPkgs:
[axis-wsdl2java] deployScope:
[axis-wsdl2java]
URL:/home/local/anand/System/Jabc/wsdl/MyServiceWithMIMEDocLit.wsdl
[axis-wsdl2java] all:false
[axis-wsdl2java] typeMappingVersion:1.1
[axis-wsdl2java] timeout:45000
[axis-wsdl2java] failOnNetworkErrors:false
[axis-wsdl2java] printStackTraceOnFailure:true
[axis-wsdl2java] namespaceMappingFile:null
[axis-wsdl2java] username:null
[axis-wsdl2java] :passwordnull
[axis-wsdl2java] :noWrappedfalse
[axis-wsdl2java] :implementationClassNamenull
[axis-wsdl2java] :classpathnull
[axis-wsdl2java] http.proxyHost=null
[axis-wsdl2java] http.proxyPort=null
[axis-wsdl2java] http.proxyUser=null
[axis-wsdl2java] http.proxyPassword=null
[axis-wsdl2java] socks.proxyHost=null
[axis-wsdl2java] socks.proxyPort=null
[axis-wsdl2java] java.lang.NullPointerException
[axis-wsdl2java] at
org.apache.axis.wsdl.symbolTable.SymbolTable.addMIMETypes(SymbolTable.java:2864)
[axis-wsdl2java] at
org.apache.axis.wsdl.symbolTable.SymbolTable.fillInBindingInfo(SymbolTable.java:2544)
[axis-wsdl2java] at
org.apache.axis.wsdl.symbolTable.SymbolTable.populateBindings(SymbolTable.java:2464)
[axis-wsdl2java] at
org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:731)
[axis-wsdl2java] at
org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:531)
[axis-wsdl2java] at
org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:506)
[axis-wsdl2java] at
org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:483)
[axis-wsdl2java] at
org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:356)
[axis-wsdl2java] at java.lang.Thread.run(Thread.java:534)
Any idea why Axis is failing on what looks like a legitimate WSDL? Should I
open a bug? Thanks!
Anand