You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ax...@ws.apache.org on 2004/08/26 15:12:30 UTC
[jira] Created: (AXIS-1531) WSDL generated for attachments is non-standard
Message:
A new issue has been created in JIRA.
---------------------------------------------------------------------
View the issue:
http://issues.apache.org/jira/browse/AXIS-1531
Here is an overview of the issue:
---------------------------------------------------------------------
Key: AXIS-1531
Summary: WSDL generated for attachments is non-standard
Type: Bug
Status: Unassigned
Priority: Major
Project: Axis
Components:
WSDL processing
Versions:
beta-2
Assignee:
Reporter: Anand Natrajan
Created: Thu, 26 Aug 2004 6:12 AM
Updated: Thu, 26 Aug 2004 6:12 AM
Environment: Solaris 8, Ant 1.6.1
Description:
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>
otice how the attachment refers to an apache:DataHandler element. This works wit
hout 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 nam
espace.
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?
----------
Anne Thomas Manes responds:
Btw -- WS-I just published the Attachments Profile [1].
Here's an example of a correct WSDL description for document/literal binding. Note that Axis should not be using the apachesoap:dataHandler datatype. Also note that even though the binding is doc/literal, the MIME attachment message parts must be defined as types (type="xsd:base64binary") rather than as elements.
<?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions xmlns:types="http://example.com/mimetypes"
xmlns:ref="http://ws-i.org/profiles/basic/1.1/xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="http://example.com/mimewsdl"
xmlns:tns="http://example.com/mimewsdl">
<wsdl:types>
<xsd:schema targetNamespace="http://example.com/mimetypes"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://ws-i.org/profiles/basic/1.1/xsd"
/>
<xsd:element name="ClaimDetail" type="types:ClaimDetailType"/>
<xsd:complexType name="ClaimDetailType">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="ClaimForm" type="ref:swaRef"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="ClaimRefNo" type="xsd:string"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="ClaimIn">
<wsdl:part name="body" element="types:ClaimDetail"/>
<wsdl:part name="ClaimPhoto" type="xsd:base64Binary"/>
</wsdl:message>
<wsdl:message name="ClaimOut">
<wsdl:part name="out" element="types:ClaimRefNo"/>
</wsdl:message>
<wsdl:portType name="ClaimPortType">
<wsdl:operation name="SendClaim">
<wsdl:input message="tns:ClaimIn"/>
<wsdl:output message="tns:ClaimOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ClaimBinding" type="tns:ClaimPortType">
<soapbind:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SendClaim">
<soapbind:operation soapAction="http://example.com/soapaction"/>
<wsdl:input>
<mime:multipartRelated>
<mime:part>
<soapbind:body parts="body" use="literal"/>
</mime:part>
<mime:part>
<mime:content part="ClaimPhoto" type="image/jpeg"/>
</mime:part>
</mime:multipartRelated>
</wsdl:input>
<wsdl:output>
<soapbind:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>
[1] http://www.ws-i.org/Profiles/AttachmentsProfile-1.0-2004-08-24.html
---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira