lilantha    2003/07/28 04:23:57

  Modified:    c/src/server/catalina AxisCppContentHandler.h
                        AxisCppContentHandler.java AxisCppServlet.java
                        libAxiscpp.cpp libAxiscpp.dsp libAxiscpp.h
  Log:
  update
  
  Revision  Changes    Path
  1.2       +9 -4      xml-axis/c/src/server/catalina/AxisCppContentHandler.h
  
  Index: AxisCppContentHandler.h
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/server/catalina/AxisCppContentHandler.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AxisCppContentHandler.h   8 Jul 2003 13:31:40 -0000       1.1
  +++ AxisCppContentHandler.h   28 Jul 2003 11:23:57 -0000      1.2
  @@ -7,13 +7,18 @@
   #ifdef __cplusplus
   extern "C" {
   #endif
  +/* Inaccessible static: DEBUG */
   /*
    * Class:     AxisCppContentHandler
  - * Method:    Delegate
  - * Signature: ([CILjava/util/Vector;I)V
  + * Method:    processContent
  + * Signature: (Ljava/lang/StringBuffer;ILjava/util/Vector;I)V
    */
  -JNIEXPORT void JNICALL Java_AxisCppContentHandler_Delegate
  -  (JNIEnv *, jclass, jcharArray, jint, jobject, jint);
  +JNIEXPORT void JNICALL Java_AxisCppContentHandler_processContent
  +  (JNIEnv *, jclass, jbyteArray, jint, jobject, jint);
  +
  +JNIEXPORT jint JNICALL Java_OnLoad ( JavaVM *jvm, void *reserved);
  +JNIEXPORT void JNICALL Java_OnUnload ( JavaVM *jvm, void *reserved);
  +
   
   #ifdef __cplusplus
   }
  
  
  
  1.3       +19 -9     xml-axis/c/src/server/catalina/AxisCppContentHandler.java
  
  Index: AxisCppContentHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/server/catalina/AxisCppContentHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AxisCppContentHandler.java        17 Jul 2003 13:11:19 -0000      1.2
  +++ AxisCppContentHandler.java        28 Jul 2003 11:23:57 -0000      1.3
  @@ -56,7 +56,7 @@
    */
   
   /*
  - * Axis C++ JNI delegator.
  + * Axis C++ JNI Content Handler.
    *
    * @author Lilantha Darshana ([EMAIL PROTECTED])
    *
  @@ -68,33 +68,43 @@
   
   public class AxisCppContentHandler
   {
  +     private static final boolean DEBUG = Boolean.getBoolean("debug");
        static {
           try {
                        System.loadLibrary("libAxiscpp");
            
  -            System.out.println("* Native library loaded");
  -        }
  -        catch (Throwable e) {
  +              if(DEBUG)
  +            System.out.println("* Native library 'libAxiscpp' loaded");
  +
  +        } catch (Throwable e) {
               e.printStackTrace();
           }
        }
   
  -     public static native void Delegate(char [] body, int bodySize, Vector headers, 
int headerCount);
  +     public static native void processContent(byte [] body, int bodySize, Vector 
headers, int headerCount);
   
        public static void main(String [] args)
        {
  -             String str = "Hello World";
  -             char [] pch = str.toCharArray();
  +             byte [] str = new String("Hello World").getBytes();
  +             
                Vector v = new Vector();
                v.add("Name1");
                v.add("Value1");
                v.add("Name2");
                v.add("Value2");
                try{
  -             System.in.read();
  +                     System.in.read();
  +             
  +                     AxisCppContentHandler.processContent(str, str.length, v, 2);
  +                     ByteArrayOutputStream out = new ByteArrayOutputStream();
  +                     out.write(str);
  +                     System.out.println(out.toString());
                }catch(IOException ex){
  +                     ex.printStackTrace();
                }
  -             AxisCppContentHandler.Delegate(pch, pch.length, v, 2);
  +             
  +             for(int i=0;i<v.size()/2;i++)
  +                     System.out.println(v.elementAt(i*2) + " : " + 
v.elementAt(i*2+1));
        }
   }
   
  
  
  
  1.2       +38 -19    xml-axis/c/src/server/catalina/AxisCppServlet.java
  
  Index: AxisCppServlet.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/server/catalina/AxisCppServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AxisCppServlet.java       8 Jul 2003 13:31:40 -0000       1.1
  +++ AxisCppServlet.java       28 Jul 2003 11:23:57 -0000      1.2
  @@ -77,29 +77,48 @@
           throws IOException, ServletException
       {
                int bodySize = request.getContentLength();
  -             char [] body = new char[bodySize+1];
  -             BufferedReader bodyReader = request.getReader();
  -             bodyReader.read(body, 0, bodySize); 
  -             body[bodySize] = '\0';
  -             
  -             //String contentType = request.getContentType();
  -             int headerCount = 0;
  -             Vector headers = new Vector();
  -             Enumeration names = request.getHeaderNames();
  -             while(names.hasMoreElements())
  +             PrintWriter pw = new PrintWriter(response.getWriter());
  +             response.setContentType("text/xml"); //change this according to the 
SOAP 1.2
  +                     
  +             if(0 != bodySize)
                {
  -                     headerCount++;
  -                     String headerName = (String) names.nextElement();
  -                     headers.addElement(headerName);//Add the name
  -                     headers.addElement(request.getHeader(headerName)); //add the 
value
  +                     byte [] bodyContent = new byte[bodySize+1];
  +                     ServletInputStream bodyReader = request.getInputStream();
  +                     try{
  +                             bodyReader.read(bodyContent, 0, bodySize); 
  +                     }
  +                     catch(IOException ex)
  +                     {
  +                             pw.write("<error>");
  +                             pw.write("bdy size: "+bodySize+" \nContent : 
"+ex.getMessage());
  +                             pw.write("</error>");
  +                             return;
  +                     }
  +                                             
  +                     //String contentType = request.getContentType();
  +                     int headerCount = 0;
  +                     Vector headers = new Vector();
  +                     Enumeration names = request.getHeaderNames();
  +                     while(names.hasMoreElements())
  +                     {
  +                             headerCount++;
  +                             String headerName = (String) names.nextElement();
  +                             headers.addElement(headerName);//Add the name
  +                             headers.addElement(request.getHeader(headerName)); 
//add the value
  +                     }
  +
  +                     if(bodySize > 0)
  +                             AxisCppContentHandler.processContent(bodyContent, 
bodyContent.length, 
  +                                                                                    
          headers, headerCount);
  +                     ByteArrayOutputStream out = new ByteArrayOutputStream();
  +                     out.write(bodyContent);
  +                     pw.write(out.toString());
                }
  -                     
  -             if(bodySize > 0)
  -                     AxisCppContentHandler.Delegate(body, bodySize, headers, 
headerCount);
                
                //setup the response
  -             response.setContentType("text/xml"); //change this according to the 
SOAP 1.2
  -             
  +             pw.write("<error>");
  +             pw.write("Error - body content empty");
  +             pw.write("</error>");
       }
        public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
  
  
  
  1.4       +119 -16   xml-axis/c/src/server/catalina/libAxiscpp.cpp
  
  Index: libAxiscpp.cpp
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/server/catalina/libAxiscpp.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- libAxiscpp.cpp    17 Jul 2003 13:22:08 -0000      1.3
  +++ libAxiscpp.cpp    28 Jul 2003 11:23:57 -0000      1.4
  @@ -65,34 +65,63 @@
   #include "libAxiscpp.h"
   #include "../../common/Packet.h"
   #include <new>
  +#include <exception>
   
  +#if defined (_DEBUG)
  +     #include <iostream>
  +     #define Trace(x)        std::cout << x << std::endl;
  +#else
  +     #define Trace(x)
  +#endif
   
   
  -JNIEXPORT void JNICALL Java_AxisCppContentHandler_Delegate
  -  (JNIEnv *p_Env, jclass, jcharArray p_jBody, jint p_nBodySize, jobject 
p_jvHeaders, 
  -  jint p_nHeaderCount)
  +
  +JNIEXPORT void JNICALL Java_AxisCppContentHandler_processContent
  +  (JNIEnv *p_Env, 
  +   jclass, 
  +   jbyteArray p_jBody, 
  +   jint p_nBodySize, 
  +   jobject p_jvHeaders, 
  +   jint p_nHeaderCount)
   {
        //TODO: populate soapstream with the headers & the body;
        // invoke to process the contents
  -     soapstream* str = new soapstream;
  -     str->trtype = APTHTTP;
  -     str->so.http.ip_soap = new char[p_nBodySize*sizeof(jchar)];
  -     p_Env->GetCharArrayRegion(p_jBody, 0, p_nBodySize, 
(jchar*)str->so.http.ip_soap);
  -     str->so.http.ip_soapcount = p_nBodySize;
  +     HTTP_PACKET* pHttpPkt = new HTTP_PACKET;
  +     pHttpPkt->pchContent = new char[p_nBodySize+1];
  +     
  +     p_Env->GetByteArrayRegion(p_jBody, 0, p_nBodySize, 
(jbyte*)pHttpPkt->pchContent);
  +
  +     Trace(pHttpPkt->pchContent);
  +     
  +     pHttpPkt->nContentLen = p_nBodySize;
        //set method name as a http header.
  -     str->so.http.ip_headers = new header[p_nHeaderCount*2];
  +     pHttpPkt->pHeaders    = new HTTP_HEADER[p_nHeaderCount];
   
        JNIVector jvHeader(p_Env, p_jvHeaders);
        for(int i=0;i < p_nHeaderCount; i++)
        {
  -             str->so.http.ip_headers[i].headername  = jvHeader[i];
  -             str->so.http.ip_headers[i].headervalue = jvHeader[i+1];
  +             pHttpPkt->pHeaders[i].name  = jvHeader[i*2];
  +             pHttpPkt->pHeaders[i].value = jvHeader[i*2+1];
  +             Trace(pHttpPkt->pHeaders[i].name );
  +             Trace(pHttpPkt->pHeaders[i].value);
        }
  -     str->so.http.ip_headercount = p_nHeaderCount;
  -
  +     pHttpPkt->nHeaderCount = p_nHeaderCount;
  +     pHttpPkt->enMethod = POST;
   
  -     delete [] str->so.http.ip_headers;
  -     delete str;
  +     jvHeader.clear();
  +     jvHeader.push_back("Name_p1"); // Name_p1
  +     jvHeader.push_back("Value_p1");
  +     jvHeader.push_back("Name_p2");
  +     jvHeader.push_back("Value_p2");
  +
  +     delete [] pHttpPkt->pchContent;
  +     p_jBody = p_Env->NewByteArray(strlen(pHttpPkt->pchContent)+1);
  +     p_Env->SetByteArrayRegion(p_jBody, 0, strlen(pHttpPkt->pchContent), 
  +                                                             
(jbyte*)pHttpPkt->pchContent);
  +
  +     delete [] pHttpPkt->pHeaders;
  +     delete [] pHttpPkt->pchContent;
  +     delete pHttpPkt;
   }
   
   
  @@ -106,11 +135,24 @@
                                         "java/lang/IllegalArgumentException",
                                         "p_jVector not a java.util.Vector object!");
   
  -     m_jmGet = p_Env->GetMethodID(clazz, "get", "(I)Ljava/lang/Object");
  +     m_jmGet = p_Env->GetMethodID(clazz, "get", "(I)Ljava/lang/Object;");
   
        JNI_ASSERT(m_jmGet != NULL,
                    "java/lang/NoSuchMethodError",
                    "method 'public Object get(int index)' not found!");
  +
  +     m_jmAdd = p_Env->GetMethodID(clazz, "addElement", "(Ljava/lang/Object;)V");
  +
  +     JNI_ASSERT(m_jmGet != NULL,
  +                 "java/lang/NoSuchMethodError",
  +                 "method 'public void addElement(Object obj)' not found!");
  +
  +     m_jmClear = p_Env->GetMethodID(clazz, "clear", "()V");
  +
  +     JNI_ASSERT(m_jmGet != NULL,
  +                 "java/lang/NoSuchMethodError",
  +                 "method 'public void clear()' not found!");
  +
   }
        ///Destructor
   JNIVector::~JNIVector()
  @@ -131,7 +173,68 @@
   
   void JNIVector::push_back(const char* str) 
   {
  +     m_pEnv->CallVoidMethod(m_jVector, m_jmAdd, m_pEnv->NewStringUTF(str));
  +     if (m_pEnv->ExceptionOccurred())
  +             throw std::bad_exception("can't push_back"); //need to set up a 
exception
  +}
  +
  +void JNIVector::clear()
  +{
  +     m_pEnv->CallVoidMethod(m_jVector, m_jmClear);
  +     if (m_pEnv->ExceptionOccurred())
  +             throw std::bad_exception("Can't clear the vector"); //need to set up a 
exception
  +}
  +
  +
  +/*
  +JNIString::JNIString(JNIEnv* p_Env, jstring p_jStr) throw(std::bad_alloc)
  +        : m_pEnv(p_Env), m_jStr(p_jStr)
  +{
  +    m_pch = (m_jStr == NULL)? NULL : m_pEnv->GetStringUTFChars(m_jStr, NULL);
  +    if (m_pEnv->ExceptionOccurred())
  +        throw std::bad_alloc();
  +}
  +
  +JNIString::~JNIString()
  +{
  +    if (m_pch != NULL)
  +        m_pEnv->ReleaseStringUTFChars(m_jStr, m_pch);
  +}
   
  +JNIString::operator const char* () const
  +{
  +    return m_pch;
  +}
  +
  +JNIString& JNIString::operator = (const char* p_pch)
  +{
  +     if (m_pch != NULL)
  +        m_pEnv->ReleaseStringUTFChars(m_jStr, m_pch);
  +
  +     m_pch = p_pch;
  +     m_pch = (m_jStr == NULL)? NULL : m_pEnv->GetStringUTFChars(m_jStr, NULL);
  +    if (m_pEnv->ExceptionOccurred())
  +        throw std::bad_alloc();
  +     return *this;
  +}
  +
  +jstring JNIString::getJNIString()
  +{
  +     return m_pEnv->NewStringUTF(m_pch);
  +}
  +*/
  +
  +
  +JNIEXPORT jint JNICALL
  +JNI_OnLoad( JavaVM *jvm, void *reserved )
  +{
  +    return JNI_VERSION_1_2;
  +}
  +
  +
  +JNIEXPORT void JNICALL
  +JNI_OnUnload( JavaVM *jvm, void *reserved )
  +{
   }
   
   
  
  
  
  1.4       +1 -1      xml-axis/c/src/server/catalina/libAxiscpp.dsp
  
  Index: libAxiscpp.dsp
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/server/catalina/libAxiscpp.dsp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- libAxiscpp.dsp    17 Jul 2003 13:16:23 -0000      1.3
  +++ libAxiscpp.dsp    28 Jul 2003 11:23:57 -0000      1.4
  @@ -63,7 +63,7 @@
   # PROP BASE Target_Dir ""
   # PROP Use_MFC 0
   # PROP Use_Debug_Libraries 1
  -# PROP Output_Dir "Debug"
  +# PROP Output_Dir ".\axiscpp\WEB-INF\classes"
   # PROP Intermediate_Dir "Debug"
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBAXISCPP_EXPORTS" /YX /FD /GZ /c
  
  
  
  1.3       +29 -0     xml-axis/c/src/server/catalina/libAxiscpp.h
  
  Index: libAxiscpp.h
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/server/catalina/libAxiscpp.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- libAxiscpp.h      17 Jul 2003 13:22:08 -0000      1.2
  +++ libAxiscpp.h      28 Jul 2003 11:23:57 -0000      1.3
  @@ -75,6 +75,9 @@
   #endif
   
   
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
   
   static void
   jni_throw(JNIEnv* env, const char* exception, const char* msg)
  @@ -90,6 +93,10 @@
   }
   
   
  +#ifdef __cplusplus
  +}
  +#endif
  +
   #define JNI_ASSERT(assert, name, msg) \
       do \
       { \
  @@ -114,14 +121,36 @@
   
       char* operator [] (int i) const;
        void push_back(const char* str);
  +     void clear();
   
   private:
   
       JNIEnv* m_pEnv;
       jobject m_jVector;
        jmethodID m_jmGet;
  +     jmethodID m_jmClear;
  +     jmethodID m_jmAdd;
   };
   
  +/*
  +
  +
  +class JNIString
  +{
  +public:
  +    JNIStringBuffer(JNIEnv* p_Env, jobject p_jStr);
  +    ~JNIStringBuffer();
  +
  +    operator const char* () const;
  +     JNIStringBuffer& operator = (const char* p_pch);
  +     jstring getJNIString();
   
  +private:
  +
  +    JNIEnv*          m_pEnv;
  +    jobject          m_jStr;
  +    const char* m_pch;
  +};
  +*/
   #endif //_AXIS_LIBAXISCPP_HPP
   
  
  
  

Reply via email to