You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ws.apache.org by Demetris <de...@ece.neu.edu> on 2011/04/15 17:02:37 UTC

Woden on mobile devices

Hi all,

I think Woden can parse WSDL 2.0 that describe REST services correct?
Is there a mobile version of Woden for parsing such WSDL documents on
Android?

Thanks

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
For additional commands, e-mail: dev-help@ws.apache.org


Re: Woden on mobile devices

Posted by Demetris <de...@ece.neu.edu>.
Oh - good to know thanks for the pointers.

Ok I will keep you posted on the schedule. It's been (and probably will 
be) a bit hectic for a bit
longer.

Take care Martin

On 5/5/2011 3:02 PM, Martin Gainty wrote:
> in the interim i found some bugs in the xerces code with 
> namespace-aware parsing of ComplexDataTypes
>
> so for now its probably best to stay with woden (as per your original 
> suggestion) for wsdl2.0 parsing
> and WSDL4J for wsdl1.x parsing
>
> when you get back if we can meet in btown perhaps glenn or anyone else 
> on NE would like to join in?
>
> Bedankt,
> Martin Gainty
> ______________________________________________
> Jogi és Bizalmassági kinyilatkoztatás/Verzicht und 
> Vertraulichkeitanmerkung/Note de déni et de confidentialité
> Ez az üzenet bizalmas.  Ha nem ön az akinek szánva volt, akkor kérjük, 
> hogy jelentse azt nekünk vissza. Semmiféle továbbítása vagy 
> másolatának készítése nem megengedett.  Ez az üzenet csak ismeret 
> cserét szolgál és semmiféle jogi alkalmazhatósága sincs.  Mivel az 
> electronikus üzenetek könnyen megváltoztathatóak, ezért minket semmi 
> felelöség nem terhelhet ezen üzenet tartalma miatt.
>
> Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene 
> Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede 
> unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. 
> Diese Nachricht dient lediglich dem Austausch von Informationen und 
> entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten 
> Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den 
> Inhalt uebernehmen.
> Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.
>
>
>
>
>
> ------------------------------------------------------------------------
> Date: Thu, 5 May 2011 14:49:50 -0400
> From: demetris@ece.neu.edu
> To: dev@ws.apache.org
> Subject: Re: Woden on mobile devices
>
> Hi Martin,
>
> sorry for the long delay in responding but I am sure you know how it 
> is with multiple
> projects.
>
> I certainly agree with you both on the comm and msg standards on new 
> phones - it is an ever
> changing world there. It would certainly be worth looking into JSRs 
> for addressing REST
> on mobile devices. I did read the WADL standard and it does seem 
> promising.
>
> I am going to be traveling for a bit longer but I will stay in touch 
> and either email or eventually
> a face-to-face meeting that would certainly be good.
>
> Thanks
>
> On 4/22/2011 11:04 AM, Martin Gainty wrote:
>
>     it is difficult with PDA's coming out every 6 months to elucidate
>     from the PDA managers which communication protocols and messaging
>     standards these new PDAs will be supporting
>     *or* as in the case of MS and Apple are they crafting their own ...?
>     it would be nice to find at least 1 JSR to address REST based
>     messaging standards for PDAs
>
>     i think there is a future for REST consuming clients on PDAs and
>     since we're consuming alot of bandwidth here
>     we could meet somewhere in btown..anyone that wants to participate
>     is invited (especially angel investors)
>
>     perhaps WADL is the way..?
>
>     keep in touch!
>     Martin
>     ______________________________________________
>     Jogi és Bizalmassági kinyilatkoztatás/Verzicht und
>     Vertraulichkeitanmerkung/Note de déni et de confidentialité
>     Ez az üzenet bizalmas.  Ha nem ön az akinek szánva volt, akkor
>     kérjük, hogy jelentse azt nekünk vissza. Semmiféle továbbítása
>     vagy másolatának készítése nem megengedett.  Ez az üzenet csak
>     ismeret cserét szolgál és semmiféle jogi alkalmazhatósága sincs.
>      Mivel az electronikus üzenetek könnyen megváltoztathatóak, ezért
>     minket semmi felelöség nem terhelhet ezen üzenet tartalma miatt.
>
>     Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene
>     Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede
>     unbefugte Weiterleitung oder Fertigung einer Kopie ist
>     unzulaessig. Diese Nachricht dient lediglich dem Austausch von
>     Informationen und entfaltet keine rechtliche Bindungswirkung.
>     Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir
>     keine Haftung fuer den Inhalt uebernehmen.
>
>     Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.
>
>
>
>
>
>
>     ------------------------------------------------------------------------
>     Date: Fri, 22 Apr 2011 10:39:24 -0400
>     From: demetris@ece.neu.edu <ma...@ece.neu.edu>
>     To: dev@ws.apache.org <ma...@ws.apache.org>
>     Subject: Re: Woden on mobile devices
>
>
>     Hi Martin,
>
>     yes exactly and that's the reason we switched over to REST
>     services and particularly for
>     mobile devices. Even though ksoap2 on Android seems to be fairly
>     efficient it's still a bit
>     heavier that the REST/HTTP mechanisms.
>     I also looked into WADL but I am not sure how mature or generally
>     accepted it is at this point.
>
>     Regarding the publishing of the REST service, as you pointed out
>     there's not a standard
>     method to publish them - some ideas I saw generate documents that
>     describe the directory
>     hierarchy for the server side along with the URL specifications on
>     how to reach the various
>     resources. I use Ajax for building clients for these services. But
>     I can certainly work with you
>     on coming up with may be a more general architecture.
>
>     In any case, thanks for the feedback and I will let you know about
>     this once I give it a bit
>     more thought. I appreciate the information and help Martin.
>
>     On 4/21/2011 11:30 AM, Martin Gainty wrote:
>
>         not yet here is their doc
>
>         Please note that SOAP introduces some significant overhead for
>         web services that may be problematic for mobile devices. If
>         you have full control over the client and the server, a REST
>         based architecture may be more adequate.
>
>         maybe you can create a testcase and we can come up with an
>         architecture to
>         1)publish the REST service
>         2)create a Stub client which will consume the REST message
>
>         did you have anything specific in mind?
>
>         Martin
>         ______________________________________________
>         Do not alter or disrupt this transmission.
>
>
>
>
>         ------------------------------------------------------------------------
>         Date: Thu, 21 Apr 2011 10:00:15 -0400
>         From: demetris@ece.neu.edu <ma...@ece.neu.edu>
>         To: dev@ws.apache.org <ma...@ws.apache.org>
>         Subject: Re: Woden on mobile devices
>
>
>         Hi Martin,
>
>         apologies for re-posting this one - do you have an idea on
>         whether the segment you sent below
>         can handle REST-annotated WSDL files?
>
>         Thanks
>
>         On 4/16/2011 10:54 AM, Demetris wrote:
>
>
>             Hi Martin,
>
>             isn't this parsing a SOAP WSDL file using the ksoap2 libs?
>             Can it handle documents that describe
>             REST as well? I guess it should but i am not sure. I will
>             need to look into a bit more carefully.
>
>             I appreciate the feedback
>
>             On 4/15/2011 12:12 PM, Martin Gainty wrote:
>
>                 http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download
>                 take a look at org.ksoap2.transport.HttpTransport
>
>                 ksoap2\target\classes>javap
>                 .\org\ksoap2\transport\HttpTransport
>                 public class org.ksoap2.transport.HttpTransport
>                 extends org.ksoap2.transport.Transport{
>                     org.ksoap2.transport.ServiceConnection connection;
>                     java.io.OutputStream os;
>                     java.io.InputStream is;
>                     public
>                 org.ksoap2.transport.HttpTransport(java.lang.String);
>                    public void call(java.lang.String,
>                 org.ksoap2.SoapEnvelope)       throws
>                 java.io.IOException,
>                 org.xmlpull.v1.XmlPullParserException;
>                     public void reset();
>                     protected org.ksoap2.transport.ServiceConnection
>                 getServiceConnection()
>                   throws java.io.IOException;
>                 }
>
>                 //vs the axis HttpTransportReceiver
>                 public class
>                 org.apache.axis2.transport.http.HTTPTransportReceiver {
>                     public static Map getGetRequestParameters(String
>                 requestURI) {
>                         Map map = new HashMap();
>                         if (requestURI == null || "".equals(requestURI)) {
>                             return map;
>                         }
>                         char[]       chars = requestURI.toCharArray();
>                         final int NOT_BEGUN = 1500;
>                         final int INSIDE_NAME = 1501;
>                         final int INSIDE_VALUE = 1502;
>                         int state = NOT_BEGUN;
>                         StringBuffer name = new StringBuffer();
>                         StringBuffer value = new StringBuffer();
>
>                         for (int index = 0; index < chars.length;
>                 index++) {
>                             if (state == NOT_BEGUN) {
>                                 if (chars[index] == '?') {
>                                     state = INSIDE_NAME;
>                                 }
>                             } else if (state == INSIDE_NAME) {
>                                 if (chars[index] == '=') {
>                                     state = INSIDE_VALUE;
>                                 } else {
>                                     name.append(chars[index]);
>                                 }
>                             } else if (state == INSIDE_VALUE) {
>                                 if (chars[index] == ',') {
>                                     state = INSIDE_NAME;
>                                     map.put(name.toString(),
>                 value.toString());
>                                     name.delete(0, name.length());
>                                     value.delete(0, value.length());
>                                 } else {
>                                     value.append(chars[index]);
>                                 }
>                             }
>                         }
>                         if (name.length() + value.length() > 0) {
>                             map.put(name.toString(), value.toString());
>                         }
>                         return map;
>                     }
>
>                     public static String
>                 getServicesHTML(ConfigurationContext
>                 configurationContext) {
>                         String temp = "";
>                         Map services =
>                 configurationContext.getAxisConfiguration().getServices();
>                         Hashtable erroneousServices =
>                                
>                 configurationContext.getAxisConfiguration().getFaultyServices();
>                         boolean status = false;
>                         if ((services != null) && !services.isEmpty()) {
>                             status = true;
>                             Collection serviceCollection =
>                 services.values();
>                             temp += "<h2>" + "Deployed services" +
>                 "</h2>";
>                             for (Iterator it =
>                 serviceCollection.iterator(); it.hasNext();) {
>
>                                 AxisService axisService =
>                 (AxisService) it.next();
>
>                                 Iterator iterator =
>                 axisService.getOperations();
>
>                                 temp += "<h3><a href=\"" +
>                 axisService.getName() + "?wsdl\">" +
>                                         axisService.getName() +
>                 "</a></h3>";
>
>                                 if (iterator.hasNext()) {
>                                     temp += "Available operations <ul>";
>
>                                     for (; iterator.hasNext();) {
>                                         AxisOperation axisOperation =
>                 (AxisOperation) iterator.next();
>
>                                         temp += "<li>" +
>                 axisOperation.getName().getLocalPart() + "</li>";
>                                     }
>
>                                     temp += "</ul>";
>                                 } else {
>                                     temp += "No operations specified
>                 for this service";
>                                 }
>                             }
>                         }
>                         if ((erroneousServices != null) &&
>                 !erroneousServices.isEmpty()) {
>                             temp += "<hr><h2><font
>                 color=\"blue\">Faulty Services</font></h2>";
>                             status = true;
>
>                             Enumeration faultyservices =
>                 erroneousServices.keys();
>
>                             while (faultyservices.hasMoreElements()) {
>                                 String faultyserviceName = (String)
>                 faultyservices.nextElement();
>
>                                 temp += "<h3><font color=\"blue\">" +
>                 faultyserviceName + "</font></h3>";
>                             }
>                         }
>                         if (!status) {
>                             temp = "<h2>There are no services
>                 deployed</h2>";
>                         }
>                         temp = "<html><head><title>Axis2:
>                 Services</title></head>" + "<body>" + temp
>                                 + "</body></html>";
>
>                         return temp;
>                     }
>                     public static String printServiceHTML(String
>                 serviceName,
>                                                          
>                 ConfigurationContext configurationContext) {
>                         String temp = "";
>                         try {
>                             AxisConfiguration axisConfig =
>                 configurationContext.getAxisConfiguration();
>                             AxisService axisService =
>                 axisConfig.getService(serviceName);
>                             Iterator iterator =
>                 axisService.getOperations();
>                             temp += "<h3>" + axisService.getName() +
>                 "</h3>";
>                             temp += "<a href=\"" +
>                 axisService.getName() + "?wsdl\">wsdl</a> <br/> ";
>                             temp += "<i>Service Description :  " +
>                 axisService.getServiceDescription() +
>                                     "</i><br/><br/>";
>                             if (iterator.hasNext()) {
>                                 temp += "Available operations <ul>";
>                                 for (; iterator.hasNext();) {
>                                     AxisOperation axisOperation =
>                 (AxisOperation) iterator.next();
>                                     temp += "<li>" +
>                 axisOperation.getName().getLocalPart() + "</li>";
>                                 }
>                                 temp += "</ul>";
>                             } else {
>                                 temp += "No operations specified for
>                 this service";
>                             }
>                             temp = "<html><head><title>Axis2:
>                 Services</title></head>" + "<body>" + temp
>                                     + "</body></html>";
>                         }
>                         catch (AxisFault axisFault) {
>                             temp = "<html><head><title>Service has a
>                 fualt</title></head>" + "<body>"
>                                     + "<hr><h2><font color=\"blue\">"
>                 + axisFault.getMessage() +
>                                     "</font></h2></body></html>";
>                         }
>                         return temp;
>                     }
>                 }
>
>                 //since neither class is an interface we would need to
>                 refactor our
>                 public class
>                 org.apache.axis2.transport.http.NewHTTPTransportReceiver
>                 extends org.ksoap2.transport.HttpTransport
>                 {
>                 //all of the legacy HttptransportReceiver code
>                 //add in overrides for attrs and methods from
>                 HttpTransport
>                 }
>
>                 //assuming we setup a simple client which implements
>                 org.ksoap2.transport.HttpTransport
>                 public class org.ksoap2.SoapEnvelope extends
>                 java.lang.Object{
>                     public static final int VER10;
>                     public static final int VER11;
>                     public static final int VER12;
>                     public static final java.lang.String ENV2001;
>                     public static final java.lang.String ENC2001;
>                     public static final java.lang.String ENV;
>                     public static final java.lang.String ENC;
>                     public static final java.lang.String XSD;
>                     public static final java.lang.String XSI;
>                     public static final java.lang.String XSD1999;
>                     public static final java.lang.String XSI1999;
>                     public java.lang.Object bodyIn;
>                     public java.lang.Object bodyOut;
>                     public org.kxml2.kdom.Element[] headerIn;
>                     public org.kxml2.kdom.Element[] headerOut;
>                     public java.lang.String encodingStyle;
>                     public int version;
>                     public java.lang.String env;
>                     public java.lang.String enc;
>                     public java.lang.String xsi;
>                     public java.lang.String xsd;
>                     public static boolean
>                 stringToBoolean(java.lang.String);
>                     public org.ksoap2.SoapEnvelope(int);
>                     public void
>                 parse(org.xmlpull.v1.XmlPullParser)       throws
>                 java.io.IOExcep
>                 tion, org.xmlpull.v1.XmlPullParserException;
>                     public void
>                 parseHeader(org.xmlpull.v1.XmlPullParser)       throws
>                 java.io.I
>                 OException, org.xmlpull.v1.XmlPullParserException;
>                     public void
>                 parseBody(org.xmlpull.v1.XmlPullParser)       throws
>                 java.io.IOE
>                 xception, org.xmlpull.v1.XmlPullParserException;
>                     public void
>                 write(org.xmlpull.v1.XmlSerializer)       throws
>                 java.io.IOExcep
>                 tion;
>                     public void
>                 writeHeader(org.xmlpull.v1.XmlSerializer)       throws
>                 java.io.I
>                 OException;
>                     public void
>                 writeBody(org.xmlpull.v1.XmlSerializer)       throws
>                 java.io.IOE
>                 xception;
>                     public void setOutputSoapObject(java.lang.Object);
>                 }
>
>                 vs our own javax.xml.soap.SOAPEnvelope
>                 public interface SOAPEnvelope extends SOAPElement {
>                     /**
>                      * Creates a new <CODE>Name</CODE> object
>                 initialized with the given local name, namespace
>                      * prefix, and namespace URI.
>                      * <p/>
>                      * <P>This factory method creates
>                 <CODE>Name</CODE> objects for use in the SOAP/XML
>                 document.
>                      *
>                      * @param localName a <CODE>String</CODE> giving
>                 the local name
>                      * @param prefix    a <CODE>String</CODE> giving
>                 the prefix of the namespace
>                      * @param uri       a <CODE>String</CODE> giving
>                 the URI of the namespace
>                      * @return a <CODE>Name</CODE> object initialized
>                 with the given local name, namespace prefix,
>                      *         and namespace URI
>                      * @throws SOAPException if there is a SOAP error
>                      */
>                     public abstract Name createName(String localName,
>                                                     String prefix,
>                                                     String uri)
>                             throws SOAPException;
>                     public abstract Name createName(String localName)
>                 throws SOAPException;
>                     public abstract SOAPHeader getHeader() throws
>                 SOAPException;
>                     public abstract SOAPBody getBody() throws
>                 SOAPException;
>                     public abstract SOAPHeader addHeader() throws
>                 SOAPException;
>                     public abstract SOAPBody addBody() throws
>                 SOAPException;
>                 }
>
>                 //so you would need a new uber SOAPEnvelope class
>                 which extends base class SoapEnvelope implements
>                 SOAPEnvelope
>
>                 public class NewSOAPEnvelope extends
>                 org.ksoap2.SoapEnvelope implements
>                 javax.xml.soap.SOAPEnvelope
>                 newHttpTransportReceiver would reference the new uber
>                 SOAPEnvelope class
>                    public void call(java.lang.String,
>                 NewSoapEnvelope)       throws java.io.IOException,
>                 org.xmlpull.v1.XmlPullParserException;
>
>                 does this conform to your understanding?
>                 Martin Gainty
>                 ______________________________________________
>                 Note de déni et de confidentialité
>                 Ce message est confidentiel et peut être privilégié.
>                 Si vous n'êtes pas le destinataire prévu, nous te
>                 demandons avec bonté que pour satisfaire informez
>                 l'expéditeur. N'importe quelle diffusion non autorisée
>                 ou la copie de ceci est interdite. Ce message sert à
>                 l'information seulement et n'aura pas n'importe quel
>                 effet légalement obligatoire. Étant donné que les
>                 email peuvent facilement être sujets à la
>                 manipulation, nous ne pouvons accepter aucune
>                 responsabilité pour le contenu fourni.
>
>
>
>
>                 > Date: Fri, 15 Apr 2011 11:02:37 -0400
>                 > From: demetris@ece.neu.edu <ma...@ece.neu.edu>
>                 > To: dev@ws.apache.org <ma...@ws.apache.org>
>                 > Subject: Woden on mobile devices
>                 >
>                 > Hi all,
>                 >
>                 > I think Woden can parse WSDL 2.0 that describe REST
>                 services correct?
>                 > Is there a mobile version of Woden for parsing such
>                 WSDL documents on
>                 > Android?
>                 >
>                 > Thanks
>                 >
>                 >
>                 ---------------------------------------------------------------------
>                 > To unsubscribe, e-mail:
>                 dev-unsubscribe@ws.apache.org
>                 <ma...@ws.apache.org>
>                 > For additional commands, e-mail:
>                 dev-help@ws.apache.org <ma...@ws.apache.org>
>                 >
>

RE: Woden on mobile devices

Posted by Martin Gainty <mg...@hotmail.com>.
in the interim i found some bugs in the xerces code with namespace-aware parsing of ComplexDataTypes

so for now its probably best to stay with woden (as per your original suggestion) for wsdl2.0 parsing
and WSDL4J for wsdl1.x parsing

when you get back if we can meet in btown perhaps glenn or anyone else on NE would like to join in?

Bedankt,
Martin Gainty 
______________________________________________ 
Jogi és Bizalmassági kinyilatkoztatás/Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
 Ez az
üzenet bizalmas.  Ha nem ön az akinek szánva volt, akkor kérjük, hogy
jelentse azt nekünk vissza. Semmiféle továbbítása vagy másolatának
készítése nem megengedett.  Ez az üzenet csak ismeret cserét szolgál és
semmiféle jogi alkalmazhatósága sincs.  Mivel az electronikus üzenetek
könnyen megváltoztathatóak, ezért minket semmi felelöség nem terhelhet
ezen üzenet tartalma miatt.

Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen.
Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.




Date: Thu, 5 May 2011 14:49:50 -0400
From: demetris@ece.neu.edu
To: dev@ws.apache.org
Subject: Re: Woden on mobile devices



  


    
  
  
    Hi Martin,

    

    sorry for the long delay in responding but I am sure you know how it
    is with multiple

    projects.

    

    I certainly agree with you both on the comm and msg standards on new
    phones - it is an ever

    changing world there. It would certainly be worth looking into JSRs
    for addressing REST

    on mobile devices. I did read the WADL standard and it does seem
    promising. 

    

    I am going to be traveling for a bit longer but I will stay in touch
    and either email or eventually

    a face-to-face meeting that would certainly be good.

    

    Thanks

    

    On 4/22/2011 11:04 AM, Martin Gainty wrote:
    
      
      it is difficult with PDA's coming out every 6 months to elucidate
      from the PDA managers which communication protocols and messaging
      standards these new PDAs will be supporting 

      *or* as in the case of MS and Apple are they crafting their own
      ...?

      it would be nice to find at least 1 JSR to address REST based
      messaging standards for PDAs

      

      i think there is a future for REST consuming clients on PDAs and
      since we're consuming alot of bandwidth here

      we could meet somewhere in btown..anyone that wants to participate
      is invited (especially angel investors)

      

      perhaps WADL is the way..?

      

      keep in touch!

      Martin 

      ______________________________________________ 

      Jogi és Bizalmassági kinyilatkoztatás/Verzicht und
      Vertraulichkeitanmerkung/Note de déni et de confidentialité

       
      Ez az
        üzenet bizalmas.  Ha nem ön az akinek szánva volt, akkor kérjük,
        hogy
        jelentse azt nekünk vissza. Semmiféle továbbítása vagy
        másolatának
        készítése nem megengedett.  Ez az üzenet csak ismeret cserét
        szolgál és
        semmiféle jogi alkalmazhatósága sincs.  Mivel az electronikus
        üzenetek
        könnyen megváltoztathatóak, ezért minket semmi felelöség nem
        terhelhet
        ezen üzenet tartalma miatt.

        

        Diese Nachricht ist vertraulich. Sollten Sie nicht der
        vorgesehene Empfaenger sein, so bitten wir hoeflich um eine
        Mitteilung. Jede unbefugte Weiterleitung oder Fertigung einer
        Kopie ist unzulaessig. Diese Nachricht dient lediglich dem
        Austausch von Informationen und entfaltet keine rechtliche
        Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von
        E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen.

      
      Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.
      

      

      

      

      

      Date: Fri, 22 Apr 2011 10:39:24 -0400

      From: demetris@ece.neu.edu

      To: dev@ws.apache.org

      Subject: Re: Woden on mobile devices

      

      
      
      

      Hi Martin,

      

      yes exactly and that's the reason we switched over to REST
      services and particularly for

      mobile devices. Even though ksoap2 on Android seems to be fairly
      efficient it's still a bit

      heavier that the REST/HTTP mechanisms.

      I also looked into WADL but I am not sure how mature or generally
      accepted it is at this point.

      

      Regarding the publishing of the REST service, as you pointed out
      there's not a standard 

      method to publish them - some ideas I saw generate documents that
      describe the directory 

      hierarchy for the server side along with the URL specifications on
      how to reach the various 

      resources. I use Ajax for building clients for these services. But
      I can certainly work with you 

      on coming up with may be a more general architecture.

      

      In any case, thanks for the feedback and I will let you know about
      this once I give it a bit

      more thought. I appreciate the information and help Martin.

      

      On 4/21/2011 11:30 AM, Martin Gainty wrote:
      
         not yet here is their doc

        

        Please note that SOAP introduces some significant overhead for
        web services that may be problematic for mobile devices. If you
        have full control over the client and the server, a REST based
        architecture may be more adequate.

        

        maybe you can create a testcase and we can come up with an
        architecture to 

        1)publish the REST service

        2)create a Stub client which will consume the REST message

        

        did you have anything specific in mind?

        

        Martin  

        ______________________________________________ 

        Do not alter or disrupt this transmission.

        

        

        

        

        Date: Thu, 21 Apr 2011 10:00:15 -0400

        From: demetris@ece.neu.edu

        To: dev@ws.apache.org

        Subject: Re: Woden on mobile devices

        

        

        Hi Martin,

        

        apologies for re-posting this one - do you have an idea on
        whether the segment you sent below

        can handle REST-annotated WSDL files? 

        

        Thanks

        

        On 4/16/2011 10:54 AM, Demetris wrote:
         

          Hi Martin,

          

          isn't this parsing a SOAP WSDL file using the ksoap2 libs? Can
          it handle documents that describe

          REST as well? I guess it should but i am not sure. I will need
          to look into a bit more carefully.

          

          I appreciate the feedback

          

          On 4/15/2011 12:12 PM, Martin Gainty wrote:
          
             http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download

            take a look at org.ksoap2.transport.HttpTransport

            

            ksoap2\target\classes>javap
            .\org\ksoap2\transport\HttpTransport

            public class org.ksoap2.transport.HttpTransport extends
            org.ksoap2.transport.Transport{

                org.ksoap2.transport.ServiceConnection connection;

                java.io.OutputStream os;

                java.io.InputStream is;

                public
            org.ksoap2.transport.HttpTransport(java.lang.String);

               public void call(java.lang.String,
            org.ksoap2.SoapEnvelope)       throws java.io.IOException,
            org.xmlpull.v1.XmlPullParserException;

                public void reset();

                protected org.ksoap2.transport.ServiceConnection
            getServiceConnection()

              throws java.io.IOException;

            }

            

            //vs the axis HttpTransportReceiver

            public class
            org.apache.axis2.transport.http.HTTPTransportReceiver {

                public static Map getGetRequestParameters(String
            requestURI) {

                    Map map = new HashMap();

                    if (requestURI == null || "".equals(requestURI)) {

                        return map;

                    }

                    char[]       chars = requestURI.toCharArray();

                    final int NOT_BEGUN = 1500;

                    final int INSIDE_NAME = 1501;

                    final int INSIDE_VALUE = 1502;

                    int state = NOT_BEGUN;

                    StringBuffer name = new StringBuffer();

                    StringBuffer value = new StringBuffer();

            

                    for (int index = 0; index < chars.length;
            index++) {

                        if (state == NOT_BEGUN) {

                            if (chars[index] == '?') {

                                state = INSIDE_NAME;

                            }

                        } else if (state == INSIDE_NAME) {

                            if (chars[index] == '=') {

                                state = INSIDE_VALUE;

                            } else {

                                name.append(chars[index]);

                            }

                        } else if (state == INSIDE_VALUE) {

                            if (chars[index] == ',') {

                                state = INSIDE_NAME;

                                map.put(name.toString(),
            value.toString());

                                name.delete(0, name.length());

                                value.delete(0, value.length());

                            } else {

                                value.append(chars[index]);

                            }

                        }

                    }

                    if (name.length() + value.length() > 0) {

                        map.put(name.toString(), value.toString());

                    }

                    return map;

                }

            

                public static String
            getServicesHTML(ConfigurationContext configurationContext) {

                    String temp = "";

                    Map services =
            configurationContext.getAxisConfiguration().getServices();

                    Hashtable erroneousServices =

                           
            configurationContext.getAxisConfiguration().getFaultyServices();

                    boolean status = false;

                    if ((services != null) &&
            !services.isEmpty()) {

                        status = true;

                        Collection serviceCollection =
            services.values();

                        temp += "<h2>" + "Deployed services" +
            "</h2>";

                        for (Iterator it = serviceCollection.iterator();
            it.hasNext();) {

            

                            AxisService axisService = (AxisService)
            it.next();

            

                            Iterator iterator =
            axisService.getOperations();

            

                            temp += "<h3><a href=\"" +
            axisService.getName() + "?wsdl\">" +

                                    axisService.getName() +
            "</a></h3>";

            

                            if (iterator.hasNext()) {

                                temp += "Available operations
            <ul>";

            

                                for (; iterator.hasNext();) {

                                    AxisOperation axisOperation =
            (AxisOperation) iterator.next();

            

                                    temp += "<li>" +
            axisOperation.getName().getLocalPart() + "</li>";

                                }

            

                                temp += "</ul>";

                            } else {

                                temp += "No operations specified for
            this service";

                            }

                        }

                    }

                    if ((erroneousServices != null) &&
            !erroneousServices.isEmpty()) {

                        temp += "<hr><h2><font
            color=\"blue\">Faulty Services</font></h2>";

                        status = true;

            

                        Enumeration faultyservices =
            erroneousServices.keys();

            

                        while (faultyservices.hasMoreElements()) {

                            String faultyserviceName = (String)
            faultyservices.nextElement();

            

                            temp += "<h3><font
            color=\"blue\">" + faultyserviceName +
            "</font></h3>";

                        }

                    }

                    if (!status) {

                        temp = "<h2>There are no services
            deployed</h2>";

                    }

                    temp = "<html><head><title>Axis2:
            Services</title></head>" + "<body>" + temp

                            + "</body></html>";

            

                    return temp;

                }

                public static String printServiceHTML(String
            serviceName,

                                                     
            ConfigurationContext configurationContext) {

                    String temp = "";

                    try {

                        AxisConfiguration axisConfig =
            configurationContext.getAxisConfiguration();

                        AxisService axisService =
            axisConfig.getService(serviceName);

                        Iterator iterator = axisService.getOperations();

                        temp += "<h3>" + axisService.getName() +
            "</h3>";

                        temp += "<a href=\"" + axisService.getName()
            + "?wsdl\">wsdl</a> <br/> ";

                        temp += "<i>Service Description :  " +
            axisService.getServiceDescription() +

                                "</i><br/><br/>";

                        if (iterator.hasNext()) {

                            temp += "Available operations <ul>";

                            for (; iterator.hasNext();) {

                                AxisOperation axisOperation =
            (AxisOperation) iterator.next();

                                temp += "<li>" +
            axisOperation.getName().getLocalPart() + "</li>";

                            }

                            temp += "</ul>";

                        } else {

                            temp += "No operations specified for this
            service";

                        }

                        temp =
            "<html><head><title>Axis2:
            Services</title></head>" + "<body>" + temp

                                + "</body></html>";

                    }

                    catch (AxisFault axisFault) {

                        temp =
            "<html><head><title>Service has a
            fualt</title></head>" + "<body>"

                                + "<hr><h2><font
            color=\"blue\">" + axisFault.getMessage() +

                               
            "</font></h2></body></html>";

                    }

                    return temp;

                }

            }

            

            //since neither class is an interface we would need to
            refactor our 

            public class
            org.apache.axis2.transport.http.NewHTTPTransportReceiver
            extends org.ksoap2.transport.HttpTransport

            {

            //all of the legacy HttptransportReceiver code

            //add in overrides for attrs and methods from HttpTransport

            }

            

            //assuming we setup a simple client which implements
            org.ksoap2.transport.HttpTransport

            public class org.ksoap2.SoapEnvelope extends
            java.lang.Object{

                public static final int VER10;

                public static final int VER11;

                public static final int VER12;

                public static final java.lang.String ENV2001;

                public static final java.lang.String ENC2001;

                public static final java.lang.String ENV;

                public static final java.lang.String ENC;

                public static final java.lang.String XSD;

                public static final java.lang.String XSI;

                public static final java.lang.String XSD1999;

                public static final java.lang.String XSI1999;

                public java.lang.Object bodyIn;

                public java.lang.Object bodyOut;

                public org.kxml2.kdom.Element[] headerIn;

                public org.kxml2.kdom.Element[] headerOut;

                public java.lang.String encodingStyle;

                public int version;

                public java.lang.String env;

                public java.lang.String enc;

                public java.lang.String xsi;

                public java.lang.String xsd;

                public static boolean stringToBoolean(java.lang.String);

                public org.ksoap2.SoapEnvelope(int);

                public void parse(org.xmlpull.v1.XmlPullParser)      
            throws java.io.IOExcep

            tion, org.xmlpull.v1.XmlPullParserException;

                public void
            parseHeader(org.xmlpull.v1.XmlPullParser)       throws
            java.io.I

            OException, org.xmlpull.v1.XmlPullParserException;

                public void
            parseBody(org.xmlpull.v1.XmlPullParser)       throws
            java.io.IOE

            xception, org.xmlpull.v1.XmlPullParserException;

                public void write(org.xmlpull.v1.XmlSerializer)      
            throws java.io.IOExcep

            tion;

                public void
            writeHeader(org.xmlpull.v1.XmlSerializer)       throws
            java.io.I

            OException;

                public void
            writeBody(org.xmlpull.v1.XmlSerializer)       throws
            java.io.IOE

            xception;

                public void setOutputSoapObject(java.lang.Object);

            }

            

            vs our own javax.xml.soap.SOAPEnvelope

            public interface SOAPEnvelope extends SOAPElement {

                /**

                 * Creates a new <CODE>Name</CODE> object
            initialized with the given local name, namespace

                 * prefix, and namespace URI.

                 * <p/>

                 * <P>This factory method creates
            <CODE>Name</CODE> objects for use in the
            SOAP/XML document.

                 *

                 * @param localName a <CODE>String</CODE>
            giving the local name

                 * @param prefix    a <CODE>String</CODE>
            giving the prefix of the namespace

                 * @param uri       a <CODE>String</CODE>
            giving the URI of the namespace

                 * @return a <CODE>Name</CODE> object
            initialized with the given local name, namespace prefix,

                 *         and namespace URI

                 * @throws SOAPException if there is a SOAP error

                 */

                public abstract Name createName(String localName,

                                                String prefix,

                                                String uri)

                        throws SOAPException;

                public abstract Name createName(String localName) throws
            SOAPException;

                public abstract SOAPHeader getHeader() throws
            SOAPException;

                public abstract SOAPBody getBody() throws SOAPException;

                public abstract SOAPHeader addHeader() throws
            SOAPException;

                public abstract SOAPBody addBody() throws SOAPException;

            }

            

            //so you would need a new uber SOAPEnvelope class which
            extends base class SoapEnvelope implements SOAPEnvelope

            

            public class NewSOAPEnvelope extends org.ksoap2.SoapEnvelope
            implements javax.xml.soap.SOAPEnvelope 

            newHttpTransportReceiver would reference the new uber
            SOAPEnvelope class

               public void call(java.lang.String, NewSoapEnvelope)      
            throws java.io.IOException,
            org.xmlpull.v1.XmlPullParserException;

            

            does this conform to your understanding?

            Martin Gainty 

            ______________________________________________ 

            Note de déni et de confidentialité

             
            Ce message est confidentiel et peut être privilégié. Si vous
            n'êtes pas le destinataire prévu, nous te demandons avec
            bonté que pour satisfaire informez l'expéditeur. N'importe
            quelle diffusion non autorisée ou la copie de ceci est
            interdite. Ce message sert à l'information seulement et
            n'aura pas n'importe quel effet légalement obligatoire.
            Étant donné que les email peuvent facilement être sujets à
            la manipulation, nous ne pouvons accepter aucune
            responsabilité pour le contenu fourni.

            

            

            

            

            > Date: Fri, 15 Apr 2011 11:02:37 -0400

            > From: demetris@ece.neu.edu

            > To: dev@ws.apache.org

            > Subject: Woden on mobile devices

            > 

            > Hi all,

            > 

            > I think Woden can parse WSDL 2.0 that describe REST
            services correct?

            > Is there a mobile version of Woden for parsing such
            WSDL documents on

            > Android?

            > 

            > Thanks

            > 

            >
            ---------------------------------------------------------------------

            > To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org

            > For additional commands, e-mail: dev-help@ws.apache.org

            > 

          
        
      
     		 	   		  

Re: Woden on mobile devices

Posted by Demetris <de...@ece.neu.edu>.
Hi Martin,

sorry for the long delay in responding but I am sure you know how it is 
with multiple
projects.

I certainly agree with you both on the comm and msg standards on new 
phones - it is an ever
changing world there. It would certainly be worth looking into JSRs for 
addressing REST
on mobile devices. I did read the WADL standard and it does seem promising.

I am going to be traveling for a bit longer but I will stay in touch and 
either email or eventually
a face-to-face meeting that would certainly be good.

Thanks

On 4/22/2011 11:04 AM, Martin Gainty wrote:
> it is difficult with PDA's coming out every 6 months to elucidate from 
> the PDA managers which communication protocols and messaging standards 
> these new PDAs will be supporting
> *or* as in the case of MS and Apple are they crafting their own ...?
> it would be nice to find at least 1 JSR to address REST based 
> messaging standards for PDAs
>
> i think there is a future for REST consuming clients on PDAs and since 
> we're consuming alot of bandwidth here
> we could meet somewhere in btown..anyone that wants to participate is 
> invited (especially angel investors)
>
> perhaps WADL is the way..?
>
> keep in touch!
> Martin
> ______________________________________________
> Jogi és Bizalmassági kinyilatkoztatás/Verzicht und 
> Vertraulichkeitanmerkung/Note de déni et de confidentialité
> Ez az üzenet bizalmas.  Ha nem ön az akinek szánva volt, akkor kérjük, 
> hogy jelentse azt nekünk vissza. Semmiféle továbbítása vagy 
> másolatának készítése nem megengedett.  Ez az üzenet csak ismeret 
> cserét szolgál és semmiféle jogi alkalmazhatósága sincs.  Mivel az 
> electronikus üzenetek könnyen megváltoztathatóak, ezért minket semmi 
> felelöség nem terhelhet ezen üzenet tartalma miatt.
>
> Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene 
> Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede 
> unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. 
> Diese Nachricht dient lediglich dem Austausch von Informationen und 
> entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten 
> Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den 
> Inhalt uebernehmen.
> Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.
>
>
>
>
>
> ------------------------------------------------------------------------
> Date: Fri, 22 Apr 2011 10:39:24 -0400
> From: demetris@ece.neu.edu
> To: dev@ws.apache.org
> Subject: Re: Woden on mobile devices
>
>
> Hi Martin,
>
> yes exactly and that's the reason we switched over to REST services 
> and particularly for
> mobile devices. Even though ksoap2 on Android seems to be fairly 
> efficient it's still a bit
> heavier that the REST/HTTP mechanisms.
> I also looked into WADL but I am not sure how mature or generally 
> accepted it is at this point.
>
> Regarding the publishing of the REST service, as you pointed out 
> there's not a standard
> method to publish them - some ideas I saw generate documents that 
> describe the directory
> hierarchy for the server side along with the URL specifications on how 
> to reach the various
> resources. I use Ajax for building clients for these services. But I 
> can certainly work with you
> on coming up with may be a more general architecture.
>
> In any case, thanks for the feedback and I will let you know about 
> this once I give it a bit
> more thought. I appreciate the information and help Martin.
>
> On 4/21/2011 11:30 AM, Martin Gainty wrote:
>
>     not yet here is their doc
>
>     Please note that SOAP introduces some significant overhead for web
>     services that may be problematic for mobile devices. If you have
>     full control over the client and the server, a REST based
>     architecture may be more adequate.
>
>     maybe you can create a testcase and we can come up with an
>     architecture to
>     1)publish the REST service
>     2)create a Stub client which will consume the REST message
>
>     did you have anything specific in mind?
>
>     Martin
>     ______________________________________________
>     Do not alter or disrupt this transmission.
>
>
>
>
>     ------------------------------------------------------------------------
>     Date: Thu, 21 Apr 2011 10:00:15 -0400
>     From: demetris@ece.neu.edu <ma...@ece.neu.edu>
>     To: dev@ws.apache.org <ma...@ws.apache.org>
>     Subject: Re: Woden on mobile devices
>
>
>     Hi Martin,
>
>     apologies for re-posting this one - do you have an idea on whether
>     the segment you sent below
>     can handle REST-annotated WSDL files?
>
>     Thanks
>
>     On 4/16/2011 10:54 AM, Demetris wrote:
>
>
>         Hi Martin,
>
>         isn't this parsing a SOAP WSDL file using the ksoap2 libs? Can
>         it handle documents that describe
>         REST as well? I guess it should but i am not sure. I will need
>         to look into a bit more carefully.
>
>         I appreciate the feedback
>
>         On 4/15/2011 12:12 PM, Martin Gainty wrote:
>
>             http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download
>             take a look at org.ksoap2.transport.HttpTransport
>
>             ksoap2\target\classes>javap
>             .\org\ksoap2\transport\HttpTransport
>             public class org.ksoap2.transport.HttpTransport extends
>             org.ksoap2.transport.Transport{
>                 org.ksoap2.transport.ServiceConnection connection;
>                 java.io.OutputStream os;
>                 java.io.InputStream is;
>                 public
>             org.ksoap2.transport.HttpTransport(java.lang.String);
>                public void call(java.lang.String,
>             org.ksoap2.SoapEnvelope)       throws java.io.IOException,
>             org.xmlpull.v1.XmlPullParserException;
>                 public void reset();
>                 protected org.ksoap2.transport.ServiceConnection
>             getServiceConnection()
>               throws java.io.IOException;
>             }
>
>             //vs the axis HttpTransportReceiver
>             public class
>             org.apache.axis2.transport.http.HTTPTransportReceiver {
>                 public static Map getGetRequestParameters(String
>             requestURI) {
>                     Map map = new HashMap();
>                     if (requestURI == null || "".equals(requestURI)) {
>                         return map;
>                     }
>                     char[]       chars = requestURI.toCharArray();
>                     final int NOT_BEGUN = 1500;
>                     final int INSIDE_NAME = 1501;
>                     final int INSIDE_VALUE = 1502;
>                     int state = NOT_BEGUN;
>                     StringBuffer name = new StringBuffer();
>                     StringBuffer value = new StringBuffer();
>
>                     for (int index = 0; index < chars.length; index++) {
>                         if (state == NOT_BEGUN) {
>                             if (chars[index] == '?') {
>                                 state = INSIDE_NAME;
>                             }
>                         } else if (state == INSIDE_NAME) {
>                             if (chars[index] == '=') {
>                                 state = INSIDE_VALUE;
>                             } else {
>                                 name.append(chars[index]);
>                             }
>                         } else if (state == INSIDE_VALUE) {
>                             if (chars[index] == ',') {
>                                 state = INSIDE_NAME;
>                                 map.put(name.toString(),
>             value.toString());
>                                 name.delete(0, name.length());
>                                 value.delete(0, value.length());
>                             } else {
>                                 value.append(chars[index]);
>                             }
>                         }
>                     }
>                     if (name.length() + value.length() > 0) {
>                         map.put(name.toString(), value.toString());
>                     }
>                     return map;
>                 }
>
>                 public static String
>             getServicesHTML(ConfigurationContext configurationContext) {
>                     String temp = "";
>                     Map services =
>             configurationContext.getAxisConfiguration().getServices();
>                     Hashtable erroneousServices =
>                            
>             configurationContext.getAxisConfiguration().getFaultyServices();
>                     boolean status = false;
>                     if ((services != null) && !services.isEmpty()) {
>                         status = true;
>                         Collection serviceCollection = services.values();
>                         temp += "<h2>" + "Deployed services" + "</h2>";
>                         for (Iterator it =
>             serviceCollection.iterator(); it.hasNext();) {
>
>                             AxisService axisService = (AxisService)
>             it.next();
>
>                             Iterator iterator =
>             axisService.getOperations();
>
>                             temp += "<h3><a href=\"" +
>             axisService.getName() + "?wsdl\">" +
>                                     axisService.getName() + "</a></h3>";
>
>                             if (iterator.hasNext()) {
>                                 temp += "Available operations <ul>";
>
>                                 for (; iterator.hasNext();) {
>                                     AxisOperation axisOperation =
>             (AxisOperation) iterator.next();
>
>                                     temp += "<li>" +
>             axisOperation.getName().getLocalPart() + "</li>";
>                                 }
>
>                                 temp += "</ul>";
>                             } else {
>                                 temp += "No operations specified for
>             this service";
>                             }
>                         }
>                     }
>                     if ((erroneousServices != null) &&
>             !erroneousServices.isEmpty()) {
>                         temp += "<hr><h2><font color=\"blue\">Faulty
>             Services</font></h2>";
>                         status = true;
>
>                         Enumeration faultyservices =
>             erroneousServices.keys();
>
>                         while (faultyservices.hasMoreElements()) {
>                             String faultyserviceName = (String)
>             faultyservices.nextElement();
>
>                             temp += "<h3><font color=\"blue\">" +
>             faultyserviceName + "</font></h3>";
>                         }
>                     }
>                     if (!status) {
>                         temp = "<h2>There are no services deployed</h2>";
>                     }
>                     temp = "<html><head><title>Axis2:
>             Services</title></head>" + "<body>" + temp
>                             + "</body></html>";
>
>                     return temp;
>                 }
>                 public static String printServiceHTML(String serviceName,
>                                                      
>             ConfigurationContext configurationContext) {
>                     String temp = "";
>                     try {
>                         AxisConfiguration axisConfig =
>             configurationContext.getAxisConfiguration();
>                         AxisService axisService =
>             axisConfig.getService(serviceName);
>                         Iterator iterator = axisService.getOperations();
>                         temp += "<h3>" + axisService.getName() + "</h3>";
>                         temp += "<a href=\"" + axisService.getName() +
>             "?wsdl\">wsdl</a> <br/> ";
>                         temp += "<i>Service Description :  " +
>             axisService.getServiceDescription() +
>                                 "</i><br/><br/>";
>                         if (iterator.hasNext()) {
>                             temp += "Available operations <ul>";
>                             for (; iterator.hasNext();) {
>                                 AxisOperation axisOperation =
>             (AxisOperation) iterator.next();
>                                 temp += "<li>" +
>             axisOperation.getName().getLocalPart() + "</li>";
>                             }
>                             temp += "</ul>";
>                         } else {
>                             temp += "No operations specified for this
>             service";
>                         }
>                         temp = "<html><head><title>Axis2:
>             Services</title></head>" + "<body>" + temp
>                                 + "</body></html>";
>                     }
>                     catch (AxisFault axisFault) {
>                         temp = "<html><head><title>Service has a
>             fualt</title></head>" + "<body>"
>                                 + "<hr><h2><font color=\"blue\">" +
>             axisFault.getMessage() +
>                                 "</font></h2></body></html>";
>                     }
>                     return temp;
>                 }
>             }
>
>             //since neither class is an interface we would need to
>             refactor our
>             public class
>             org.apache.axis2.transport.http.NewHTTPTransportReceiver
>             extends org.ksoap2.transport.HttpTransport
>             {
>             //all of the legacy HttptransportReceiver code
>             //add in overrides for attrs and methods from HttpTransport
>             }
>
>             //assuming we setup a simple client which implements
>             org.ksoap2.transport.HttpTransport
>             public class org.ksoap2.SoapEnvelope extends java.lang.Object{
>                 public static final int VER10;
>                 public static final int VER11;
>                 public static final int VER12;
>                 public static final java.lang.String ENV2001;
>                 public static final java.lang.String ENC2001;
>                 public static final java.lang.String ENV;
>                 public static final java.lang.String ENC;
>                 public static final java.lang.String XSD;
>                 public static final java.lang.String XSI;
>                 public static final java.lang.String XSD1999;
>                 public static final java.lang.String XSI1999;
>                 public java.lang.Object bodyIn;
>                 public java.lang.Object bodyOut;
>                 public org.kxml2.kdom.Element[] headerIn;
>                 public org.kxml2.kdom.Element[] headerOut;
>                 public java.lang.String encodingStyle;
>                 public int version;
>                 public java.lang.String env;
>                 public java.lang.String enc;
>                 public java.lang.String xsi;
>                 public java.lang.String xsd;
>                 public static boolean stringToBoolean(java.lang.String);
>                 public org.ksoap2.SoapEnvelope(int);
>                 public void parse(org.xmlpull.v1.XmlPullParser)      
>             throws java.io.IOExcep
>             tion, org.xmlpull.v1.XmlPullParserException;
>                 public void
>             parseHeader(org.xmlpull.v1.XmlPullParser)       throws
>             java.io.I
>             OException, org.xmlpull.v1.XmlPullParserException;
>                 public void
>             parseBody(org.xmlpull.v1.XmlPullParser)       throws
>             java.io.IOE
>             xception, org.xmlpull.v1.XmlPullParserException;
>                 public void write(org.xmlpull.v1.XmlSerializer)      
>             throws java.io.IOExcep
>             tion;
>                 public void
>             writeHeader(org.xmlpull.v1.XmlSerializer)       throws
>             java.io.I
>             OException;
>                 public void
>             writeBody(org.xmlpull.v1.XmlSerializer)       throws
>             java.io.IOE
>             xception;
>                 public void setOutputSoapObject(java.lang.Object);
>             }
>
>             vs our own javax.xml.soap.SOAPEnvelope
>             public interface SOAPEnvelope extends SOAPElement {
>                 /**
>                  * Creates a new <CODE>Name</CODE> object initialized
>             with the given local name, namespace
>                  * prefix, and namespace URI.
>                  * <p/>
>                  * <P>This factory method creates <CODE>Name</CODE>
>             objects for use in the SOAP/XML document.
>                  *
>                  * @param localName a <CODE>String</CODE> giving the
>             local name
>                  * @param prefix    a <CODE>String</CODE> giving the
>             prefix of the namespace
>                  * @param uri       a <CODE>String</CODE> giving the
>             URI of the namespace
>                  * @return a <CODE>Name</CODE> object initialized with
>             the given local name, namespace prefix,
>                  *         and namespace URI
>                  * @throws SOAPException if there is a SOAP error
>                  */
>                 public abstract Name createName(String localName,
>                                                 String prefix,
>                                                 String uri)
>                         throws SOAPException;
>                 public abstract Name createName(String localName)
>             throws SOAPException;
>                 public abstract SOAPHeader getHeader() throws
>             SOAPException;
>                 public abstract SOAPBody getBody() throws SOAPException;
>                 public abstract SOAPHeader addHeader() throws
>             SOAPException;
>                 public abstract SOAPBody addBody() throws SOAPException;
>             }
>
>             //so you would need a new uber SOAPEnvelope class which
>             extends base class SoapEnvelope implements SOAPEnvelope
>
>             public class NewSOAPEnvelope extends
>             org.ksoap2.SoapEnvelope implements
>             javax.xml.soap.SOAPEnvelope
>             newHttpTransportReceiver would reference the new uber
>             SOAPEnvelope class
>                public void call(java.lang.String,
>             NewSoapEnvelope)       throws java.io.IOException,
>             org.xmlpull.v1.XmlPullParserException;
>
>             does this conform to your understanding?
>             Martin Gainty
>             ______________________________________________
>             Note de déni et de confidentialité
>             Ce message est confidentiel et peut être privilégié. Si
>             vous n'êtes pas le destinataire prévu, nous te demandons
>             avec bonté que pour satisfaire informez l'expéditeur.
>             N'importe quelle diffusion non autorisée ou la copie de
>             ceci est interdite. Ce message sert à l'information
>             seulement et n'aura pas n'importe quel effet légalement
>             obligatoire. Étant donné que les email peuvent facilement
>             être sujets à la manipulation, nous ne pouvons accepter
>             aucune responsabilité pour le contenu fourni.
>
>
>
>
>             > Date: Fri, 15 Apr 2011 11:02:37 -0400
>             > From: demetris@ece.neu.edu <ma...@ece.neu.edu>
>             > To: dev@ws.apache.org <ma...@ws.apache.org>
>             > Subject: Woden on mobile devices
>             >
>             > Hi all,
>             >
>             > I think Woden can parse WSDL 2.0 that describe REST
>             services correct?
>             > Is there a mobile version of Woden for parsing such WSDL
>             documents on
>             > Android?
>             >
>             > Thanks
>             >
>             >
>             ---------------------------------------------------------------------
>             > To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
>             <ma...@ws.apache.org>
>             > For additional commands, e-mail: dev-help@ws.apache.org
>             <ma...@ws.apache.org>
>             >
>

RE: Woden on mobile devices

Posted by Martin Gainty <mg...@hotmail.com>.
it is difficult with PDA's coming out every 6 months to elucidate from the PDA managers which communication protocols and messaging standards these new PDAs will be supporting 
*or* as in the case of MS and Apple are they crafting their own ...?
it would be nice to find at least 1 JSR to address REST based messaging standards for PDAs

i think there is a future for REST consuming clients on PDAs and since we're consuming alot of bandwidth here
we could meet somewhere in btown..anyone that wants to participate is invited (especially angel investors)

perhaps WADL is the way..?

keep in touch!
Martin 
______________________________________________ 
Jogi és Bizalmassági kinyilatkoztatás/Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
 Ez az
üzenet bizalmas.  Ha nem ön az akinek szánva volt, akkor kérjük, hogy
jelentse azt nekünk vissza. Semmiféle továbbítása vagy másolatának
készítése nem megengedett.  Ez az üzenet csak ismeret cserét szolgál és
semmiféle jogi alkalmazhatósága sincs.  Mivel az electronikus üzenetek
könnyen megváltoztathatóak, ezért minket semmi felelöség nem terhelhet
ezen üzenet tartalma miatt.

Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen.
Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.




Date: Fri, 22 Apr 2011 10:39:24 -0400
From: demetris@ece.neu.edu
To: dev@ws.apache.org
Subject: Re: Woden on mobile devices



  


    
  
  
    

    Hi Martin,

    

    yes exactly and that's the reason we switched over to REST services
    and particularly for

    mobile devices. Even though ksoap2 on Android seems to be fairly
    efficient it's still a bit

    heavier that the REST/HTTP mechanisms.

    I also looked into WADL but I am not sure how mature or generally
    accepted it is at this point.

    

    Regarding the publishing of the REST service, as you pointed out
    there's not a standard 

    method to publish them - some ideas I saw generate documents that
    describe the directory 

    hierarchy for the server side along with the URL specifications on
    how to reach the various 

    resources. I use Ajax for building clients for these services. But I
    can certainly work with you 

    on coming up with may be a more general architecture.

    

    In any case, thanks for the feedback and I will let you know about
    this once I give it a bit

    more thought. I appreciate the information and help Martin.

    

    On 4/21/2011 11:30 AM, Martin Gainty wrote:
    
      
      not yet here is their doc

      

      Please note that SOAP introduces some significant overhead for
      web
      services that may be problematic for mobile devices. If you have
      full
      control over the client and the server, a REST based architecture
      may
      be more adequate.

      

      maybe you can create a testcase and we can come up with an
      architecture to 

      1)publish the REST service

      2)create a Stub client which will consume the REST message

      

      did you have anything specific in mind?

      

      Martin  

      ______________________________________________ 

      Do not alter or disrupt this transmission.

      

      

      

      

      Date: Thu, 21 Apr 2011 10:00:15 -0400

      From: demetris@ece.neu.edu

      To: dev@ws.apache.org

      Subject: Re: Woden on mobile devices

      

      
      
      

      Hi Martin,

      

      apologies for re-posting this one - do you have an idea on whether
      the segment you sent below

      can handle REST-annotated WSDL files? 

      

      Thanks

      

      On 4/16/2011 10:54 AM, Demetris wrote:
       

        Hi Martin,

        

        isn't this parsing a SOAP WSDL file using the ksoap2 libs? Can
        it handle documents that describe

        REST as well? I guess it should but i am not sure. I will need
        to look into a bit more carefully.

        

        I appreciate the feedback

        

        On 4/15/2011 12:12 PM, Martin Gainty wrote:
        
           http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download

          take a look at org.ksoap2.transport.HttpTransport

          

          ksoap2\target\classes>javap
          .\org\ksoap2\transport\HttpTransport

          public class org.ksoap2.transport.HttpTransport extends
          org.ksoap2.transport.Transport{

              org.ksoap2.transport.ServiceConnection connection;

              java.io.OutputStream os;

              java.io.InputStream is;

              public
          org.ksoap2.transport.HttpTransport(java.lang.String);

             public void call(java.lang.String,
          org.ksoap2.SoapEnvelope)       throws java.io.IOException,
          org.xmlpull.v1.XmlPullParserException;

              public void reset();

              protected org.ksoap2.transport.ServiceConnection
          getServiceConnection()

            throws java.io.IOException;

          }

          

          //vs the axis HttpTransportReceiver

          public class
          org.apache.axis2.transport.http.HTTPTransportReceiver {

              public static Map getGetRequestParameters(String
          requestURI) {

                  Map map = new HashMap();

                  if (requestURI == null || "".equals(requestURI)) {

                      return map;

                  }

                  char[]       chars = requestURI.toCharArray();

                  final int NOT_BEGUN = 1500;

                  final int INSIDE_NAME = 1501;

                  final int INSIDE_VALUE = 1502;

                  int state = NOT_BEGUN;

                  StringBuffer name = new StringBuffer();

                  StringBuffer value = new StringBuffer();

          

                  for (int index = 0; index < chars.length; index++)
          {

                      if (state == NOT_BEGUN) {

                          if (chars[index] == '?') {

                              state = INSIDE_NAME;

                          }

                      } else if (state == INSIDE_NAME) {

                          if (chars[index] == '=') {

                              state = INSIDE_VALUE;

                          } else {

                              name.append(chars[index]);

                          }

                      } else if (state == INSIDE_VALUE) {

                          if (chars[index] == ',') {

                              state = INSIDE_NAME;

                              map.put(name.toString(),
          value.toString());

                              name.delete(0, name.length());

                              value.delete(0, value.length());

                          } else {

                              value.append(chars[index]);

                          }

                      }

                  }

                  if (name.length() + value.length() > 0) {

                      map.put(name.toString(), value.toString());

                  }

                  return map;

              }

          

              public static String getServicesHTML(ConfigurationContext
          configurationContext) {

                  String temp = "";

                  Map services =
          configurationContext.getAxisConfiguration().getServices();

                  Hashtable erroneousServices =

                         
          configurationContext.getAxisConfiguration().getFaultyServices();

                  boolean status = false;

                  if ((services != null) && !services.isEmpty())
          {

                      status = true;

                      Collection serviceCollection = services.values();

                      temp += "<h2>" + "Deployed services" +
          "</h2>";

                      for (Iterator it = serviceCollection.iterator();
          it.hasNext();) {

          

                          AxisService axisService = (AxisService)
          it.next();

          

                          Iterator iterator =
          axisService.getOperations();

          

                          temp += "<h3><a href=\"" +
          axisService.getName() + "?wsdl\">" +

                                  axisService.getName() +
          "</a></h3>";

          

                          if (iterator.hasNext()) {

                              temp += "Available operations <ul>";

          

                              for (; iterator.hasNext();) {

                                  AxisOperation axisOperation =
          (AxisOperation) iterator.next();

          

                                  temp += "<li>" +
          axisOperation.getName().getLocalPart() + "</li>";

                              }

          

                              temp += "</ul>";

                          } else {

                              temp += "No operations specified for this
          service";

                          }

                      }

                  }

                  if ((erroneousServices != null) &&
          !erroneousServices.isEmpty()) {

                      temp += "<hr><h2><font
          color=\"blue\">Faulty Services</font></h2>";

                      status = true;

          

                      Enumeration faultyservices =
          erroneousServices.keys();

          

                      while (faultyservices.hasMoreElements()) {

                          String faultyserviceName = (String)
          faultyservices.nextElement();

          

                          temp += "<h3><font
          color=\"blue\">" + faultyserviceName +
          "</font></h3>";

                      }

                  }

                  if (!status) {

                      temp = "<h2>There are no services
          deployed</h2>";

                  }

                  temp = "<html><head><title>Axis2:
          Services</title></head>" + "<body>" + temp

                          + "</body></html>";

          

                  return temp;

              }

              public static String printServiceHTML(String serviceName,

                                                    ConfigurationContext
          configurationContext) {

                  String temp = "";

                  try {

                      AxisConfiguration axisConfig =
          configurationContext.getAxisConfiguration();

                      AxisService axisService =
          axisConfig.getService(serviceName);

                      Iterator iterator = axisService.getOperations();

                      temp += "<h3>" + axisService.getName() +
          "</h3>";

                      temp += "<a href=\"" + axisService.getName() +
          "?wsdl\">wsdl</a> <br/> ";

                      temp += "<i>Service Description :  " +
          axisService.getServiceDescription() +

                              "</i><br/><br/>";

                      if (iterator.hasNext()) {

                          temp += "Available operations <ul>";

                          for (; iterator.hasNext();) {

                              AxisOperation axisOperation =
          (AxisOperation) iterator.next();

                              temp += "<li>" +
          axisOperation.getName().getLocalPart() + "</li>";

                          }

                          temp += "</ul>";

                      } else {

                          temp += "No operations specified for this
          service";

                      }

                      temp =
          "<html><head><title>Axis2:
          Services</title></head>" + "<body>" + temp

                              + "</body></html>";

                  }

                  catch (AxisFault axisFault) {

                      temp =
          "<html><head><title>Service has a
          fualt</title></head>" + "<body>"

                              + "<hr><h2><font
          color=\"blue\">" + axisFault.getMessage() +

                             
          "</font></h2></body></html>";

                  }

                  return temp;

              }

          }

          

          //since neither class is an interface we would need to
          refactor our 

          public class
          org.apache.axis2.transport.http.NewHTTPTransportReceiver
          extends org.ksoap2.transport.HttpTransport

          {

          //all of the legacy HttptransportReceiver code

          //add in overrides for attrs and methods from HttpTransport

          }

          

          //assuming we setup a simple client which implements
          org.ksoap2.transport.HttpTransport

          public class org.ksoap2.SoapEnvelope extends java.lang.Object{

              public static final int VER10;

              public static final int VER11;

              public static final int VER12;

              public static final java.lang.String ENV2001;

              public static final java.lang.String ENC2001;

              public static final java.lang.String ENV;

              public static final java.lang.String ENC;

              public static final java.lang.String XSD;

              public static final java.lang.String XSI;

              public static final java.lang.String XSD1999;

              public static final java.lang.String XSI1999;

              public java.lang.Object bodyIn;

              public java.lang.Object bodyOut;

              public org.kxml2.kdom.Element[] headerIn;

              public org.kxml2.kdom.Element[] headerOut;

              public java.lang.String encodingStyle;

              public int version;

              public java.lang.String env;

              public java.lang.String enc;

              public java.lang.String xsi;

              public java.lang.String xsd;

              public static boolean stringToBoolean(java.lang.String);

              public org.ksoap2.SoapEnvelope(int);

              public void parse(org.xmlpull.v1.XmlPullParser)      
          throws java.io.IOExcep

          tion, org.xmlpull.v1.XmlPullParserException;

              public void
          parseHeader(org.xmlpull.v1.XmlPullParser)       throws
          java.io.I

          OException, org.xmlpull.v1.XmlPullParserException;

              public void parseBody(org.xmlpull.v1.XmlPullParser)      
          throws java.io.IOE

          xception, org.xmlpull.v1.XmlPullParserException;

              public void write(org.xmlpull.v1.XmlSerializer)      
          throws java.io.IOExcep

          tion;

              public void
          writeHeader(org.xmlpull.v1.XmlSerializer)       throws
          java.io.I

          OException;

              public void writeBody(org.xmlpull.v1.XmlSerializer)      
          throws java.io.IOE

          xception;

              public void setOutputSoapObject(java.lang.Object);

          }

          

          vs our own javax.xml.soap.SOAPEnvelope

          public interface SOAPEnvelope extends SOAPElement {

              /**

               * Creates a new <CODE>Name</CODE> object
          initialized with the given local name, namespace

               * prefix, and namespace URI.

               * <p/>

               * <P>This factory method creates
          <CODE>Name</CODE> objects for use in the SOAP/XML
          document.

               *

               * @param localName a <CODE>String</CODE>
          giving the local name

               * @param prefix    a <CODE>String</CODE>
          giving the prefix of the namespace

               * @param uri       a <CODE>String</CODE>
          giving the URI of the namespace

               * @return a <CODE>Name</CODE> object
          initialized with the given local name, namespace prefix,

               *         and namespace URI

               * @throws SOAPException if there is a SOAP error

               */

              public abstract Name createName(String localName,

                                              String prefix,

                                              String uri)

                      throws SOAPException;

              public abstract Name createName(String localName) throws
          SOAPException;

              public abstract SOAPHeader getHeader() throws
          SOAPException;

              public abstract SOAPBody getBody() throws SOAPException;

              public abstract SOAPHeader addHeader() throws
          SOAPException;

              public abstract SOAPBody addBody() throws SOAPException;

          }

          

          //so you would need a new uber SOAPEnvelope class which
          extends base class SoapEnvelope implements SOAPEnvelope

          

          public class NewSOAPEnvelope extends org.ksoap2.SoapEnvelope
          implements javax.xml.soap.SOAPEnvelope 

          newHttpTransportReceiver would reference the new uber
          SOAPEnvelope class

             public void call(java.lang.String, NewSoapEnvelope)      
          throws java.io.IOException,
          org.xmlpull.v1.XmlPullParserException;

          

          does this conform to your understanding?

          Martin Gainty 

          ______________________________________________ 

          Note de déni et de confidentialité

           
          Ce message est confidentiel et peut être privilégié. Si vous
          n'êtes pas le destinataire prévu, nous te demandons avec bonté
          que pour satisfaire informez l'expéditeur. N'importe quelle
          diffusion non autorisée ou la copie de ceci est interdite. Ce
          message sert à l'information seulement et n'aura pas n'importe
          quel effet légalement obligatoire. Étant donné que les email
          peuvent facilement être sujets à la manipulation, nous ne
          pouvons accepter aucune responsabilité pour le contenu fourni.

          

          

          

          

          > Date: Fri, 15 Apr 2011 11:02:37 -0400

          > From: demetris@ece.neu.edu

          > To: dev@ws.apache.org

          > Subject: Woden on mobile devices

          > 

          > Hi all,

          > 

          > I think Woden can parse WSDL 2.0 that describe REST
          services correct?

          > Is there a mobile version of Woden for parsing such WSDL
          documents on

          > Android?

          > 

          > Thanks

          > 

          >
          ---------------------------------------------------------------------

          > To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org

          > For additional commands, e-mail: dev-help@ws.apache.org

          > 

        
      
     		 	   		  

Re: Woden on mobile devices

Posted by Demetris <de...@ece.neu.edu>.
Hi Martin,

yes exactly and that's the reason we switched over to REST services and 
particularly for
mobile devices. Even though ksoap2 on Android seems to be fairly 
efficient it's still a bit
heavier that the REST/HTTP mechanisms.
I also looked into WADL but I am not sure how mature or generally 
accepted it is at this point.

Regarding the publishing of the REST service, as you pointed out there's 
not a standard
method to publish them - some ideas I saw generate documents that 
describe the directory
hierarchy for the server side along with the URL specifications on how 
to reach the various
resources. I use Ajax for building clients for these services. But I can 
certainly work with you
on coming up with may be a more general architecture.

In any case, thanks for the feedback and I will let you know about this 
once I give it a bit
more thought. I appreciate the information and help Martin.

On 4/21/2011 11:30 AM, Martin Gainty wrote:
> not yet here is their doc
>
> Please note that SOAP introduces some significant overhead for web 
> services that may be problematic for mobile devices. If you have full 
> control over the client and the server, a REST based architecture may 
> be more adequate.
>
> maybe you can create a testcase and we can come up with an 
> architecture to
> 1)publish the REST service
> 2)create a Stub client which will consume the REST message
>
> did you have anything specific in mind?
>
> Martin
> ______________________________________________
> Do not alter or disrupt this transmission.
>
>
>
>
> ------------------------------------------------------------------------
> Date: Thu, 21 Apr 2011 10:00:15 -0400
> From: demetris@ece.neu.edu
> To: dev@ws.apache.org
> Subject: Re: Woden on mobile devices
>
>
> Hi Martin,
>
> apologies for re-posting this one - do you have an idea on whether the 
> segment you sent below
> can handle REST-annotated WSDL files?
>
> Thanks
>
> On 4/16/2011 10:54 AM, Demetris wrote:
>
>
>     Hi Martin,
>
>     isn't this parsing a SOAP WSDL file using the ksoap2 libs? Can it
>     handle documents that describe
>     REST as well? I guess it should but i am not sure. I will need to
>     look into a bit more carefully.
>
>     I appreciate the feedback
>
>     On 4/15/2011 12:12 PM, Martin Gainty wrote:
>
>         http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download
>         take a look at org.ksoap2.transport.HttpTransport
>
>         ksoap2\target\classes>javap .\org\ksoap2\transport\HttpTransport
>         public class org.ksoap2.transport.HttpTransport extends
>         org.ksoap2.transport.Transport{
>             org.ksoap2.transport.ServiceConnection connection;
>             java.io.OutputStream os;
>             java.io.InputStream is;
>             public org.ksoap2.transport.HttpTransport(java.lang.String);
>            public void call(java.lang.String,
>         org.ksoap2.SoapEnvelope)       throws java.io.IOException,
>         org.xmlpull.v1.XmlPullParserException;
>             public void reset();
>             protected org.ksoap2.transport.ServiceConnection
>         getServiceConnection()
>           throws java.io.IOException;
>         }
>
>         //vs the axis HttpTransportReceiver
>         public class
>         org.apache.axis2.transport.http.HTTPTransportReceiver {
>             public static Map getGetRequestParameters(String requestURI) {
>                 Map map = new HashMap();
>                 if (requestURI == null || "".equals(requestURI)) {
>                     return map;
>                 }
>                 char[]       chars = requestURI.toCharArray();
>                 final int NOT_BEGUN = 1500;
>                 final int INSIDE_NAME = 1501;
>                 final int INSIDE_VALUE = 1502;
>                 int state = NOT_BEGUN;
>                 StringBuffer name = new StringBuffer();
>                 StringBuffer value = new StringBuffer();
>
>                 for (int index = 0; index < chars.length; index++) {
>                     if (state == NOT_BEGUN) {
>                         if (chars[index] == '?') {
>                             state = INSIDE_NAME;
>                         }
>                     } else if (state == INSIDE_NAME) {
>                         if (chars[index] == '=') {
>                             state = INSIDE_VALUE;
>                         } else {
>                             name.append(chars[index]);
>                         }
>                     } else if (state == INSIDE_VALUE) {
>                         if (chars[index] == ',') {
>                             state = INSIDE_NAME;
>                             map.put(name.toString(), value.toString());
>                             name.delete(0, name.length());
>                             value.delete(0, value.length());
>                         } else {
>                             value.append(chars[index]);
>                         }
>                     }
>                 }
>                 if (name.length() + value.length() > 0) {
>                     map.put(name.toString(), value.toString());
>                 }
>                 return map;
>             }
>
>             public static String getServicesHTML(ConfigurationContext
>         configurationContext) {
>                 String temp = "";
>                 Map services =
>         configurationContext.getAxisConfiguration().getServices();
>                 Hashtable erroneousServices =
>                        
>         configurationContext.getAxisConfiguration().getFaultyServices();
>                 boolean status = false;
>                 if ((services != null) && !services.isEmpty()) {
>                     status = true;
>                     Collection serviceCollection = services.values();
>                     temp += "<h2>" + "Deployed services" + "</h2>";
>                     for (Iterator it = serviceCollection.iterator();
>         it.hasNext();) {
>
>                         AxisService axisService = (AxisService) it.next();
>
>                         Iterator iterator = axisService.getOperations();
>
>                         temp += "<h3><a href=\"" +
>         axisService.getName() + "?wsdl\">" +
>                                 axisService.getName() + "</a></h3>";
>
>                         if (iterator.hasNext()) {
>                             temp += "Available operations <ul>";
>
>                             for (; iterator.hasNext();) {
>                                 AxisOperation axisOperation =
>         (AxisOperation) iterator.next();
>
>                                 temp += "<li>" +
>         axisOperation.getName().getLocalPart() + "</li>";
>                             }
>
>                             temp += "</ul>";
>                         } else {
>                             temp += "No operations specified for this
>         service";
>                         }
>                     }
>                 }
>                 if ((erroneousServices != null) &&
>         !erroneousServices.isEmpty()) {
>                     temp += "<hr><h2><font color=\"blue\">Faulty
>         Services</font></h2>";
>                     status = true;
>
>                     Enumeration faultyservices = erroneousServices.keys();
>
>                     while (faultyservices.hasMoreElements()) {
>                         String faultyserviceName = (String)
>         faultyservices.nextElement();
>
>                         temp += "<h3><font color=\"blue\">" +
>         faultyserviceName + "</font></h3>";
>                     }
>                 }
>                 if (!status) {
>                     temp = "<h2>There are no services deployed</h2>";
>                 }
>                 temp = "<html><head><title>Axis2:
>         Services</title></head>" + "<body>" + temp
>                         + "</body></html>";
>
>                 return temp;
>             }
>             public static String printServiceHTML(String serviceName,
>                                                   ConfigurationContext
>         configurationContext) {
>                 String temp = "";
>                 try {
>                     AxisConfiguration axisConfig =
>         configurationContext.getAxisConfiguration();
>                     AxisService axisService =
>         axisConfig.getService(serviceName);
>                     Iterator iterator = axisService.getOperations();
>                     temp += "<h3>" + axisService.getName() + "</h3>";
>                     temp += "<a href=\"" + axisService.getName() +
>         "?wsdl\">wsdl</a> <br/> ";
>                     temp += "<i>Service Description :  " +
>         axisService.getServiceDescription() +
>                             "</i><br/><br/>";
>                     if (iterator.hasNext()) {
>                         temp += "Available operations <ul>";
>                         for (; iterator.hasNext();) {
>                             AxisOperation axisOperation =
>         (AxisOperation) iterator.next();
>                             temp += "<li>" +
>         axisOperation.getName().getLocalPart() + "</li>";
>                         }
>                         temp += "</ul>";
>                     } else {
>                         temp += "No operations specified for this
>         service";
>                     }
>                     temp = "<html><head><title>Axis2:
>         Services</title></head>" + "<body>" + temp
>                             + "</body></html>";
>                 }
>                 catch (AxisFault axisFault) {
>                     temp = "<html><head><title>Service has a
>         fualt</title></head>" + "<body>"
>                             + "<hr><h2><font color=\"blue\">" +
>         axisFault.getMessage() +
>                             "</font></h2></body></html>";
>                 }
>                 return temp;
>             }
>         }
>
>         //since neither class is an interface we would need to
>         refactor our
>         public class
>         org.apache.axis2.transport.http.NewHTTPTransportReceiver
>         extends org.ksoap2.transport.HttpTransport
>         {
>         //all of the legacy HttptransportReceiver code
>         //add in overrides for attrs and methods from HttpTransport
>         }
>
>         //assuming we setup a simple client which implements
>         org.ksoap2.transport.HttpTransport
>         public class org.ksoap2.SoapEnvelope extends java.lang.Object{
>             public static final int VER10;
>             public static final int VER11;
>             public static final int VER12;
>             public static final java.lang.String ENV2001;
>             public static final java.lang.String ENC2001;
>             public static final java.lang.String ENV;
>             public static final java.lang.String ENC;
>             public static final java.lang.String XSD;
>             public static final java.lang.String XSI;
>             public static final java.lang.String XSD1999;
>             public static final java.lang.String XSI1999;
>             public java.lang.Object bodyIn;
>             public java.lang.Object bodyOut;
>             public org.kxml2.kdom.Element[] headerIn;
>             public org.kxml2.kdom.Element[] headerOut;
>             public java.lang.String encodingStyle;
>             public int version;
>             public java.lang.String env;
>             public java.lang.String enc;
>             public java.lang.String xsi;
>             public java.lang.String xsd;
>             public static boolean stringToBoolean(java.lang.String);
>             public org.ksoap2.SoapEnvelope(int);
>             public void parse(org.xmlpull.v1.XmlPullParser)      
>         throws java.io.IOExcep
>         tion, org.xmlpull.v1.XmlPullParserException;
>             public void
>         parseHeader(org.xmlpull.v1.XmlPullParser)       throws java.io.I
>         OException, org.xmlpull.v1.XmlPullParserException;
>             public void parseBody(org.xmlpull.v1.XmlPullParser)      
>         throws java.io.IOE
>         xception, org.xmlpull.v1.XmlPullParserException;
>             public void write(org.xmlpull.v1.XmlSerializer)      
>         throws java.io.IOExcep
>         tion;
>             public void
>         writeHeader(org.xmlpull.v1.XmlSerializer)       throws java.io.I
>         OException;
>             public void writeBody(org.xmlpull.v1.XmlSerializer)      
>         throws java.io.IOE
>         xception;
>             public void setOutputSoapObject(java.lang.Object);
>         }
>
>         vs our own javax.xml.soap.SOAPEnvelope
>         public interface SOAPEnvelope extends SOAPElement {
>             /**
>              * Creates a new <CODE>Name</CODE> object initialized with
>         the given local name, namespace
>              * prefix, and namespace URI.
>              * <p/>
>              * <P>This factory method creates <CODE>Name</CODE>
>         objects for use in the SOAP/XML document.
>              *
>              * @param localName a <CODE>String</CODE> giving the local
>         name
>              * @param prefix    a <CODE>String</CODE> giving the
>         prefix of the namespace
>              * @param uri       a <CODE>String</CODE> giving the URI
>         of the namespace
>              * @return a <CODE>Name</CODE> object initialized with the
>         given local name, namespace prefix,
>              *         and namespace URI
>              * @throws SOAPException if there is a SOAP error
>              */
>             public abstract Name createName(String localName,
>                                             String prefix,
>                                             String uri)
>                     throws SOAPException;
>             public abstract Name createName(String localName) throws
>         SOAPException;
>             public abstract SOAPHeader getHeader() throws SOAPException;
>             public abstract SOAPBody getBody() throws SOAPException;
>             public abstract SOAPHeader addHeader() throws SOAPException;
>             public abstract SOAPBody addBody() throws SOAPException;
>         }
>
>         //so you would need a new uber SOAPEnvelope class which
>         extends base class SoapEnvelope implements SOAPEnvelope
>
>         public class NewSOAPEnvelope extends org.ksoap2.SoapEnvelope
>         implements javax.xml.soap.SOAPEnvelope
>         newHttpTransportReceiver would reference the new uber
>         SOAPEnvelope class
>            public void call(java.lang.String, NewSoapEnvelope)      
>         throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
>
>         does this conform to your understanding?
>         Martin Gainty
>         ______________________________________________
>         Note de déni et de confidentialité
>         Ce message est confidentiel et peut être privilégié. Si vous
>         n'êtes pas le destinataire prévu, nous te demandons avec bonté
>         que pour satisfaire informez l'expéditeur. N'importe quelle
>         diffusion non autorisée ou la copie de ceci est interdite. Ce
>         message sert à l'information seulement et n'aura pas n'importe
>         quel effet légalement obligatoire. Étant donné que les email
>         peuvent facilement être sujets à la manipulation, nous ne
>         pouvons accepter aucune responsabilité pour le contenu fourni.
>
>
>
>
>         > Date: Fri, 15 Apr 2011 11:02:37 -0400
>         > From: demetris@ece.neu.edu <ma...@ece.neu.edu>
>         > To: dev@ws.apache.org <ma...@ws.apache.org>
>         > Subject: Woden on mobile devices
>         >
>         > Hi all,
>         >
>         > I think Woden can parse WSDL 2.0 that describe REST services
>         correct?
>         > Is there a mobile version of Woden for parsing such WSDL
>         documents on
>         > Android?
>         >
>         > Thanks
>         >
>         >
>         ---------------------------------------------------------------------
>         > To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
>         <ma...@ws.apache.org>
>         > For additional commands, e-mail: dev-help@ws.apache.org
>         <ma...@ws.apache.org>
>         >
>

Re: Woden on mobile devices

Posted by Demetris <de...@ece.neu.edu>.
Hi Martin,

yes exactly and that's the reason we switched over to REST services and 
particularly for
mobile devices. Even though ksoap2 on Android seems to be fairly 
efficient it's still a bit
heavier that the REST/HTTP mechanisms.

Regarding the publishing of the REST service, as you pointed out there's 
not a standard
method to publish them - some ideas I saw generate documents that 
describe the directory
hierarchy for the server side along with the URL specifications on how 
to reach the various
resources. I use Ajax for building clients for these services. But I can 
certainly work with you
on coming up with may be a more general architecture.

In any case, thanks for the feedback and I will let you know about this 
once I give it a bit
more thought. I appreciate the information and help Martin.

On 4/21/2011 11:30 AM, Martin Gainty wrote:
> not yet here is their doc
>
> Please note that SOAP introduces some significant overhead for web 
> services that may be problematic for mobile devices. If you have full 
> control over the client and the server, a REST based architecture may 
> be more adequate.
>
> maybe you can create a testcase and we can come up with an 
> architecture to
> 1)publish the REST service
> 2)create a Stub client which will consume the REST message
>
> did you have anything specific in mind?
>
> Martin
> ______________________________________________
> Do not alter or disrupt this transmission.
>
>
>
>
> ------------------------------------------------------------------------
> Date: Thu, 21 Apr 2011 10:00:15 -0400
> From: demetris@ece.neu.edu
> To: dev@ws.apache.org
> Subject: Re: Woden on mobile devices
>
>
> Hi Martin,
>
> apologies for re-posting this one - do you have an idea on whether the 
> segment you sent below
> can handle REST-annotated WSDL files?
>
> Thanks
>
> On 4/16/2011 10:54 AM, Demetris wrote:
>
>
>     Hi Martin,
>
>     isn't this parsing a SOAP WSDL file using the ksoap2 libs? Can it
>     handle documents that describe
>     REST as well? I guess it should but i am not sure. I will need to
>     look into a bit more carefully.
>
>     I appreciate the feedback
>
>     On 4/15/2011 12:12 PM, Martin Gainty wrote:
>
>         http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download
>         take a look at org.ksoap2.transport.HttpTransport
>
>         ksoap2\target\classes>javap .\org\ksoap2\transport\HttpTransport
>         public class org.ksoap2.transport.HttpTransport extends
>         org.ksoap2.transport.Transport{
>             org.ksoap2.transport.ServiceConnection connection;
>             java.io.OutputStream os;
>             java.io.InputStream is;
>             public org.ksoap2.transport.HttpTransport(java.lang.String);
>            public void call(java.lang.String,
>         org.ksoap2.SoapEnvelope)       throws java.io.IOException,
>         org.xmlpull.v1.XmlPullParserException;
>             public void reset();
>             protected org.ksoap2.transport.ServiceConnection
>         getServiceConnection()
>           throws java.io.IOException;
>         }
>
>         //vs the axis HttpTransportReceiver
>         public class
>         org.apache.axis2.transport.http.HTTPTransportReceiver {
>             public static Map getGetRequestParameters(String requestURI) {
>                 Map map = new HashMap();
>                 if (requestURI == null || "".equals(requestURI)) {
>                     return map;
>                 }
>                 char[]       chars = requestURI.toCharArray();
>                 final int NOT_BEGUN = 1500;
>                 final int INSIDE_NAME = 1501;
>                 final int INSIDE_VALUE = 1502;
>                 int state = NOT_BEGUN;
>                 StringBuffer name = new StringBuffer();
>                 StringBuffer value = new StringBuffer();
>
>                 for (int index = 0; index < chars.length; index++) {
>                     if (state == NOT_BEGUN) {
>                         if (chars[index] == '?') {
>                             state = INSIDE_NAME;
>                         }
>                     } else if (state == INSIDE_NAME) {
>                         if (chars[index] == '=') {
>                             state = INSIDE_VALUE;
>                         } else {
>                             name.append(chars[index]);
>                         }
>                     } else if (state == INSIDE_VALUE) {
>                         if (chars[index] == ',') {
>                             state = INSIDE_NAME;
>                             map.put(name.toString(), value.toString());
>                             name.delete(0, name.length());
>                             value.delete(0, value.length());
>                         } else {
>                             value.append(chars[index]);
>                         }
>                     }
>                 }
>                 if (name.length() + value.length() > 0) {
>                     map.put(name.toString(), value.toString());
>                 }
>                 return map;
>             }
>
>             public static String getServicesHTML(ConfigurationContext
>         configurationContext) {
>                 String temp = "";
>                 Map services =
>         configurationContext.getAxisConfiguration().getServices();
>                 Hashtable erroneousServices =
>                        
>         configurationContext.getAxisConfiguration().getFaultyServices();
>                 boolean status = false;
>                 if ((services != null) && !services.isEmpty()) {
>                     status = true;
>                     Collection serviceCollection = services.values();
>                     temp += "<h2>" + "Deployed services" + "</h2>";
>                     for (Iterator it = serviceCollection.iterator();
>         it.hasNext();) {
>
>                         AxisService axisService = (AxisService) it.next();
>
>                         Iterator iterator = axisService.getOperations();
>
>                         temp += "<h3><a href=\"" +
>         axisService.getName() + "?wsdl\">" +
>                                 axisService.getName() + "</a></h3>";
>
>                         if (iterator.hasNext()) {
>                             temp += "Available operations <ul>";
>
>                             for (; iterator.hasNext();) {
>                                 AxisOperation axisOperation =
>         (AxisOperation) iterator.next();
>
>                                 temp += "<li>" +
>         axisOperation.getName().getLocalPart() + "</li>";
>                             }
>
>                             temp += "</ul>";
>                         } else {
>                             temp += "No operations specified for this
>         service";
>                         }
>                     }
>                 }
>                 if ((erroneousServices != null) &&
>         !erroneousServices.isEmpty()) {
>                     temp += "<hr><h2><font color=\"blue\">Faulty
>         Services</font></h2>";
>                     status = true;
>
>                     Enumeration faultyservices = erroneousServices.keys();
>
>                     while (faultyservices.hasMoreElements()) {
>                         String faultyserviceName = (String)
>         faultyservices.nextElement();
>
>                         temp += "<h3><font color=\"blue\">" +
>         faultyserviceName + "</font></h3>";
>                     }
>                 }
>                 if (!status) {
>                     temp = "<h2>There are no services deployed</h2>";
>                 }
>                 temp = "<html><head><title>Axis2:
>         Services</title></head>" + "<body>" + temp
>                         + "</body></html>";
>
>                 return temp;
>             }
>             public static String printServiceHTML(String serviceName,
>                                                   ConfigurationContext
>         configurationContext) {
>                 String temp = "";
>                 try {
>                     AxisConfiguration axisConfig =
>         configurationContext.getAxisConfiguration();
>                     AxisService axisService =
>         axisConfig.getService(serviceName);
>                     Iterator iterator = axisService.getOperations();
>                     temp += "<h3>" + axisService.getName() + "</h3>";
>                     temp += "<a href=\"" + axisService.getName() +
>         "?wsdl\">wsdl</a> <br/> ";
>                     temp += "<i>Service Description :  " +
>         axisService.getServiceDescription() +
>                             "</i><br/><br/>";
>                     if (iterator.hasNext()) {
>                         temp += "Available operations <ul>";
>                         for (; iterator.hasNext();) {
>                             AxisOperation axisOperation =
>         (AxisOperation) iterator.next();
>                             temp += "<li>" +
>         axisOperation.getName().getLocalPart() + "</li>";
>                         }
>                         temp += "</ul>";
>                     } else {
>                         temp += "No operations specified for this
>         service";
>                     }
>                     temp = "<html><head><title>Axis2:
>         Services</title></head>" + "<body>" + temp
>                             + "</body></html>";
>                 }
>                 catch (AxisFault axisFault) {
>                     temp = "<html><head><title>Service has a
>         fualt</title></head>" + "<body>"
>                             + "<hr><h2><font color=\"blue\">" +
>         axisFault.getMessage() +
>                             "</font></h2></body></html>";
>                 }
>                 return temp;
>             }
>         }
>
>         //since neither class is an interface we would need to
>         refactor our
>         public class
>         org.apache.axis2.transport.http.NewHTTPTransportReceiver
>         extends org.ksoap2.transport.HttpTransport
>         {
>         //all of the legacy HttptransportReceiver code
>         //add in overrides for attrs and methods from HttpTransport
>         }
>
>         //assuming we setup a simple client which implements
>         org.ksoap2.transport.HttpTransport
>         public class org.ksoap2.SoapEnvelope extends java.lang.Object{
>             public static final int VER10;
>             public static final int VER11;
>             public static final int VER12;
>             public static final java.lang.String ENV2001;
>             public static final java.lang.String ENC2001;
>             public static final java.lang.String ENV;
>             public static final java.lang.String ENC;
>             public static final java.lang.String XSD;
>             public static final java.lang.String XSI;
>             public static final java.lang.String XSD1999;
>             public static final java.lang.String XSI1999;
>             public java.lang.Object bodyIn;
>             public java.lang.Object bodyOut;
>             public org.kxml2.kdom.Element[] headerIn;
>             public org.kxml2.kdom.Element[] headerOut;
>             public java.lang.String encodingStyle;
>             public int version;
>             public java.lang.String env;
>             public java.lang.String enc;
>             public java.lang.String xsi;
>             public java.lang.String xsd;
>             public static boolean stringToBoolean(java.lang.String);
>             public org.ksoap2.SoapEnvelope(int);
>             public void parse(org.xmlpull.v1.XmlPullParser)      
>         throws java.io.IOExcep
>         tion, org.xmlpull.v1.XmlPullParserException;
>             public void
>         parseHeader(org.xmlpull.v1.XmlPullParser)       throws java.io.I
>         OException, org.xmlpull.v1.XmlPullParserException;
>             public void parseBody(org.xmlpull.v1.XmlPullParser)      
>         throws java.io.IOE
>         xception, org.xmlpull.v1.XmlPullParserException;
>             public void write(org.xmlpull.v1.XmlSerializer)      
>         throws java.io.IOExcep
>         tion;
>             public void
>         writeHeader(org.xmlpull.v1.XmlSerializer)       throws java.io.I
>         OException;
>             public void writeBody(org.xmlpull.v1.XmlSerializer)      
>         throws java.io.IOE
>         xception;
>             public void setOutputSoapObject(java.lang.Object);
>         }
>
>         vs our own javax.xml.soap.SOAPEnvelope
>         public interface SOAPEnvelope extends SOAPElement {
>             /**
>              * Creates a new <CODE>Name</CODE> object initialized with
>         the given local name, namespace
>              * prefix, and namespace URI.
>              * <p/>
>              * <P>This factory method creates <CODE>Name</CODE>
>         objects for use in the SOAP/XML document.
>              *
>              * @param localName a <CODE>String</CODE> giving the local
>         name
>              * @param prefix    a <CODE>String</CODE> giving the
>         prefix of the namespace
>              * @param uri       a <CODE>String</CODE> giving the URI
>         of the namespace
>              * @return a <CODE>Name</CODE> object initialized with the
>         given local name, namespace prefix,
>              *         and namespace URI
>              * @throws SOAPException if there is a SOAP error
>              */
>             public abstract Name createName(String localName,
>                                             String prefix,
>                                             String uri)
>                     throws SOAPException;
>             public abstract Name createName(String localName) throws
>         SOAPException;
>             public abstract SOAPHeader getHeader() throws SOAPException;
>             public abstract SOAPBody getBody() throws SOAPException;
>             public abstract SOAPHeader addHeader() throws SOAPException;
>             public abstract SOAPBody addBody() throws SOAPException;
>         }
>
>         //so you would need a new uber SOAPEnvelope class which
>         extends base class SoapEnvelope implements SOAPEnvelope
>
>         public class NewSOAPEnvelope extends org.ksoap2.SoapEnvelope
>         implements javax.xml.soap.SOAPEnvelope
>         newHttpTransportReceiver would reference the new uber
>         SOAPEnvelope class
>            public void call(java.lang.String, NewSoapEnvelope)      
>         throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
>
>         does this conform to your understanding?
>         Martin Gainty
>         ______________________________________________
>         Note de déni et de confidentialité
>         Ce message est confidentiel et peut être privilégié. Si vous
>         n'êtes pas le destinataire prévu, nous te demandons avec bonté
>         que pour satisfaire informez l'expéditeur. N'importe quelle
>         diffusion non autorisée ou la copie de ceci est interdite. Ce
>         message sert à l'information seulement et n'aura pas n'importe
>         quel effet légalement obligatoire. Étant donné que les email
>         peuvent facilement être sujets à la manipulation, nous ne
>         pouvons accepter aucune responsabilité pour le contenu fourni.
>
>
>
>
>         > Date: Fri, 15 Apr 2011 11:02:37 -0400
>         > From: demetris@ece.neu.edu <ma...@ece.neu.edu>
>         > To: dev@ws.apache.org <ma...@ws.apache.org>
>         > Subject: Woden on mobile devices
>         >
>         > Hi all,
>         >
>         > I think Woden can parse WSDL 2.0 that describe REST services
>         correct?
>         > Is there a mobile version of Woden for parsing such WSDL
>         documents on
>         > Android?
>         >
>         > Thanks
>         >
>         >
>         ---------------------------------------------------------------------
>         > To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
>         <ma...@ws.apache.org>
>         > For additional commands, e-mail: dev-help@ws.apache.org
>         <ma...@ws.apache.org>
>         >
>

RE: Woden on mobile devices

Posted by Martin Gainty <mg...@hotmail.com>.
not yet here is their doc

Please note that SOAP introduces some significant overhead for
web
services that may be problematic for mobile devices. If you have full
control over the client and the server, a REST based architecture may
be more adequate.

maybe you can create a testcase and we can come up with an architecture to 
1)publish the REST service
2)create a Stub client which will consume the REST message

did you have anything specific in mind?

Martin  
______________________________________________ 
Do not alter or disrupt this transmission.




Date: Thu, 21 Apr 2011 10:00:15 -0400
From: demetris@ece.neu.edu
To: dev@ws.apache.org
Subject: Re: Woden on mobile devices



  


    
  
  
    

    Hi Martin,

    

    apologies for re-posting this one - do you have an idea on whether
    the segment you sent below

    can handle REST-annotated WSDL files? 

    

    Thanks

    

    On 4/16/2011 10:54 AM, Demetris wrote:
    
      
      

      Hi Martin,

      

      isn't this parsing a SOAP WSDL file using the ksoap2 libs? Can it
      handle documents that describe

      REST as well? I guess it should but i am not sure. I will need to
      look into a bit more carefully.

      

      I appreciate the feedback

      

      On 4/15/2011 12:12 PM, Martin Gainty wrote:
      
        
        http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download

        take a look at org.ksoap2.transport.HttpTransport

        

        ksoap2\target\classes>javap
        .\org\ksoap2\transport\HttpTransport

        public class org.ksoap2.transport.HttpTransport extends
        org.ksoap2.transport.Transport{

            org.ksoap2.transport.ServiceConnection connection;

            java.io.OutputStream os;

            java.io.InputStream is;

            public org.ksoap2.transport.HttpTransport(java.lang.String);

           public void call(java.lang.String,
        org.ksoap2.SoapEnvelope)       throws java.io.IOException,
        org.xmlpull.v1.XmlPullParserException;

            public void reset();

            protected org.ksoap2.transport.ServiceConnection
        getServiceConnection()

          throws java.io.IOException;

        }

        

        //vs the axis HttpTransportReceiver

        public class
        org.apache.axis2.transport.http.HTTPTransportReceiver {

            public static Map getGetRequestParameters(String requestURI)
        {

                Map map = new HashMap();

                if (requestURI == null || "".equals(requestURI)) {

                    return map;

                }

                char[]       chars = requestURI.toCharArray();

                final int NOT_BEGUN = 1500;

                final int INSIDE_NAME = 1501;

                final int INSIDE_VALUE = 1502;

                int state = NOT_BEGUN;

                StringBuffer name = new StringBuffer();

                StringBuffer value = new StringBuffer();

        

                for (int index = 0; index < chars.length; index++) {

                    if (state == NOT_BEGUN) {

                        if (chars[index] == '?') {

                            state = INSIDE_NAME;

                        }

                    } else if (state == INSIDE_NAME) {

                        if (chars[index] == '=') {

                            state = INSIDE_VALUE;

                        } else {

                            name.append(chars[index]);

                        }

                    } else if (state == INSIDE_VALUE) {

                        if (chars[index] == ',') {

                            state = INSIDE_NAME;

                            map.put(name.toString(), value.toString());

                            name.delete(0, name.length());

                            value.delete(0, value.length());

                        } else {

                            value.append(chars[index]);

                        }

                    }

                }

                if (name.length() + value.length() > 0) {

                    map.put(name.toString(), value.toString());

                }

                return map;

            }

        

            public static String getServicesHTML(ConfigurationContext
        configurationContext) {

                String temp = "";

                Map services =
        configurationContext.getAxisConfiguration().getServices();

                Hashtable erroneousServices =

                       
        configurationContext.getAxisConfiguration().getFaultyServices();

                boolean status = false;

                if ((services != null) && !services.isEmpty()) {

                    status = true;

                    Collection serviceCollection = services.values();

                    temp += "<h2>" + "Deployed services" +
        "</h2>";

                    for (Iterator it = serviceCollection.iterator();
        it.hasNext();) {

        

                        AxisService axisService = (AxisService)
        it.next();

        

                        Iterator iterator = axisService.getOperations();

        

                        temp += "<h3><a href=\"" +
        axisService.getName() + "?wsdl\">" +

                                axisService.getName() +
        "</a></h3>";

        

                        if (iterator.hasNext()) {

                            temp += "Available operations <ul>";

        

                            for (; iterator.hasNext();) {

                                AxisOperation axisOperation =
        (AxisOperation) iterator.next();

        

                                temp += "<li>" +
        axisOperation.getName().getLocalPart() + "</li>";

                            }

        

                            temp += "</ul>";

                        } else {

                            temp += "No operations specified for this
        service";

                        }

                    }

                }

                if ((erroneousServices != null) &&
        !erroneousServices.isEmpty()) {

                    temp += "<hr><h2><font
        color=\"blue\">Faulty Services</font></h2>";

                    status = true;

        

                    Enumeration faultyservices =
        erroneousServices.keys();

        

                    while (faultyservices.hasMoreElements()) {

                        String faultyserviceName = (String)
        faultyservices.nextElement();

        

                        temp += "<h3><font color=\"blue\">"
        + faultyserviceName + "</font></h3>";

                    }

                }

                if (!status) {

                    temp = "<h2>There are no services
        deployed</h2>";

                }

                temp = "<html><head><title>Axis2:
        Services</title></head>" + "<body>" + temp

                        + "</body></html>";

        

                return temp;

            }

            public static String printServiceHTML(String serviceName,

                                                  ConfigurationContext
        configurationContext) {

                String temp = "";

                try {

                    AxisConfiguration axisConfig =
        configurationContext.getAxisConfiguration();

                    AxisService axisService =
        axisConfig.getService(serviceName);

                    Iterator iterator = axisService.getOperations();

                    temp += "<h3>" + axisService.getName() +
        "</h3>";

                    temp += "<a href=\"" + axisService.getName() +
        "?wsdl\">wsdl</a> <br/> ";

                    temp += "<i>Service Description :  " +
        axisService.getServiceDescription() +

                            "</i><br/><br/>";

                    if (iterator.hasNext()) {

                        temp += "Available operations <ul>";

                        for (; iterator.hasNext();) {

                            AxisOperation axisOperation =
        (AxisOperation) iterator.next();

                            temp += "<li>" +
        axisOperation.getName().getLocalPart() + "</li>";

                        }

                        temp += "</ul>";

                    } else {

                        temp += "No operations specified for this
        service";

                    }

                    temp = "<html><head><title>Axis2:
        Services</title></head>" + "<body>" + temp

                            + "</body></html>";

                }

                catch (AxisFault axisFault) {

                    temp = "<html><head><title>Service
        has a fualt</title></head>" + "<body>"

                            + "<hr><h2><font
        color=\"blue\">" + axisFault.getMessage() +

                           
        "</font></h2></body></html>";

                }

                return temp;

            }

        }

        

        //since neither class is an interface we would need to refactor
        our 

        public class
        org.apache.axis2.transport.http.NewHTTPTransportReceiver extends
        org.ksoap2.transport.HttpTransport

        {

        //all of the legacy HttptransportReceiver code

        //add in overrides for attrs and methods from HttpTransport

        }

        

        //assuming we setup a simple client which implements
        org.ksoap2.transport.HttpTransport

        public class org.ksoap2.SoapEnvelope extends java.lang.Object{

            public static final int VER10;

            public static final int VER11;

            public static final int VER12;

            public static final java.lang.String ENV2001;

            public static final java.lang.String ENC2001;

            public static final java.lang.String ENV;

            public static final java.lang.String ENC;

            public static final java.lang.String XSD;

            public static final java.lang.String XSI;

            public static final java.lang.String XSD1999;

            public static final java.lang.String XSI1999;

            public java.lang.Object bodyIn;

            public java.lang.Object bodyOut;

            public org.kxml2.kdom.Element[] headerIn;

            public org.kxml2.kdom.Element[] headerOut;

            public java.lang.String encodingStyle;

            public int version;

            public java.lang.String env;

            public java.lang.String enc;

            public java.lang.String xsi;

            public java.lang.String xsd;

            public static boolean stringToBoolean(java.lang.String);

            public org.ksoap2.SoapEnvelope(int);

            public void parse(org.xmlpull.v1.XmlPullParser)       throws
        java.io.IOExcep

        tion, org.xmlpull.v1.XmlPullParserException;

            public void parseHeader(org.xmlpull.v1.XmlPullParser)      
        throws java.io.I

        OException, org.xmlpull.v1.XmlPullParserException;

            public void parseBody(org.xmlpull.v1.XmlPullParser)      
        throws java.io.IOE

        xception, org.xmlpull.v1.XmlPullParserException;

            public void write(org.xmlpull.v1.XmlSerializer)       throws
        java.io.IOExcep

        tion;

            public void writeHeader(org.xmlpull.v1.XmlSerializer)      
        throws java.io.I

        OException;

            public void writeBody(org.xmlpull.v1.XmlSerializer)      
        throws java.io.IOE

        xception;

            public void setOutputSoapObject(java.lang.Object);

        }

        

        vs our own javax.xml.soap.SOAPEnvelope

        public interface SOAPEnvelope extends SOAPElement {

            /**

             * Creates a new <CODE>Name</CODE> object
        initialized with the given local name, namespace

             * prefix, and namespace URI.

             * <p/>

             * <P>This factory method creates
        <CODE>Name</CODE> objects for use in the SOAP/XML
        document.

             *

             * @param localName a <CODE>String</CODE> giving
        the local name

             * @param prefix    a <CODE>String</CODE> giving
        the prefix of the namespace

             * @param uri       a <CODE>String</CODE> giving
        the URI of the namespace

             * @return a <CODE>Name</CODE> object
        initialized with the given local name, namespace prefix,

             *         and namespace URI

             * @throws SOAPException if there is a SOAP error

             */

            public abstract Name createName(String localName,

                                            String prefix,

                                            String uri)

                    throws SOAPException;

            public abstract Name createName(String localName) throws
        SOAPException;

            public abstract SOAPHeader getHeader() throws SOAPException;

            public abstract SOAPBody getBody() throws SOAPException;

            public abstract SOAPHeader addHeader() throws SOAPException;

            public abstract SOAPBody addBody() throws SOAPException;

        }

        

        //so you would need a new uber SOAPEnvelope class which extends
        base class SoapEnvelope implements SOAPEnvelope

        

        public class NewSOAPEnvelope extends org.ksoap2.SoapEnvelope
        implements javax.xml.soap.SOAPEnvelope 

        newHttpTransportReceiver would reference the new uber
        SOAPEnvelope class

           public void call(java.lang.String, NewSoapEnvelope)      
        throws java.io.IOException,
        org.xmlpull.v1.XmlPullParserException;

        

        does this conform to your understanding?

        Martin Gainty 

        ______________________________________________ 

        Note de déni et de confidentialité

         
        Ce message est confidentiel et peut être privilégié. Si vous
        n'êtes pas le destinataire prévu, nous te demandons avec bonté
        que pour satisfaire informez l'expéditeur. N'importe quelle
        diffusion non autorisée ou la copie de ceci est interdite. Ce
        message sert à l'information seulement et n'aura pas n'importe
        quel effet légalement obligatoire. Étant donné que les email
        peuvent facilement être sujets à la manipulation, nous ne
        pouvons accepter aucune responsabilité pour le contenu fourni.

        

        

        

        

        > Date: Fri, 15 Apr 2011 11:02:37 -0400

        > From: demetris@ece.neu.edu

        > To: dev@ws.apache.org

        > Subject: Woden on mobile devices

        > 

        > Hi all,

        > 

        > I think Woden can parse WSDL 2.0 that describe REST
        services correct?

        > Is there a mobile version of Woden for parsing such WSDL
        documents on

        > Android?

        > 

        > Thanks

        > 

        >
        ---------------------------------------------------------------------

        > To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org

        > For additional commands, e-mail: dev-help@ws.apache.org

        > 

      
     		 	   		  

Re: Woden on mobile devices

Posted by Demetris <de...@ece.neu.edu>.
Hi Martin,

apologies for re-posting this one - do you have an idea on whether the 
segment you sent below
can handle REST-annotated WSDL files?

Thanks

On 4/16/2011 10:54 AM, Demetris wrote:
>
> Hi Martin,
>
> isn't this parsing a SOAP WSDL file using the ksoap2 libs? Can it 
> handle documents that describe
> REST as well? I guess it should but i am not sure. I will need to look 
> into a bit more carefully.
>
> I appreciate the feedback
>
> On 4/15/2011 12:12 PM, Martin Gainty wrote:
>> http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download
>> take a look at org.ksoap2.transport.HttpTransport
>>
>> ksoap2\target\classes>javap .\org\ksoap2\transport\HttpTransport
>> public class org.ksoap2.transport.HttpTransport extends 
>> org.ksoap2.transport.Transport{
>>     org.ksoap2.transport.ServiceConnection connection;
>>     java.io.OutputStream os;
>>     java.io.InputStream is;
>>     public org.ksoap2.transport.HttpTransport(java.lang.String);
>>    public void call(java.lang.String, org.ksoap2.SoapEnvelope)       
>> throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
>>     public void reset();
>>     protected org.ksoap2.transport.ServiceConnection 
>> getServiceConnection()
>>   throws java.io.IOException;
>> }
>>
>> //vs the axis HttpTransportReceiver
>> public class org.apache.axis2.transport.http.HTTPTransportReceiver {
>>     public static Map getGetRequestParameters(String requestURI) {
>>         Map map = new HashMap();
>>         if (requestURI == null || "".equals(requestURI)) {
>>             return map;
>>         }
>>         char[]       chars = requestURI.toCharArray();
>>         final int NOT_BEGUN = 1500;
>>         final int INSIDE_NAME = 1501;
>>         final int INSIDE_VALUE = 1502;
>>         int state = NOT_BEGUN;
>>         StringBuffer name = new StringBuffer();
>>         StringBuffer value = new StringBuffer();
>>
>>         for (int index = 0; index < chars.length; index++) {
>>             if (state == NOT_BEGUN) {
>>                 if (chars[index] == '?') {
>>                     state = INSIDE_NAME;
>>                 }
>>             } else if (state == INSIDE_NAME) {
>>                 if (chars[index] == '=') {
>>                     state = INSIDE_VALUE;
>>                 } else {
>>                     name.append(chars[index]);
>>                 }
>>             } else if (state == INSIDE_VALUE) {
>>                 if (chars[index] == ',') {
>>                     state = INSIDE_NAME;
>>                     map.put(name.toString(), value.toString());
>>                     name.delete(0, name.length());
>>                     value.delete(0, value.length());
>>                 } else {
>>                     value.append(chars[index]);
>>                 }
>>             }
>>         }
>>         if (name.length() + value.length() > 0) {
>>             map.put(name.toString(), value.toString());
>>         }
>>         return map;
>>     }
>>
>>     public static String getServicesHTML(ConfigurationContext 
>> configurationContext) {
>>         String temp = "";
>>         Map services = 
>> configurationContext.getAxisConfiguration().getServices();
>>         Hashtable erroneousServices =
>>                 
>> configurationContext.getAxisConfiguration().getFaultyServices();
>>         boolean status = false;
>>         if ((services != null) && !services.isEmpty()) {
>>             status = true;
>>             Collection serviceCollection = services.values();
>>             temp += "<h2>" + "Deployed services" + "</h2>";
>>             for (Iterator it = serviceCollection.iterator(); 
>> it.hasNext();) {
>>
>>                 AxisService axisService = (AxisService) it.next();
>>
>>                 Iterator iterator = axisService.getOperations();
>>
>>                 temp += "<h3><a href=\"" + axisService.getName() + 
>> "?wsdl\">" +
>>                         axisService.getName() + "</a></h3>";
>>
>>                 if (iterator.hasNext()) {
>>                     temp += "Available operations <ul>";
>>
>>                     for (; iterator.hasNext();) {
>>                         AxisOperation axisOperation = (AxisOperation) 
>> iterator.next();
>>
>>                         temp += "<li>" + 
>> axisOperation.getName().getLocalPart() + "</li>";
>>                     }
>>
>>                     temp += "</ul>";
>>                 } else {
>>                     temp += "No operations specified for this service";
>>                 }
>>             }
>>         }
>>         if ((erroneousServices != null) && 
>> !erroneousServices.isEmpty()) {
>>             temp += "<hr><h2><font color=\"blue\">Faulty 
>> Services</font></h2>";
>>             status = true;
>>
>>             Enumeration faultyservices = erroneousServices.keys();
>>
>>             while (faultyservices.hasMoreElements()) {
>>                 String faultyserviceName = (String) 
>> faultyservices.nextElement();
>>
>>                 temp += "<h3><font color=\"blue\">" + 
>> faultyserviceName + "</font></h3>";
>>             }
>>         }
>>         if (!status) {
>>             temp = "<h2>There are no services deployed</h2>";
>>         }
>>         temp = "<html><head><title>Axis2: Services</title></head>" + 
>> "<body>" + temp
>>                 + "</body></html>";
>>
>>         return temp;
>>     }
>>     public static String printServiceHTML(String serviceName,
>>                                           ConfigurationContext 
>> configurationContext) {
>>         String temp = "";
>>         try {
>>             AxisConfiguration axisConfig = 
>> configurationContext.getAxisConfiguration();
>>             AxisService axisService = axisConfig.getService(serviceName);
>>             Iterator iterator = axisService.getOperations();
>>             temp += "<h3>" + axisService.getName() + "</h3>";
>>             temp += "<a href=\"" + axisService.getName() + 
>> "?wsdl\">wsdl</a> <br/> ";
>>             temp += "<i>Service Description :  " + 
>> axisService.getServiceDescription() +
>>                     "</i><br/><br/>";
>>             if (iterator.hasNext()) {
>>                 temp += "Available operations <ul>";
>>                 for (; iterator.hasNext();) {
>>                     AxisOperation axisOperation = (AxisOperation) 
>> iterator.next();
>>                     temp += "<li>" + 
>> axisOperation.getName().getLocalPart() + "</li>";
>>                 }
>>                 temp += "</ul>";
>>             } else {
>>                 temp += "No operations specified for this service";
>>             }
>>             temp = "<html><head><title>Axis2: 
>> Services</title></head>" + "<body>" + temp
>>                     + "</body></html>";
>>         }
>>         catch (AxisFault axisFault) {
>>             temp = "<html><head><title>Service has a 
>> fualt</title></head>" + "<body>"
>>                     + "<hr><h2><font color=\"blue\">" + 
>> axisFault.getMessage() +
>>                     "</font></h2></body></html>";
>>         }
>>         return temp;
>>     }
>> }
>>
>> //since neither class is an interface we would need to refactor our
>> public class org.apache.axis2.transport.http.NewHTTPTransportReceiver 
>> extends org.ksoap2.transport.HttpTransport
>> {
>> //all of the legacy HttptransportReceiver code
>> //add in overrides for attrs and methods from HttpTransport
>> }
>>
>> //assuming we setup a simple client which implements 
>> org.ksoap2.transport.HttpTransport
>> public class org.ksoap2.SoapEnvelope extends java.lang.Object{
>>     public static final int VER10;
>>     public static final int VER11;
>>     public static final int VER12;
>>     public static final java.lang.String ENV2001;
>>     public static final java.lang.String ENC2001;
>>     public static final java.lang.String ENV;
>>     public static final java.lang.String ENC;
>>     public static final java.lang.String XSD;
>>     public static final java.lang.String XSI;
>>     public static final java.lang.String XSD1999;
>>     public static final java.lang.String XSI1999;
>>     public java.lang.Object bodyIn;
>>     public java.lang.Object bodyOut;
>>     public org.kxml2.kdom.Element[] headerIn;
>>     public org.kxml2.kdom.Element[] headerOut;
>>     public java.lang.String encodingStyle;
>>     public int version;
>>     public java.lang.String env;
>>     public java.lang.String enc;
>>     public java.lang.String xsi;
>>     public java.lang.String xsd;
>>     public static boolean stringToBoolean(java.lang.String);
>>     public org.ksoap2.SoapEnvelope(int);
>>     public void parse(org.xmlpull.v1.XmlPullParser)       throws 
>> java.io.IOExcep
>> tion, org.xmlpull.v1.XmlPullParserException;
>>     public void parseHeader(org.xmlpull.v1.XmlPullParser)       
>> throws java.io.I
>> OException, org.xmlpull.v1.XmlPullParserException;
>>     public void parseBody(org.xmlpull.v1.XmlPullParser)       throws 
>> java.io.IOE
>> xception, org.xmlpull.v1.XmlPullParserException;
>>     public void write(org.xmlpull.v1.XmlSerializer)       throws 
>> java.io.IOExcep
>> tion;
>>     public void writeHeader(org.xmlpull.v1.XmlSerializer)       
>> throws java.io.I
>> OException;
>>     public void writeBody(org.xmlpull.v1.XmlSerializer)       throws 
>> java.io.IOE
>> xception;
>>     public void setOutputSoapObject(java.lang.Object);
>> }
>>
>> vs our own javax.xml.soap.SOAPEnvelope
>> public interface SOAPEnvelope extends SOAPElement {
>>     /**
>>      * Creates a new <CODE>Name</CODE> object initialized with the 
>> given local name, namespace
>>      * prefix, and namespace URI.
>>      * <p/>
>>      * <P>This factory method creates <CODE>Name</CODE> objects for 
>> use in the SOAP/XML document.
>>      *
>>      * @param localName a <CODE>String</CODE> giving the local name
>>      * @param prefix    a <CODE>String</CODE> giving the prefix of 
>> the namespace
>>      * @param uri       a <CODE>String</CODE> giving the URI of the 
>> namespace
>>      * @return a <CODE>Name</CODE> object initialized with the given 
>> local name, namespace prefix,
>>      *         and namespace URI
>>      * @throws SOAPException if there is a SOAP error
>>      */
>>     public abstract Name createName(String localName,
>>                                     String prefix,
>>                                     String uri)
>>             throws SOAPException;
>>     public abstract Name createName(String localName) throws 
>> SOAPException;
>>     public abstract SOAPHeader getHeader() throws SOAPException;
>>     public abstract SOAPBody getBody() throws SOAPException;
>>     public abstract SOAPHeader addHeader() throws SOAPException;
>>     public abstract SOAPBody addBody() throws SOAPException;
>> }
>>
>> //so you would need a new uber SOAPEnvelope class which extends base 
>> class SoapEnvelope implements SOAPEnvelope
>>
>> public class NewSOAPEnvelope extends org.ksoap2.SoapEnvelope 
>> implements javax.xml.soap.SOAPEnvelope
>> newHttpTransportReceiver would reference the new uber SOAPEnvelope class
>>    public void call(java.lang.String, NewSoapEnvelope)       throws 
>> java.io.IOException, org.xmlpull.v1.XmlPullParserException;
>>
>> does this conform to your understanding?
>> Martin Gainty
>> ______________________________________________
>> Note de déni et de confidentialité
>> Ce message est confidentiel et peut être privilégié. Si vous n'êtes 
>> pas le destinataire prévu, nous te demandons avec bonté que pour 
>> satisfaire informez l'expéditeur. N'importe quelle diffusion non 
>> autorisée ou la copie de ceci est interdite. Ce message sert à 
>> l'information seulement et n'aura pas n'importe quel effet légalement 
>> obligatoire. Étant donné que les email peuvent facilement être sujets 
>> à la manipulation, nous ne pouvons accepter aucune responsabilité 
>> pour le contenu fourni.
>>
>>
>>
>>
>> > Date: Fri, 15 Apr 2011 11:02:37 -0400
>> > From: demetris@ece.neu.edu
>> > To: dev@ws.apache.org
>> > Subject: Woden on mobile devices
>> >
>> > Hi all,
>> >
>> > I think Woden can parse WSDL 2.0 that describe REST services correct?
>> > Is there a mobile version of Woden for parsing such WSDL documents on
>> > Android?
>> >
>> > Thanks
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
>> > For additional commands, e-mail: dev-help@ws.apache.org
>> >

Re: Woden on mobile devices

Posted by Demetris <de...@ece.neu.edu>.
Hi Martin,

isn't this parsing a SOAP WSDL file using the ksoap2 libs? Can it handle 
documents that describe
REST as well? I guess it should but i am not sure. I will need to look 
into a bit more carefully.

I appreciate the feedback

On 4/15/2011 12:12 PM, Martin Gainty wrote:
> http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download
> take a look at org.ksoap2.transport.HttpTransport
>
> ksoap2\target\classes>javap .\org\ksoap2\transport\HttpTransport
> public class org.ksoap2.transport.HttpTransport extends 
> org.ksoap2.transport.Transport{
>     org.ksoap2.transport.ServiceConnection connection;
>     java.io.OutputStream os;
>     java.io.InputStream is;
>     public org.ksoap2.transport.HttpTransport(java.lang.String);
>    public void call(java.lang.String, org.ksoap2.SoapEnvelope)       
> throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
>     public void reset();
>     protected org.ksoap2.transport.ServiceConnection 
> getServiceConnection()
>   throws java.io.IOException;
> }
>
> //vs the axis HttpTransportReceiver
> public class org.apache.axis2.transport.http.HTTPTransportReceiver {
>     public static Map getGetRequestParameters(String requestURI) {
>         Map map = new HashMap();
>         if (requestURI == null || "".equals(requestURI)) {
>             return map;
>         }
>         char[]       chars = requestURI.toCharArray();
>         final int NOT_BEGUN = 1500;
>         final int INSIDE_NAME = 1501;
>         final int INSIDE_VALUE = 1502;
>         int state = NOT_BEGUN;
>         StringBuffer name = new StringBuffer();
>         StringBuffer value = new StringBuffer();
>
>         for (int index = 0; index < chars.length; index++) {
>             if (state == NOT_BEGUN) {
>                 if (chars[index] == '?') {
>                     state = INSIDE_NAME;
>                 }
>             } else if (state == INSIDE_NAME) {
>                 if (chars[index] == '=') {
>                     state = INSIDE_VALUE;
>                 } else {
>                     name.append(chars[index]);
>                 }
>             } else if (state == INSIDE_VALUE) {
>                 if (chars[index] == ',') {
>                     state = INSIDE_NAME;
>                     map.put(name.toString(), value.toString());
>                     name.delete(0, name.length());
>                     value.delete(0, value.length());
>                 } else {
>                     value.append(chars[index]);
>                 }
>             }
>         }
>         if (name.length() + value.length() > 0) {
>             map.put(name.toString(), value.toString());
>         }
>         return map;
>     }
>
>     public static String getServicesHTML(ConfigurationContext 
> configurationContext) {
>         String temp = "";
>         Map services = 
> configurationContext.getAxisConfiguration().getServices();
>         Hashtable erroneousServices =
>                 
> configurationContext.getAxisConfiguration().getFaultyServices();
>         boolean status = false;
>         if ((services != null) && !services.isEmpty()) {
>             status = true;
>             Collection serviceCollection = services.values();
>             temp += "<h2>" + "Deployed services" + "</h2>";
>             for (Iterator it = serviceCollection.iterator(); 
> it.hasNext();) {
>
>                 AxisService axisService = (AxisService) it.next();
>
>                 Iterator iterator = axisService.getOperations();
>
>                 temp += "<h3><a href=\"" + axisService.getName() + 
> "?wsdl\">" +
>                         axisService.getName() + "</a></h3>";
>
>                 if (iterator.hasNext()) {
>                     temp += "Available operations <ul>";
>
>                     for (; iterator.hasNext();) {
>                         AxisOperation axisOperation = (AxisOperation) 
> iterator.next();
>
>                         temp += "<li>" + 
> axisOperation.getName().getLocalPart() + "</li>";
>                     }
>
>                     temp += "</ul>";
>                 } else {
>                     temp += "No operations specified for this service";
>                 }
>             }
>         }
>         if ((erroneousServices != null) && !erroneousServices.isEmpty()) {
>             temp += "<hr><h2><font color=\"blue\">Faulty 
> Services</font></h2>";
>             status = true;
>
>             Enumeration faultyservices = erroneousServices.keys();
>
>             while (faultyservices.hasMoreElements()) {
>                 String faultyserviceName = (String) 
> faultyservices.nextElement();
>
>                 temp += "<h3><font color=\"blue\">" + 
> faultyserviceName + "</font></h3>";
>             }
>         }
>         if (!status) {
>             temp = "<h2>There are no services deployed</h2>";
>         }
>         temp = "<html><head><title>Axis2: Services</title></head>" + 
> "<body>" + temp
>                 + "</body></html>";
>
>         return temp;
>     }
>     public static String printServiceHTML(String serviceName,
>                                           ConfigurationContext 
> configurationContext) {
>         String temp = "";
>         try {
>             AxisConfiguration axisConfig = 
> configurationContext.getAxisConfiguration();
>             AxisService axisService = axisConfig.getService(serviceName);
>             Iterator iterator = axisService.getOperations();
>             temp += "<h3>" + axisService.getName() + "</h3>";
>             temp += "<a href=\"" + axisService.getName() + 
> "?wsdl\">wsdl</a> <br/> ";
>             temp += "<i>Service Description :  " + 
> axisService.getServiceDescription() +
>                     "</i><br/><br/>";
>             if (iterator.hasNext()) {
>                 temp += "Available operations <ul>";
>                 for (; iterator.hasNext();) {
>                     AxisOperation axisOperation = (AxisOperation) 
> iterator.next();
>                     temp += "<li>" + 
> axisOperation.getName().getLocalPart() + "</li>";
>                 }
>                 temp += "</ul>";
>             } else {
>                 temp += "No operations specified for this service";
>             }
>             temp = "<html><head><title>Axis2: Services</title></head>" 
> + "<body>" + temp
>                     + "</body></html>";
>         }
>         catch (AxisFault axisFault) {
>             temp = "<html><head><title>Service has a 
> fualt</title></head>" + "<body>"
>                     + "<hr><h2><font color=\"blue\">" + 
> axisFault.getMessage() +
>                     "</font></h2></body></html>";
>         }
>         return temp;
>     }
> }
>
> //since neither class is an interface we would need to refactor our
> public class org.apache.axis2.transport.http.NewHTTPTransportReceiver 
> extends org.ksoap2.transport.HttpTransport
> {
> //all of the legacy HttptransportReceiver code
> //add in overrides for attrs and methods from HttpTransport
> }
>
> //assuming we setup a simple client which implements 
> org.ksoap2.transport.HttpTransport
> public class org.ksoap2.SoapEnvelope extends java.lang.Object{
>     public static final int VER10;
>     public static final int VER11;
>     public static final int VER12;
>     public static final java.lang.String ENV2001;
>     public static final java.lang.String ENC2001;
>     public static final java.lang.String ENV;
>     public static final java.lang.String ENC;
>     public static final java.lang.String XSD;
>     public static final java.lang.String XSI;
>     public static final java.lang.String XSD1999;
>     public static final java.lang.String XSI1999;
>     public java.lang.Object bodyIn;
>     public java.lang.Object bodyOut;
>     public org.kxml2.kdom.Element[] headerIn;
>     public org.kxml2.kdom.Element[] headerOut;
>     public java.lang.String encodingStyle;
>     public int version;
>     public java.lang.String env;
>     public java.lang.String enc;
>     public java.lang.String xsi;
>     public java.lang.String xsd;
>     public static boolean stringToBoolean(java.lang.String);
>     public org.ksoap2.SoapEnvelope(int);
>     public void parse(org.xmlpull.v1.XmlPullParser)       throws 
> java.io.IOExcep
> tion, org.xmlpull.v1.XmlPullParserException;
>     public void parseHeader(org.xmlpull.v1.XmlPullParser)       throws 
> java.io.I
> OException, org.xmlpull.v1.XmlPullParserException;
>     public void parseBody(org.xmlpull.v1.XmlPullParser)       throws 
> java.io.IOE
> xception, org.xmlpull.v1.XmlPullParserException;
>     public void write(org.xmlpull.v1.XmlSerializer)       throws 
> java.io.IOExcep
> tion;
>     public void writeHeader(org.xmlpull.v1.XmlSerializer)       throws 
> java.io.I
> OException;
>     public void writeBody(org.xmlpull.v1.XmlSerializer)       throws 
> java.io.IOE
> xception;
>     public void setOutputSoapObject(java.lang.Object);
> }
>
> vs our own javax.xml.soap.SOAPEnvelope
> public interface SOAPEnvelope extends SOAPElement {
>     /**
>      * Creates a new <CODE>Name</CODE> object initialized with the 
> given local name, namespace
>      * prefix, and namespace URI.
>      * <p/>
>      * <P>This factory method creates <CODE>Name</CODE> objects for 
> use in the SOAP/XML document.
>      *
>      * @param localName a <CODE>String</CODE> giving the local name
>      * @param prefix    a <CODE>String</CODE> giving the prefix of the 
> namespace
>      * @param uri       a <CODE>String</CODE> giving the URI of the 
> namespace
>      * @return a <CODE>Name</CODE> object initialized with the given 
> local name, namespace prefix,
>      *         and namespace URI
>      * @throws SOAPException if there is a SOAP error
>      */
>     public abstract Name createName(String localName,
>                                     String prefix,
>                                     String uri)
>             throws SOAPException;
>     public abstract Name createName(String localName) throws 
> SOAPException;
>     public abstract SOAPHeader getHeader() throws SOAPException;
>     public abstract SOAPBody getBody() throws SOAPException;
>     public abstract SOAPHeader addHeader() throws SOAPException;
>     public abstract SOAPBody addBody() throws SOAPException;
> }
>
> //so you would need a new uber SOAPEnvelope class which extends base 
> class SoapEnvelope implements SOAPEnvelope
>
> public class NewSOAPEnvelope extends org.ksoap2.SoapEnvelope 
> implements javax.xml.soap.SOAPEnvelope
> newHttpTransportReceiver would reference the new uber SOAPEnvelope class
>    public void call(java.lang.String, NewSoapEnvelope)       throws 
> java.io.IOException, org.xmlpull.v1.XmlPullParserException;
>
> does this conform to your understanding?
> Martin Gainty
> ______________________________________________
> Note de déni et de confidentialité
> Ce message est confidentiel et peut être privilégié. Si vous n'êtes 
> pas le destinataire prévu, nous te demandons avec bonté que pour 
> satisfaire informez l'expéditeur. N'importe quelle diffusion non 
> autorisée ou la copie de ceci est interdite. Ce message sert à 
> l'information seulement et n'aura pas n'importe quel effet légalement 
> obligatoire. Étant donné que les email peuvent facilement être sujets 
> à la manipulation, nous ne pouvons accepter aucune responsabilité pour 
> le contenu fourni.
>
>
>
>
> > Date: Fri, 15 Apr 2011 11:02:37 -0400
> > From: demetris@ece.neu.edu
> > To: dev@ws.apache.org
> > Subject: Woden on mobile devices
> >
> > Hi all,
> >
> > I think Woden can parse WSDL 2.0 that describe REST services correct?
> > Is there a mobile version of Woden for parsing such WSDL documents on
> > Android?
> >
> > Thanks
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
> > For additional commands, e-mail: dev-help@ws.apache.org
> >

RE: Woden on mobile devices

Posted by Martin Gainty <mg...@hotmail.com>.
http://sourceforge.net/projects/ksoap2/files/ksoap2/2.1.2/ksoap2-j2me-core-2.1.2.jar/download
take a look at org.ksoap2.transport.HttpTransport

ksoap2\target\classes>javap .\org\ksoap2\transport\HttpTransport
public class org.ksoap2.transport.HttpTransport extends org.ksoap2.transport.Transport{
    org.ksoap2.transport.ServiceConnection connection;
    java.io.OutputStream os;
    java.io.InputStream is;
    public org.ksoap2.transport.HttpTransport(java.lang.String);
   public void call(java.lang.String, org.ksoap2.SoapEnvelope)       throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
    public void reset();
    protected org.ksoap2.transport.ServiceConnection getServiceConnection()
  throws java.io.IOException;
}

//vs the axis HttpTransportReceiver
public class org.apache.axis2.transport.http.HTTPTransportReceiver {
    public static Map getGetRequestParameters(String requestURI) {
        Map map = new HashMap();
        if (requestURI == null || "".equals(requestURI)) {
            return map;
        }
        char[]       chars = requestURI.toCharArray();
        final int NOT_BEGUN = 1500;
        final int INSIDE_NAME = 1501;
        final int INSIDE_VALUE = 1502;
        int state = NOT_BEGUN;
        StringBuffer name = new StringBuffer();
        StringBuffer value = new StringBuffer();

        for (int index = 0; index < chars.length; index++) {
            if (state == NOT_BEGUN) {
                if (chars[index] == '?') {
                    state = INSIDE_NAME;
                }
            } else if (state == INSIDE_NAME) {
                if (chars[index] == '=') {
                    state = INSIDE_VALUE;
                } else {
                    name.append(chars[index]);
                }
            } else if (state == INSIDE_VALUE) {
                if (chars[index] == ',') {
                    state = INSIDE_NAME;
                    map.put(name.toString(), value.toString());
                    name.delete(0, name.length());
                    value.delete(0, value.length());
                } else {
                    value.append(chars[index]);
                }
            }
        }
        if (name.length() + value.length() > 0) {
            map.put(name.toString(), value.toString());
        }
        return map;
    }

    public static String getServicesHTML(ConfigurationContext configurationContext) {
        String temp = "";
        Map services = configurationContext.getAxisConfiguration().getServices();
        Hashtable erroneousServices =
                configurationContext.getAxisConfiguration().getFaultyServices();
        boolean status = false;
        if ((services != null) && !services.isEmpty()) {
            status = true;
            Collection serviceCollection = services.values();
            temp += "<h2>" + "Deployed services" + "</h2>";
            for (Iterator it = serviceCollection.iterator(); it.hasNext();) {

                AxisService axisService = (AxisService) it.next();

                Iterator iterator = axisService.getOperations();

                temp += "<h3><a href=\"" + axisService.getName() + "?wsdl\">" +
                        axisService.getName() + "</a></h3>";

                if (iterator.hasNext()) {
                    temp += "Available operations <ul>";

                    for (; iterator.hasNext();) {
                        AxisOperation axisOperation = (AxisOperation) iterator.next();

                        temp += "<li>" + axisOperation.getName().getLocalPart() + "</li>";
                    }

                    temp += "</ul>";
                } else {
                    temp += "No operations specified for this service";
                }
            }
        }
        if ((erroneousServices != null) && !erroneousServices.isEmpty()) {
            temp += "<hr><h2><font color=\"blue\">Faulty Services</font></h2>";
            status = true;

            Enumeration faultyservices = erroneousServices.keys();

            while (faultyservices.hasMoreElements()) {
                String faultyserviceName = (String) faultyservices.nextElement();

                temp += "<h3><font color=\"blue\">" + faultyserviceName + "</font></h3>";
            }
        }
        if (!status) {
            temp = "<h2>There are no services deployed</h2>";
        }
        temp = "<html><head><title>Axis2: Services</title></head>" + "<body>" + temp
                + "</body></html>";

        return temp;
    }
    public static String printServiceHTML(String serviceName,
                                          ConfigurationContext configurationContext) {
        String temp = "";
        try {
            AxisConfiguration axisConfig = configurationContext.getAxisConfiguration();
            AxisService axisService = axisConfig.getService(serviceName);
            Iterator iterator = axisService.getOperations();
            temp += "<h3>" + axisService.getName() + "</h3>";
            temp += "<a href=\"" + axisService.getName() + "?wsdl\">wsdl</a> <br/> ";
            temp += "<i>Service Description :  " + axisService.getServiceDescription() +
                    "</i><br/><br/>";
            if (iterator.hasNext()) {
                temp += "Available operations <ul>";
                for (; iterator.hasNext();) {
                    AxisOperation axisOperation = (AxisOperation) iterator.next();
                    temp += "<li>" + axisOperation.getName().getLocalPart() + "</li>";
                }
                temp += "</ul>";
            } else {
                temp += "No operations specified for this service";
            }
            temp = "<html><head><title>Axis2: Services</title></head>" + "<body>" + temp
                    + "</body></html>";
        }
        catch (AxisFault axisFault) {
            temp = "<html><head><title>Service has a fualt</title></head>" + "<body>"
                    + "<hr><h2><font color=\"blue\">" + axisFault.getMessage() +
                    "</font></h2></body></html>";
        }
        return temp;
    }
}

//since neither class is an interface we would need to refactor our 
public class org.apache.axis2.transport.http.NewHTTPTransportReceiver extends org.ksoap2.transport.HttpTransport
{
//all of the legacy HttptransportReceiver code
//add in overrides for attrs and methods from HttpTransport
}

//assuming we setup a simple client which implements org.ksoap2.transport.HttpTransport
public class org.ksoap2.SoapEnvelope extends java.lang.Object{
    public static final int VER10;
    public static final int VER11;
    public static final int VER12;
    public static final java.lang.String ENV2001;
    public static final java.lang.String ENC2001;
    public static final java.lang.String ENV;
    public static final java.lang.String ENC;
    public static final java.lang.String XSD;
    public static final java.lang.String XSI;
    public static final java.lang.String XSD1999;
    public static final java.lang.String XSI1999;
    public java.lang.Object bodyIn;
    public java.lang.Object bodyOut;
    public org.kxml2.kdom.Element[] headerIn;
    public org.kxml2.kdom.Element[] headerOut;
    public java.lang.String encodingStyle;
    public int version;
    public java.lang.String env;
    public java.lang.String enc;
    public java.lang.String xsi;
    public java.lang.String xsd;
    public static boolean stringToBoolean(java.lang.String);
    public org.ksoap2.SoapEnvelope(int);
    public void parse(org.xmlpull.v1.XmlPullParser)       throws java.io.IOExcep
tion, org.xmlpull.v1.XmlPullParserException;
    public void parseHeader(org.xmlpull.v1.XmlPullParser)       throws java.io.I
OException, org.xmlpull.v1.XmlPullParserException;
    public void parseBody(org.xmlpull.v1.XmlPullParser)       throws java.io.IOE
xception, org.xmlpull.v1.XmlPullParserException;
    public void write(org.xmlpull.v1.XmlSerializer)       throws java.io.IOExcep
tion;
    public void writeHeader(org.xmlpull.v1.XmlSerializer)       throws java.io.I
OException;
    public void writeBody(org.xmlpull.v1.XmlSerializer)       throws java.io.IOE
xception;
    public void setOutputSoapObject(java.lang.Object);
}

vs our own javax.xml.soap.SOAPEnvelope
public interface SOAPEnvelope extends SOAPElement {
    /**
     * Creates a new <CODE>Name</CODE> object initialized with the given local name, namespace
     * prefix, and namespace URI.
     * <p/>
     * <P>This factory method creates <CODE>Name</CODE> objects for use in the SOAP/XML document.
     *
     * @param localName a <CODE>String</CODE> giving the local name
     * @param prefix    a <CODE>String</CODE> giving the prefix of the namespace
     * @param uri       a <CODE>String</CODE> giving the URI of the namespace
     * @return a <CODE>Name</CODE> object initialized with the given local name, namespace prefix,
     *         and namespace URI
     * @throws SOAPException if there is a SOAP error
     */
    public abstract Name createName(String localName,
                                    String prefix,
                                    String uri)
            throws SOAPException;
    public abstract Name createName(String localName) throws SOAPException;
    public abstract SOAPHeader getHeader() throws SOAPException;
    public abstract SOAPBody getBody() throws SOAPException;
    public abstract SOAPHeader addHeader() throws SOAPException;
    public abstract SOAPBody addBody() throws SOAPException;
}

//so you would need a new uber SOAPEnvelope class which extends base class SoapEnvelope implements SOAPEnvelope

public class NewSOAPEnvelope extends org.ksoap2.SoapEnvelope implements javax.xml.soap.SOAPEnvelope 
newHttpTransportReceiver would reference the new uber SOAPEnvelope class
   public void call(java.lang.String, NewSoapEnvelope)       
throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;

does this conform to your understanding?
Martin Gainty 
______________________________________________ 
Note de déni et de confidentialité
 Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.




> Date: Fri, 15 Apr 2011 11:02:37 -0400
> From: demetris@ece.neu.edu
> To: dev@ws.apache.org
> Subject: Woden on mobile devices
> 
> Hi all,
> 
> I think Woden can parse WSDL 2.0 that describe REST services correct?
> Is there a mobile version of Woden for parsing such WSDL documents on
> Android?
> 
> Thanks
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: dev-help@ws.apache.org
> 
 		 	   		  

Re: Woden on mobile devices

Posted by Demetris <de...@ece.neu.edu>.
Hi Lawrence,

not sure if I responded to this one but I appreciate the feedback. I 
know I was able to run
apps written on Java 1.5 on Android but most likely Woden, XML parsers 
etc. would need
to be imported into Android Java and DAlvik OS before it can be run and 
that may not be
an easy task. In any case, I will see what other options I have in this 
case.

Thanks

On 4/15/2011 11:20 AM, Lawrence Mandel wrote:
>
> Hi Demetris,
>
> I'm not aware of anyone attempting to run Woden on Android. Woden 
> requires an XML parser and Java 1.4 or higher [1].
>
> [1] http://ws.apache.org/woden/userguide.html#Download+and+Setup
>
> Lawrence
>
>
> From: 	Demetris <de...@ece.neu.edu>
> To: 	dev@ws.apache.org
> Date: 	04/15/2011 11:04 AM
> Subject: 	Woden on mobile devices
>
>
> ------------------------------------------------------------------------
>
>
>
> Hi all,
>
> I think Woden can parse WSDL 2.0 that describe REST services correct?
> Is there a mobile version of Woden for parsing such WSDL documents on
> Android?
>
> Thanks
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: dev-help@ws.apache.org
>
>
>

Re: Woden on mobile devices

Posted by Lawrence Mandel <lm...@ca.ibm.com>.
Hi Demetris,

I'm not aware of anyone attempting to run Woden on Android. Woden requires 
an XML parser and Java 1.4 or higher [1].

[1] http://ws.apache.org/woden/userguide.html#Download+and+Setup

Lawrence



From:
Demetris <de...@ece.neu.edu>
To:
dev@ws.apache.org
Date:
04/15/2011 11:04 AM
Subject:
Woden on mobile devices



Hi all,

I think Woden can parse WSDL 2.0 that describe REST services correct?
Is there a mobile version of Woden for parsing such WSDL documents on
Android?

Thanks

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
For additional commands, e-mail: dev-help@ws.apache.org