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 Fri, 02 Jan 2009 04:18:41 GMT
Hi Andreas,

Yes, the code for extracting rootcontent-id is duplicate code. The code can
be put in a protected method in SOAPPartImpl.I had to do that because, in
Attachments SOAPPart comes also as attachment. It requires to discard
SOAPPart attachment from the attachment map while adding the attachments in
SOAPMessage..

In the attachment map, the content-ids are stored as key and datahandler as
the value. I am adding the attachments in SOAPMessage if it is not SOAPPart.
For that I needed the rootcontentid i.e. the id for the SOAPPart. I am
extrracting that id from "Content-Type" string. So it can include '<', '>',
and "cid:".


Chinmoy



On Thu, Jan 1, 2009 at 8:42 PM, Andreas Veithen
<andreas.veithen@gmail.com>wrote:

> Chinmoy,
>
> The code you added in SOAPMessageImpl to some extent duplicates the
> code in Attachments#getSOAPPartContentID. Is there a particular reason
> for this?
>
> Andreas
>
> On Wed, Dec 31, 2008 at 14:59, Chinmoy Chakraborty <cchinu@gmail.com>
> wrote:
> > 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