Supported Scenario is to return javax.activation.DataHandler[] instead of File[] even that has a problem. http://nagoya.apache.org/jira/browse/AXIS-1138
-- dims --- William Bug <[EMAIL PROTECTED]> wrote: > Many thanks for you feedback, Davanum. > > Are you sure this is a bug? Since your on the Apache webservices team, > I'll take your word for it. > > I was expecting I'm just doing something wrong, though if there's a > right way to do this, I can't find it documented anywhere. > > Is there really no way to get Java2WSDL to add the > "mime:multipartRelated" element inserted in the "wsdl:output" of a > "wsdl:operation" within the "wsdl:binding" portion of the WSDL > document? > > Cheers, > Bill > > On Apr 2, 2004, at 8:52 AM, Davanum Srinivas wrote: > > > Please log a bug - http://issues.apache.org/jira/ > > > > --- William Bug <[EMAIL PROTECTED]> wrote: > >> Hi All, > >> > >> I'm having trouble creating an appropriate WSDL file to create a > >> service that returns a large set of binary attachments. > >> > >> 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 in 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 File[] getImages(Boolean returnZip, String imageSet) > >> throws RemoteException; > >> } > >> </snippet> > >> > >> I assumed extrapolating from the article above that I could have a > >> return type of File[] 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. > >> ja > >> va:2084) > >> at > >> org.apache.axis.wsdl.symbolTable.SymbolTable.fillInBindingInfo(SymbolT > >> ab > >> le.java:1860) > >> at > >> org.apache.axis.wsdl.symbolTable.SymbolTable.populateBindings(SymbolTa > >> bl > >> e.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'm pretty certain is wrong is the line: > >> > >> <mime:content part="output" type="application/octetstream"/> > >> > >> I think the 'part="output" is 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 > === message truncated === ===== Davanum Srinivas - http://webservices.apache.org/~dims/