mirror of
https://github.com/php/php-src.git
synced 2025-08-19 08:49:28 +02:00
Initial alpha-level of sapi/servlet. See README for details.
This commit is contained in:
parent
a76c133df1
commit
fd9265362c
20 changed files with 1046 additions and 37 deletions
|
@ -16,9 +16,10 @@ php_java.jar : reflect.java
|
|||
@test -e net || mkdir net
|
||||
@test -e net/php || mkdir net/php
|
||||
@cp reflect.java net/php
|
||||
@echo library=php4>net/php/reflect.properties
|
||||
javac net/php/reflect.java
|
||||
@test ! -f reflect.class || mv reflect.class net/php # bug in KJC javac
|
||||
zip -q0 php_java.jar net/php/*.class
|
||||
zip -q0 php_java.jar net/php/*.class net/php/*.properties
|
||||
@rm net/php/reflect.*
|
||||
@rmdir net/php
|
||||
@rmdir net
|
||||
|
|
|
@ -14,9 +14,11 @@ AC_ARG_WITH(java,
|
|||
if test -d /usr/local/lib/kaffe; then
|
||||
JAVA_CFLAGS="-DKAFFE"
|
||||
JAVA_INCLUDE=-I/usr/local/include/kaffe
|
||||
JAVA_CLASSPATH=/usr/local/share/kaffe/Klasses.jar
|
||||
elif test -d /usr/lib/kaffe; then
|
||||
JAVA_CFLAGS="-DKAFFE"
|
||||
JAVA_INCLUDE=-I/usr/include/kaffe
|
||||
JAVA_CLASSPATH=/usr/share/kaffe/Klasses.jar
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_ERROR(unable to find Java VM libraries)
|
||||
|
@ -26,6 +28,8 @@ AC_ARG_WITH(java,
|
|||
JAVA_INCLUDE="-I$withval/include"
|
||||
test -f $withval/lib/classes.zip && JAVA_CFLAGS="-DJNI_11"
|
||||
test -f $withval/lib/jvm.jar && JAVA_CFLAGS="-DJNI_12"
|
||||
test -f $withval/lib/classes.zip && JAVA_CLASSPATH="$withval/lib/classes.zip"
|
||||
test -f $withval/lib/jvm.jar && JAVA_CLASSPATH="$withval/lib/jvm.jar"
|
||||
for i in $JAVA_INCLUDE/*; do
|
||||
test -f $i/jni_md.h && JAVA_INCLUDE="$JAVA_INCLUDE $i"
|
||||
done
|
||||
|
@ -35,6 +39,8 @@ AC_ARG_WITH(java,
|
|||
test -f $i/jni_md.h && JAVA_INCLUDE="$JAVA_INCLUDE -I$i"
|
||||
test -f $i/classes.zip && JAVA_CFLAGS="-DJNI_11"
|
||||
test -f $i/jvm.jar && JAVA_CFLAGS="-DJNI_12"
|
||||
test -f $i/classes.zip && JAVA_CLASSPATH="$i/classes.zip"
|
||||
test -f $i/jvm.jar && JAVA_CLASSPATH="$i/jvm.jar"
|
||||
done
|
||||
if test -z "$JAVA_INCLUDE"; then
|
||||
AC_MSG_RESULT(no)
|
||||
|
@ -55,6 +61,7 @@ AC_ARG_WITH(java,
|
|||
])
|
||||
|
||||
AC_SUBST(JAVA_CFLAGS)
|
||||
AC_SUBST(JAVA_CLASSPATH)
|
||||
AC_SUBST(JAVA_INCLUDE)
|
||||
AC_SUBST(JAVA_SHARED)
|
||||
AC_SUBST(JAVA_LFLAGS)
|
||||
|
|
|
@ -255,8 +255,8 @@ static jobjectArray _java_makeArray(int argc, pval** argv) {
|
|||
arg=0;
|
||||
}
|
||||
(*jenv)->SetObjectArrayElement(jenv, result, i, arg);
|
||||
if (argv[i]->type != IS_OBJECT)
|
||||
(*jenv)->DeleteLocalRef(jenv, arg);
|
||||
if (argv[i]->type != IS_OBJECT)
|
||||
(*jenv)->DeleteLocalRef(jenv, arg);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -271,6 +271,7 @@ static int checkError(pval *value) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
/*
|
||||
|
@ -290,9 +291,9 @@ void java_call_function_handler
|
|||
pval **arguments = (pval **) emalloc(sizeof(pval *)*arg_count);
|
||||
getParametersArray(ht, arg_count, arguments);
|
||||
|
||||
if (iniUpdated && jvm) jvm_destroy();
|
||||
if (!jvm) jvm_create();
|
||||
if (!jvm) return;
|
||||
if (iniUpdated && jenv) jvm_destroy();
|
||||
if (!jenv) jvm_create();
|
||||
if (!jenv) return;
|
||||
|
||||
if (!strcmp("java",function_name->element.value.str.val)) {
|
||||
|
||||
|
@ -399,7 +400,7 @@ int java_set_property_handler
|
|||
/***************************************************************************/
|
||||
|
||||
static void _php3_java_destructor(void *jobject) {
|
||||
(*jenv)->DeleteGlobalRef(jenv, jobject);
|
||||
if (jenv) (*jenv)->DeleteGlobalRef(jenv, jobject);
|
||||
}
|
||||
|
||||
PHP_MINIT_FUNCTION(java) {
|
||||
|
@ -448,7 +449,7 @@ DLEXPORT zend_module_entry *get_module(void) { return &java_module_entry; }
|
|||
/***************************************************************************/
|
||||
|
||||
JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromString
|
||||
(JNIEnv *jenv, jobject self, jlong result, jstring value)
|
||||
(JNIEnv *jenv, jclass self, jlong result, jstring value)
|
||||
{
|
||||
const char *valueAsUTF = (*jenv)->GetStringUTFChars(jenv, value, 0);
|
||||
pval *presult = (pval*)(long)result;
|
||||
|
@ -460,7 +461,7 @@ JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromString
|
|||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromLong
|
||||
(JNIEnv *jenv, jobject self, jlong result, jlong value)
|
||||
(JNIEnv *jenv, jclass self, jlong result, jlong value)
|
||||
{
|
||||
pval *presult = (pval*)(long)result;
|
||||
presult->type=IS_LONG;
|
||||
|
@ -468,7 +469,7 @@ JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromLong
|
|||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromDouble
|
||||
(JNIEnv *jenv, jobject self, jlong result, jdouble value)
|
||||
(JNIEnv *jenv, jclass self, jlong result, jdouble value)
|
||||
{
|
||||
pval *presult = (pval*)(long)result;
|
||||
presult->type=IS_DOUBLE;
|
||||
|
@ -476,7 +477,7 @@ JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromDouble
|
|||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromBoolean
|
||||
(JNIEnv *jenv, jobject self, jlong result, jboolean value)
|
||||
(JNIEnv *jenv, jclass self, jlong result, jboolean value)
|
||||
{
|
||||
pval *presult = (pval*)(long)result;
|
||||
presult->type=IS_BOOL;
|
||||
|
@ -484,7 +485,7 @@ JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromBoolean
|
|||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromObject
|
||||
(JNIEnv *jenv, jobject self, jlong result, jobject value)
|
||||
(JNIEnv *jenv, jclass self, jlong result, jobject value)
|
||||
{
|
||||
/* wrapper the java object in a pval object */
|
||||
pval *presult = (pval*)(long)result;
|
||||
|
@ -510,9 +511,18 @@ JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromObject
|
|||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_net_php_reflect_setException
|
||||
(JNIEnv *jenv, jobject self, jlong result, jstring value)
|
||||
(JNIEnv *jenv, jclass self, jlong result, jstring value)
|
||||
{
|
||||
pval *presult = (pval*)(long)result;
|
||||
Java_net_php_reflect_setResultFromString(jenv, self, result, value);
|
||||
presult->type=IS_EXCEPTION;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_net_php_reflect_setEnv
|
||||
(JNIEnv *newJenv, jclass self)
|
||||
{
|
||||
iniUpdated=0;
|
||||
jenv=newJenv;
|
||||
if (!self) self = (*jenv)->FindClass(jenv, "net/php/reflect");
|
||||
php_reflect = (*jenv)->NewGlobalRef(jenv, self);
|
||||
}
|
||||
|
|
|
@ -177,8 +177,9 @@ InputPath=.\reflect.java
|
|||
if not exist net mkdir net
|
||||
if not exist net\php mkdir net\php
|
||||
copy $(InputPath) net\php > nul
|
||||
echo library=php_java>net\php\reflect.properties
|
||||
$(JAVA_HOME)\bin\javac net\php\reflect.java
|
||||
$(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class
|
||||
$(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
|
||||
erase net\php\reflect.*
|
||||
rmdir net\php
|
||||
rmdir net
|
||||
|
@ -196,8 +197,9 @@ InputPath=.\reflect.java
|
|||
if not exist net mkdir net
|
||||
if not exist net\php mkdir net\php
|
||||
copy $(InputPath) net\php > nul
|
||||
echo library=php_java>net\php\reflect.properties
|
||||
$(JAVA_HOME)\bin\javac -g net\php\reflect.java
|
||||
$(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class
|
||||
$(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
|
||||
erase net\php\reflect.*
|
||||
rmdir net\php
|
||||
rmdir net
|
||||
|
@ -215,8 +217,9 @@ InputPath=.\reflect.java
|
|||
if not exist net mkdir net
|
||||
if not exist net\php mkdir net\php
|
||||
copy $(InputPath) net\php > nul
|
||||
echo library=php_java>net\php\reflect.properties
|
||||
$(JAVA_HOME)\bin\javac -g net\php\reflect.java
|
||||
$(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class
|
||||
$(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
|
||||
erase net\php\reflect.*
|
||||
rmdir net\php
|
||||
rmdir net
|
||||
|
@ -234,8 +237,9 @@ InputPath=.\reflect.java
|
|||
if not exist net mkdir net
|
||||
if not exist net\php mkdir net\php
|
||||
copy $(InputPath) net\php > nul
|
||||
echo library=php_java>net\php\reflect.properties
|
||||
$(JAVA_HOME)\bin\javac net\php\reflect.java
|
||||
$(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class
|
||||
$(JAVA_HOME)\bin\jar c0f $(OutDir)\php_java.jar net\php\*.class net\php\*.properties
|
||||
erase net\php\reflect.*
|
||||
rmdir net\php
|
||||
rmdir net
|
||||
|
|
|
@ -19,11 +19,21 @@
|
|||
package net.php;
|
||||
|
||||
import java.lang.reflect.*;
|
||||
import java.util.ResourceBundle;
|
||||
import java.beans.*;
|
||||
|
||||
class reflect {
|
||||
|
||||
static { System.loadLibrary("php_java"); }
|
||||
static { loadLibrary("reflect"); }
|
||||
|
||||
protected static void loadLibrary(String property) {
|
||||
try {
|
||||
ResourceBundle bundle = ResourceBundle.getBundle("net.php."+property);
|
||||
System.loadLibrary(bundle.getString("library"));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Native methods
|
||||
|
@ -34,6 +44,7 @@ class reflect {
|
|||
private static native void setResultFromBoolean(long result, boolean value);
|
||||
private static native void setResultFromObject(long result, Object value);
|
||||
private static native void setException(long result, String value);
|
||||
public static native void setEnv();
|
||||
|
||||
//
|
||||
// Helper routines which encapsulate the native methods
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue