This might be similar to a problem we faced some time ago.
Getting a ('non-small') file from the server two times in a row makes
the client program hang on the second file. This affected all methods
that transferred files from server to client using Axis and Java
DataHandler.
Getting a very small file (a few bytes) inbetween the two previous calls
and everything works.
Running TCPMonitor on the server-client communication showed that the
request call from the client that comes AFTER a getFile() call contains
the previously received attachments! It turns out that the automatically
generated code from the wsdl2java erroneously calls setAttachments()
using the attachment of the previous call!
In other words: the error was in the client side
<MyService>SoapBindingStub.java that Axis/wsdl2java generated for us.
(or we were using the generated code erroneously... :-) )
Commenting out the setAttachments() and extractAttachments() in all
methods in <MyService>SoapBindingStub.java in the client solved this
problem for us.
Good luck!
Regards
Roy Willy Haug
> -----Original Message-----
> From: Ian van der Neut [mailto:[EMAIL PROTECTED]
> Sent: 24. juni 2005 11:32
> To: [email protected]
> Subject: Re: second call to ws hangs on client side.
>
> On 6/23/05, Ian van der Neut <[EMAIL PROTECTED]> wrote:
> > Hello all,
> >
> > I'm having a problem with obtaining a PDF from a webservice as an
> > attachment. The first time I call the web service,
> everything works as
> > it is expected, but the second time, the client side seems
> to hang on
> > reading the file. Here's the code:
> >
> > Server:
> > public javax.activation.DataHandler
> getProduct(java.lang.String name,
> >
> > java.lang.String datasetName)
> >
> > throws java.rmi.RemoteException {
> > // Stuff to determine 'product' snipped.
> > javax.activation.DataHandler dh = new
> javax.activation.DataHandler(
> > new javax.activation.FileDataSource(product));
> > log.debug("Content type is: ["+dh.getContentType()+"]");
> > org.apache.axis.MessageContext msgCtx =
> > org.apache.axis.MessageContext.getCurrentContext();
> > org.apache.axis.Message response=msgCtx.getResponseMessage();
> > response.getAttachmentsImpl().setSendType(
> >
> org.apache.axis.attachments.Attachments.SEND_TYPE_MIME);
> > org.apache.axis.attachments.AttachmentPart attachment =
> > new
> org.apache.axis.attachments.AttachmentPart(dh);
> > response.addAttachmentPart(attachment);
> > log.debug("Returning product "+name); }
>
> The loggings show the last log message show up. (I forgot to mention
> that, sorry).
>
> > Client:
> > javax.activation.DataHandler data =
> > service.getProduct(myForm.getProductName(),
> > myForm.getName());
> > if (null == data) {
> > log.debug("No product obtained from web service.");
> > return null;
> > }
> > log.debug("Obtaining attachment for product
> > ["+myForm.getProductName()+"]"); java.io.InputStream is =
> > data.getInputStream();
>
> This last log message doesn't show up in the loggings.
>
> > I am using axis-1_2RC2, javamail-1.3.2, jaf-1.0.2. It works fine if
> > the file is a PNG or a GIF or a HTML document instead. The
> PDF is of
> > course bigger than all of these, I also have this problem with a
> > zipped postscript file (is not unpacked, is just sent as a gzipped
> > file).
>
> I upgraded to axis 1.2.1, however, stil the same result. I've also
> been searching the archives, but most attachment sending over SOAP
> that is being done seems to be client-> server.
> This is the other way around and it works fine for other files.
>
> Thanks,
>
> Ian.
>