axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andreas Veithen <andreas.veit...@gmail.com>
Subject Re: DataHandler.getName() always returns 'MyByteArrayDataSource' if the ds is ByteArrayDataSource
Date Tue, 31 Mar 2009 21:05:38 GMT
Probably this exception is caused by a misconfiguration: you set the
cacheAttachments parameter, but not sizeThreshold.

Andreas

On Mon, Mar 30, 2009 at 13:01, Chinmoy Chakraborty <cchinu@gmail.com> wrote:
> Andreas,
>
> I am using Axis2 1.4.1 and I am using following AXIOM version:
>
> axiom-api-1.2.7.jar
> axiom-dom-1.2.7.jar
> axiom-impl-1.2.7.jar
>
> and
>
> axis2-saaj-1.4.jar
> axis2-saaj-api-1.4.jar
>
> I know these are old jars. Does the latest code fixes the issue? Please send
> me the url from where I can get AXIOM and SAAJ jars.
>
> Chinmoy
>
>
>
> On Sat, Mar 28, 2009 at 4:56 PM, Andreas Veithen <andreas.veithen@gmail.com>
> wrote:
>>
>> What is the exact version of Axis2 that you are using?
>>
>> Andreas
>>
>> On Fri, Mar 27, 2009 at 13:43, Chinmoy Chakraborty <cchinu@gmail.com>
>> wrote:
>> > Andreas,
>> >
>> > Thanks for the explanation and it was good indeed for my understanding.
>> > i am
>> > now trying SwA to do the same. I have one question, I have a service
>> > that
>> > has DataHandler return type. Now when the service is invoked from the
>> > client
>> > end, in the server side I am adding an attachment to the MessageContext
>> > like
>> > this:
>> >
>> >         OperationContext operationContext = getOperationContext();
>> >         MessageContext outgoingMsg =
>> >
>> > operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
>> >         outgoingMsg.addAttachment(attachment.getContentType(),
>> > attachment);
>> >
>> > The service is also returns a datahandler. So basically I am returning a
>> > DataHandler as well as sending the same datahandler as an attachment
>> > (SwA).
>> > Is it possible to do so? Right now I am getting following exception when
>> > I
>> > try to invoke the service in the client end:
>> >
>> > org.apache.axis2.AxisFault
>> >  at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
>> >  at
>> >
>> > org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90)
>> >  at
>> >
>> > org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>> >  at
>> >
>> > org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
>> >  at
>> >
>> > org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
>> >  at
>> >
>> > org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
>> >
>> > Caused by: java.lang.NullPointerException
>> >  at
>> >
>> > org.apache.axis2.builder.BuilderUtil.createAttachmentsMap(BuilderUtil.java:505)
>> >  at
>> >
>> > org.apache.axis2.builder.MIMEBuilder.processDocument(MIMEBuilder.java:38)
>> >  at
>> >
>> > org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:164)
>> >  at
>> >
>> > org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:112)
>> >  at
>> >
>> > org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:88)
>> >  ... 49 more
>> >
>> > I have following code in the client to invoke the service:
>> >
>> > options.setProperty(Constants.Configuration.ENABLE_SWA,
>> > Constants.VALUE_TRUE);
>> >       options.setProperty(Constants.Configuration.CACHE_ATTACHMENTS,
>> > Constants.VALUE_TRUE);
>> >       options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
>> >       ServiceClient sender = new ServiceClient();
>> >       OperationClient mepClient =
>> > sender.createClient(ServiceClient.ANON_OUT_IN_OP);
>> >       OMFactory fac = OMAbstractFactory.getOMFactory();
>> >       OMNamespace ns =
>> > fac.createOMNamespace("http://www.abc.com/webservice", "ns");
>> >       MessageContext mc = new MessageContext();
>> >       SOAPEnvelope env = createEnvelope(ns, argNameList, args);
>> >       mc.setEnvelope(env);
>> >       for (int i = 0; i < attachmentList.size(); i++) {
>> >           DataHandler dh = (DataHandler) attachmentList.get(i);
>> >           mc.addAttachment(dh.getName(), dh);
>> >       }
>> >       try {
>> >           mepClient.setOptions(options);
>> >           mepClient.addMessageContext(mc);
>> >           mepClient.execute(true);
>> >       } catch (Exception e) {
>> >           e.printStackTrace();
>> >       }
>> > Chinmoy
>> >
>> >
>> >
>> >
>> > On Fri, Mar 27, 2009 at 4:37 AM, Andreas Veithen
>> > <andreas.veithen@gmail.com>
>> > wrote:
>> >>
>> >> Chinmoy,
>> >>
>> >> I would say that in the case of MTOM (SwA is different), it is
>> >> conceptually incorrect to assume that the DataSource name and content
>> >> type are preserved when the message is sent over the wire. The reason
>> >> is that MTOM defines a transformation between two different
>> >> representations of the same information model: one that encodes binary
>> >> data as base64 stored in a text node and one that encodes binary data
>> >> as MIME parts. Since in the first representation the name and content
>> >> type are unspecified, it would be wrong to assume that they are
>> >> meaningful in the second representation (otherwise the representations
>> >> would not be equivalent). In MTOM, content types (for the binary data)
>> >> only appear because the message format is MIME, which uses content
>> >> types. I guess that if the people who developed the MTOM specs had
>> >> decided not to use MIME, they would not have introduced the concept of
>> >> content types.
>> >>
>> >> Andreas
>> >>
>> >> On Thu, Mar 26, 2009 at 14:13, Chinmoy Chakraborty <cchinu@gmail.com>
>> >> wrote:
>> >> > Andreas,
>> >> >
>> >> > Thanks for your reply. Actually I am trying to invoke a service which
>> >> > returns a DataHandler through MTOM. I have following code in the
>> >> > service
>> >> > class:
>> >> >
>> >> > FileItem file = (FileItem) value;
>> >> > ByteArrayDataSource bads = new
>> >> > ByteArrayDataSource(file.getInputStream(),
>> >> > "application/msword");
>> >> > bads.setName("abc.doc");
>> >> > return new DataHandler(bads);
>> >> >
>> >> >
>> >> > So far so good. The newly created DataHandler preserve the name. I
>> >> > have
>> >> > following code in the client end from where I am invoking the
>> >> > service:
>> >> >
>> >> >      ServiceClient sender = new ServiceClient();
>> >> >       sender.setOptions(options);
>> >> >       OMFactory fac = OMAbstractFactory.getOMFactory();
>> >> >       OMNamespace ns =
>> >> > fac.createOMNamespace("http://www.abc.com/webservice", "ns");
>> >> >       OMElement payload = createPayload(ns, argNameList, args);
>> >> >       OMElement retVal = sender.sendReceive(payload);
>> >> >       if (retVal != null) {
>> >> >           OMElement ele = retVal.getFirstElement();
>> >> >           OMText binaryNode = (OMText) ele.getFirstOMChild();
>> >> >           binaryNode.setOptimize(true);
>> >> >           return (DataHandler) binaryNode.getDataHandler();
>> >> >       }
>> >> >
>> >> > I am trying to return a .doc file. When I receive the datahandler in
>> >> > the
>> >> > client end DataHandler#getName() returns "MyByteArrayDataSource" and
>> >> > the
>> >> > content type becomes "application/octet-stream" meaning binary.
>> >> >
>> >> > Hope I made you understand the problem. May be the code
>> >> > "binaryNode.setOptimize(true);" made the content-type binary. Then
>> >> > how
>> >> > to
>> >> > get a .doc or other file type?
>> >> >
>> >> > Chinmoy
>> >> >
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > On Wed, Mar 25, 2009 at 1:29 PM, Chinmoy Chakraborty
>> >> > <cchinu@gmail.com>
>> >> > wrote:
>> >> >>
>> >> >> Hi All,
>> >> >>
>> >> >> I noticed DataHandler.getName() always returns
>> >> >> 'MyByteArrayDataSource'
>> >> >> if
>> >> >> the data source is ByteArrayDataSource from which the DataHandler
>> >> >> has
>> >> >> been
>> >> >> created. Please look at the code below:
>> >> >>
>> >> >> FileItem file = (FileItem) value;
>> >> >> ByteArrayDataSource bads = new
>> >> >> ByteArrayDataSource(file.getInputStream(),
>> >> >> "application/msword");
>> >> >> bads.setName("abc.doc");
>> >> >> DataHandler dh = new DataHandler(bads);
>> >> >>
>> >> >> Now if I do, dh.getName(), it always returns
>> >> >> 'MyByteArrayDataSource". I
>> >> >> guess this is a bug. Whats your opinion?
>> >> >>
>> >> >>
>> >> >> Chinmoy
>> >> >
>> >
>> >
>
>

Mime
View raw message