You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by li...@apache.org on 2003/07/28 13:23:57 UTC

cvs commit: xml-axis/c/src/server/catalina AxisCppContentHandler.h AxisCppContentHandler.java AxisCppServlet.java libAxiscpp.cpp libAxiscpp.dsp libAxiscpp.h

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 (lilantha@virtusa.com)
    *
  @@ -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