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 "Rodrigo Ruiz (JIRA)" <ax...@ws.apache.org> on 2005/10/05 16:03:09 UTC
[jira] Commented: (AXIS-1283) can't use mime:multipartRelated in wsdl:output element of a wsdl:operation
[ http://issues.apache.org/jira/browse/AXIS-1283?page=comments#action_12331383 ]
Rodrigo Ruiz commented on AXIS-1283:
------------------------------------
Hi, is there any plan to solve this problem? It has been a year and a half since it was reported! :-D
Ok, now seriously. I think the problem is at more than one place:
- WSDL2Java should generate stubs and skeletons using DataHandlers when processing the mentioned WSDL files
- Java2WSDL should generate these files when the service has attachments (I guess a flag for selecting DIME/MIME should be added to the command-line)
- The server should generate runtime "standard" WSDLs. I don't know if there is enough deployment data to choose the service "preferred" attachment format.
DataHandlers are ok if you stay in Axis Java, but they are not portable at all. I am having problems even with Axis C++, the only one I expected to support them ;-)
> can't use mime:multipartRelated in wsdl:output element of a wsdl:operation
> --------------------------------------------------------------------------
>
> Key: AXIS-1283
> URL: http://issues.apache.org/jira/browse/AXIS-1283
> Project: Apache Axis
> Type: Bug
> Components: WSDL processing
> Versions: 1.1
> Environment: Mac OS v10.3.3(Darwin v7.3), Tomcat v5.0.19
> Reporter: Bill Bug
>
> I'm having trouble creating an appropriate WSDL file to make a service returning a large set of binary attachments.
> Neither Java2WSDL nor WSDL2Java appear to be ready to process with the markup for MIME attachments that should reside within the wsdl:output element of a wsdl:operation in the wsdl:binding section of a WSDL file.
> I've been trying to combine what I could pull from the documentation on WSDL2Java with the info in the very useful article:
> Web services programming tips and tricks: SOAP attachments with JAX-RPC
> http://www-106.ibm.com/developerworks/webservices/library/ws-tip-soapjax.html
> So far, I've not been successful.
> I've got an original implementation using SAAJ that works, but the code is much more complicated than it would be had I used JAX-RPC attachments as described in the article listed above.
> I created a very simple Interface that I ran through Java2WSDL to create my WSDL file.
> The Interface is as follows:
> <snippet>
> import java.io.File;
> import java.rmi.Remote;
> import java.rmi.RemoteException;
> /**
> *
> * @author billbug
> */
> public interface IRepositoryAccess extends Remote {
> public DataHandler[] getImages(Boolean returnZip, String imageSet) throws RemoteException;
> }
> </snippet>
> I assumed extrapolating from the article above that I could have a return type of DataHandler[] to return a collection of attached files.
> The WSDL generated from this interface is all exactly as I'd expect it to be - except in the wsdl:output element created within the wsdl:operation element for my function call within the wsdl:binding section of the WSDL.
> Unfortunately, all I get is:
> <snippet>
> <wsdl:output name="getImagesResponse">
> <wsdlsoap:body namespace="urn:RepositoryAccessService" use="encoded"/>
> </wsdl:output>
> </snippet>
> According to the article, it should look something like this:
> <snippet>
> <wsdl:output name="getImagesResponse">
> <mime:multipartRelated>
> <mime:part name="part1">
> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:RepositoryAccessService" use="encoded"/>
> </mime:part>
> <mime:part name="part2">
> <mime:content part="output" type="application/octetstream"/>
> </mime:part>
> </mime:multipartRelated>
> </wsdl:output>
> </snippet>
> with:
> xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
> included in the wsdl:definitions element at the top of the WSDL.
> Basically, it's a multipart MIME message, where the first part is the body of the SOAP response message, the the additional part(s) are the attached binary files.
> If I add in the mime:multipartRelated as given above into the wsdl:output element, then try to run WSDL2Java, I get the following error:
> java org.apache.axis.wsdl.WSDL2Java --output "gen" --deployScope "Application" --server-side --skeletonDeploy --verbose RepositoryAcess.wsdl
> java.lang.NullPointerException
> at org.apache.axis.wsdl.symbolTable.SymbolTable.addMIMETypes(SymbolTable.java:2084)
> at org.apache.axis.wsdl.symbolTable.SymbolTable.fillInBindingInfo(SymbolTable.java:1860)
> at org.apache.axis.wsdl.symbolTable.SymbolTable.populateBindings(SymbolTable.java:1795)
> at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:577)
> at org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:421)
> at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:408)
> at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:393)
> at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:245)
> at java.lang.Thread.run(Thread.java:552)
> I peaked into the source for org.apache.axis.wsdl.symbolTable.SymbolTable. At line 2084 where it's hitting a NullPointerException, it is in the function addMIMETypes as indicated above. Here's a snippet from that function:
> <snippet>
> /**
> * Add the parts that are really MIME types as MIME types.
> * A side effect is to return the body Type of the given
> * MIMEMultipartRelated object.
> */
> private Use addMIMETypes(BindingEntry bEntry, MIMEMultipartRelated mpr,
> Operation op) throws IOException {
> Use bodyType = Use.ENCODED;
> List parts = mpr.getMIMEParts();
> Iterator i = parts.iterator();
> while (i.hasNext()) {
> MIMEPart part = (MIMEPart) i.next();
> List elems = part.getExtensibilityElements();
> Iterator j = elems.iterator();
> while (j.hasNext()) {
> Object obj = j.next();
> if (obj instanceof MIMEContent) {
> MIMEContent content = (MIMEContent) obj;
> TypeEntry typeEntry = findPart(op, content.getPart());
> line:2084-->String dims = typeEntry.getDimensions();
> if(dims.length() <=0 && typeEntry.getRefType() != null) {
> Node node = typeEntry.getRefType().getNode();
> if(getInnerCollectionComponentQName(node)!=null)
> dims += "[]";
> }
> String type = content.getType();
> if(type == null || type.length() == 0)
> type = "text/plain";
> bEntry.setMIMEInfo(op.getName(), content.getPart(), type, dims);
> </snippet>
> As best I figure from this code, the typeEntry object is null, probably because content.getPart() returns null or an invalid value.
> I'm pretty certain I've got the wsdl:output MIME syntax in the WSDL very close. The part I think is wrong is the line:
> <mime:content part="output" type="application/octetstream"/>
> The 'part="output" is probably the offending piece. The article I'm using as my example describes how to create a WSDL for a function that accepts an attachment as an input parameter, not one that returns an attachment. I'm also trying to attach several files, not just a single file. It seems I ought to have to specify I'm returning an array of attachments somewhere in the mime:content element.
> I've been to the World-Wide Web consortium site to look over the WSDL v1.2 specification. There's very little info contained in the section on MIME multi-part messages:
> http://www.w3.org/TR/2003/WD-wsdl12-bindings-20030611/#_mime
> There's really nothing here that goes much beyond the original article I site above.
> It would be really a big leap forward if Java2WSDL & WSDL2Java could handle MIME attachments as deftly as it does almost every other aspect of a JAX-RPC payload.
> Cheers,
> Bill Bug
> Bill Bug
> Senior Analyst/Ontological Engineer
> Laboratory for Bioimaging & Anatomical Informatics
> Department of Neurobiology & Anatomy
> Drexel University College of Medicine
> 2900 Queen Lane
> Philadelphia, PA 19129
> 215 991 8430 (ph)
--
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
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira