axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chinmoy Chakraborty" <cch...@gmail.com>
Subject Re: Error getting attachments from SOAPMessage
Date Wed, 31 Dec 2008 13:59:44 GMT
Hi Andreas,

I walked through the code (org.apache.axis2.saaj.SOAPMessageImpl) and fixed
the attachment issue. I have added some code from line no. 111 to 149 of
attached org.apache.axis2.saaj.SOAPMessageImpl class that fixes the
attachemnt issue while creating SOAP with attachment from inputstream.

I also have added a protected method in org.apache.axis2.saaj.SOAPPartImpl
class. The code code is:

protected Map getAttachmentMap(){
        if(attachments != null){
            return attachments.getMap();
        }
        return null;
    }

I have also declared a private variable in SOAPPartImpl: private Attachments
attachments = null;

I am attaching these files along with this mail. The modified code works
fine for me now while creating SOAP with attachments from inputstream.

If you find the changes fine please commit. I can download fresh
axis-saaj-SNAPSHOT jar. Please give your opinion.

Chinmoy




On Tue, Dec 23, 2008 at 9:15 PM, Andreas Veithen
<andreas.veithen@gmail.com>wrote:

> On Tue, Dec 23, 2008 at 12:17, Chinmoy Chakraborty <cchinu@gmail.com>
> wrote:
> > Andreas,
> >
> > I am stuck with the attachments. I have sent many mails in this forum
> > mentioning the issue regarding creation of SOAPMessage with attachments
> from
> > Inputstream but no one replied me back.
> >
> > Previously you have mentioned that asix saaj api has been moved to
> gerenimo.
> > Could you please send me the url from where I can get the geronimo
> SNAPSHOT
> > jar?
>
> The SAAJ API version used by Axis2 can be found at [1]. Note that
> there are currently no snapshots, because as an API it is not under
> active development (it is just the translation into Java code of a
> specification, so it's fairly static).
>
> [1]
> http://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-saaj_1.3_spec/1.0.1/
>
> > Could you send me the email-id of the developer who is working on
> axis-saaj
> > implementation by which I can contact him directly. I am really really
> stuck
> > here with my latest project. This is urgent for me. Please help.
>
> I think that the SAAJ implementation is the work of several people. It
> has been around for some time, so I don't know exactly who is the most
> familiar with the code. You may have a look at [2] to see who worked
> on it. The corresponding email addresses can be found at [3].
>
> [2]
> http://svnsearch.org/svnsearch/repos/ASF/search?path=%2Fwebservices%2Faxis2%2Ftrunk%2Fjava%2Fmodules%2Fsaaj
> [3] http://ws.apache.org/axis2/team-list.html
>
> >
> > Chinmoy
> >
> >
> >
> > On Thu, Dec 18, 2008 at 8:54 PM, Andreas Veithen <
> andreas.veithen@gmail.com>
> > wrote:
> >>
> >> Chinmoy,
> >>
> >> I walked through the axis2-saaj code and indeed when creating a
> >> message from an input stream using MessageFactory, axis2-saaj doesn't
> >> even request the attachments from Axiom. However, I'm not familiar
> >> enough with the code to be able to fix this myself.
> >>
> >> Maybe somebody else can help here?
> >>
> >> Andreas
> >>
> >> On Thu, Dec 18, 2008 at 13:05, Chinmoy Chakraborty <cchinu@gmail.com>
> >> wrote:
> >> > Andreas,
> >> >
> >> > Please find attached attachment.xml which I am using as inputstream to
> >> > create SOAPMessage. The MIME boundary in my previous code snippet may
> >> > differ
> >> > since it is generated at runtime but this is the file generated by
> >> > another
> >> > system. I am also sending you the code that generates the attached
> file.
> >> >
> >> > SOAPMessage soapMsg = MessageFactory.newInstance().createMessage();
> >> >           //setting the namespace declaration.
> >> >           SOAPPart sp = soapMsg.getSOAPPart();
> >> >           SOAPEnvelope se = sp.getEnvelope();
> >> >           se.addNamespaceDeclaration("lw",
> >> > "http://www.abc.com/xml/soap/");
> >> >           soapMsg.setProperty(soapMsg.CHARACTER_SET_ENCODING,
> "UTF-8");
> >> >           soapMsg.setProperty(soapMsg.WRITE_XML_DECLARATION, "true");
> >> >           //setting the soap header.
> >> >           SOAPHeader soapHeader = soapMsg.getSOAPHeader();
> >> >           //setting the session id
> >> >           SOAPElement soapHeaderElement1 =
> >> > soapHeader.addChildElement("session", "lw",
> >> > "http://www.abc.com/xml/soap/");
> >> >
> >> > soapHeaderElement1.addTextNode("8e0b383911e3942c87fda0be8ae1879b");
> >> >           //setting the transactionId
> >> >           SOAPElement soapHeaderElement2 =
> >> > soapHeader.addChildElement("transactionId", "lw",
> >> > "http://www.abc.com/xml/soap/");
> >> >           soapHeaderElement2.addTextNode(String.valueOf("2"));
> >> >           //setting the serverId
> >> >           SOAPElement soapHeaderElement3 =
> >> > soapHeader.addChildElement("serverId", "lw",
> >> > "http://www.abc.com/xml/soap/");
> >> >
> >> >
> >> >
> soapHeaderElement3.addTextNode(String.valueOf("192.168.1.66_d7618e5711e394247a7da0be8ae08921"));
> >> >           SOAPBody soapBody = soapMsg.getSOAPBody();
> >> >           SOAPElement callElement = soapBody.addChildElement("call",
> >> > "lw",
> >> > "http://www.abc.com/xml/soap/");
> >> >           SOAPElement msgObjectId =
> >> > callElement.addChildElement("objectId");
> >> >           msgObjectId.addTextNode("system");
> >> >           SOAPElement msgMethod =
> callElement.addChildElement("method");
> >> >           msgMethod.addTextNode("setRetVal");
> >> >           SOAPElement paramElement =
> >> > callElement.addChildElement("param");
> >> >           SOAPElement valueElement =
> >> > paramElement.addChildElement("value");
> >> >           valueElement.addTextNode("attachment.txt");
> >> >           DataHandler dh = new DataHandler(new
> >> > FileDataSource("C:\\Documents
> >> > and Settings\\lab\\Desktop\\car.txt"));
> >> >           AttachmentPart ap = soapMsg.createAttachmentPart();
> >> >           ap.setContentId("attachment.txt");
> >> >           ap.setContent(dh.getContent(), dh.getContentType());
> >> >           soapMsg.addAttachmentPart(ap);
> >> >
> >> >          OutputStream out = null;
> >> >     try {
> >> >       out = socket.getOutputStream();
> >> >       out.write(0x02);
> >> >       soapMsg.writeTo(out);
> >> >       out.write(0x03);
> >> >       out.flush();
> >> >     } catch (Exception e) {
> >> >       getLog().error("Exception sending the soap " + e, e);
> >> >     } finally {
> >> >       //   if (out == null) out.close();
> >> >     }
> >> >
> >> >
> >> > Chinmoy
> >> >
> >> > On Thu, Dec 18, 2008 at 5:21 PM, Andreas Veithen
> >> > <andreas.veithen@gmail.com>
> >> > wrote:
> >> >>
> >> >> Chinmoy,
> >> >>
> >> >> Can you also attach a sample message that you try to read with this
> >> >> code?
> >> >>
> >> >> Andreas
> >> >>
> >> >> On Thu, Dec 18, 2008 at 06:23, Chinmoy Chakraborty <cchinu@gmail.com
> >
> >> >> wrote:
> >> >> > Andreas,
> >> >> >
> >> >> > Here is my code snippet.
> >> >> >
> >> >> > String contentType = multipart/related;
> >> >> >  boundary=MIMEBoundaryurn_uuid_D988AB74BC9802BDC21229577126047;
> >> >> >  type="text/xml";
> >> >> >  start="<0.urn:uuid:D988AB74BC9802BDC21229577126064@apache.org<0.urn%3Auuid%3AD988AB74BC9802BDC21229577126064@apache.org>
> >"
> >> >> >
> >> >> > MimeHeaders mimeHeaders = new MimeHeaders();
> >> >> > mimeHeaders.addHeader("Content-Type", contentType);
> >> >> > // Create the SOAP Message using mimeHeader and inputStream
> >> >> > MessageFactory mf = MessageFactory.newInstance();
> >> >> > SOAPMessage soapMsg = mf.createMessage(mimeHeaders, in);
> >> >> >
> >> >> > The inputstream is a SOAPMessage with attachments. Now the newly
> >> >> > created
> >> >> > soapMsg in above code snippet does not contain any attachment
> parts.
> >> >> >
> >> >> > I am trying to get attachment parts in the following code snippet:
> >> >> >
> >> >> > List attachments = new ArrayList()
> >> >> > if (soapMsg.countAttachments() > 0) {
> >> >> >         Iterator itr = soapMsg.getAttachments();
> >> >> >         while (itr.hasNext()) {
> >> >> >           AttachmentPart att = (AttachmentPart) itr.next();
> >> >> >           DataHandler dh = att.getDataHandler();
> >> >> >           attachments.add(dh);
> >> >> >         }
> >> >> >       }
> >> >> >
> >> >> > The attachment list is always empty. I am using following jars:
> >> >> >
> >> >> > axiom-api-SNAPSHOT.jar (modified on 16th Dec, 2008)
> >> >> > axiom-dom-SNAPSHOT.jar (modified on 16th Dec, 2008)
> >> >> > axiom-impl-SNAPSHOT.jar (modified on 16th Dec, 2008)
> >> >> > axis2-saaj-SNAPSHOT.jar (modified on 12th Dec, 2008)
> >> >> > axis2-saaj-api-1.4.jar (modified on 4th April, 2008)
> >> >> >
> >> >> > Chinmoy
> >> >> >
> >> >> >
> >> >> >
> >> >> > On Thu, Dec 18, 2008 at 6:49 AM, Andreas Veithen
> >> >> > <andreas.veithen@gmail.com>
> >> >> > wrote:
> >> >> >>
> >> >> >> Chinmoy,
> >> >> >>
> >> >> >> Can you post the code that demonstrates the problem?
> >> >> >>
> >> >> >> Andreas
> >> >> >>
> >> >> >> On Wed, Dec 17, 2008 at 13:40, Chinmoy Chakraborty
> >> >> >> <cchinu@gmail.com>
> >> >> >> wrote:
> >> >> >> > Hi All,
> >> >> >> >
> >> >> >> > I am creating SOAPMessage from inputstream. The inputstream
is
> >> >> >> > SOAP
> >> >> >> > with
> >> >> >> > attachments. But the attachmentParts becomes zero in
the newly
> >> >> >> > created
> >> >> >> > SOAPMessage though the content type is "multipart/related".
> >> >> >> >
> >> >> >> > Why it is not created attachments when I am creating
SOAP from
> >> >> >> > inputstream
> >> >> >> > (with attachments)? I am using axiom-api-SNAPSHOT.jar,
> >> >> >> > axiom-dom-SNAPSHOT.jar, axiom-impl-SNAPSHOT.jar.(Axis2
1.4.1)
> >> >> >> >
> >> >> >> > Chinmoy
> >> >> >
> >> >> >
> >> >
> >> >
> >
> >
>

Mime
View raw message