Casting jobjects
Hi,
i face a problem in casting jobject in JNI. From Java layer i receive a DataType of super class object. but in JNI layer i need to access the methods of subclass, for that i need to cast to subclass.
I tried to cast the jobject to my DataType. This class only have virtual Methods, so i cannot call those Methods. Then I tried to cast it to an implementation of DataType Class (my Subclasses). If I try to access the Methods of the Subclass I get a segFault.
Help!?
Thanks in advance
Okay you're right, my explanation was not exactly that what i mean. I try it again.
1. I have a cpp Framework. In this Framework there are some structure those look like:
class superclass{
virtual get/set method();
}then there is more then one subclass:
class subclass : public superclass{
//impelmentation of the methods
get/set methods
}2. Then I created a Java Wrapper using JNI. This still works. But I want to extend the Framework, with some Java Class. Therefore I want to registrate using the invocation API those Java Classes.
with the Invocation API i do:
1. Get the class id (base class)
2. Get the method id
3. Call the class.
4. the return type is an user defined Type and for every Subclass different.
3. And the Java Method i called looke like this:
public superclass get(){
superclass returnValue = new subclass();
//set some userdefined Value to the return Value
return superclass;
}I the Java Method is also everything okay.
The Problem is in part 2. I want to have the Data from the subclass which are accessable from Java, also accessable in cpp. So if I called the Java-Method which returns the superclass i get an jobject.
superclass *superCls = (superclass*)callMethod();
subclass *subCls = dynamic_cast<subclass*>(superCls);The last 2 lines ?? How can i realize that???
THanks
Edited by: port54 on Mar 1, 2008 2:52 AM
Similar Messages
-
I am very new to JNI, so please go easy...
I have a C function that uses parameter passing to return 3 values. The 3 parameters are of type long, short and char. The C function looks like:
myCFn(long id, short session, char response);I want to pass the Objects of the primitive java types corresponding to the C types, to make use of java's passing by reference for objects so that the 3 parameters are modified. The java signature looks like:
native myJavaFn(Long id, Short session, String response)Running javah on this results in the signature:
Java_Klass_myJavaFn(JNIEnv, jobject, jobject, jobject, jobject);My question is am i able to cast the parameters of type jobject to the respective C primitive types by doing the following:
const long cLongVar = (long) javaLongParam;
const short cShortVar = (short) javaShortParam;
const char *cCharVar = (*env)->GetStringUTFChars(env, (jstring)jObjectType, 0);Then call the c method with:
myCFn(cLongVar, cShortV, cCharVar);And have the 3 parameters values changed upon the function returning?
Thanks for any help, hope it makes sense
tobyMy question is am i able to cast the parameters of type jobject to the respective C primitive types
Nope. Java primitive types - byte, short, char, int, etc... correspond directly to C++ primitive types. Just take a look at the typedefs for jbyte, jshort, jchar, jint, etc... in the jni header files.
Every other JNI type - jobject, jclass, jstring, jarray, jthrowable, etc... is an opaque type, and you must use methods to operate on those types - http://java.sun.com/j2se/1.4.1/docs/guide/jni/spec/types.doc.html
Both the JNI specification and the JNI Programmer's Guide cover this information and are freely available from java.sun.com.
God bless,
-Toby Reyelts
Check out the free, open-source, JNI toolkit, Jace - http://jace.reyelts.com/jace -
I'm trying to take an API that's written in Java and calling it from C++ using JNI.
My question deals with inherited types. For instance, in Java, we can do the following:
List list = new List();
String in = "me";
list.add(string);
String out = (String) list.get(0);
out.toString(out.substring(1));
When I get the string out of list, the type is Object, which I cast to String, and then I can do whatever I want just like it was a String (since that's what I put in).
So in my C++ code, a List such as the one above is given to me as the return value of a Java method. In other words, I didn't add anything to the List, it just comes back as a jobject that already has some other objects in it. Then I run the equivalent of list.get(0) using CallObjectMethod, which returns another jobject, of which I know the type. However when I try to run a method on that element of the list, I get a Java coredump and a seg fault.
I think what's happening is that the "type" of the jobject that gets returned from list.get(0) is java.lang.Object and when I try to run any object specific method, like String.substring(), JNI doesn't recognize the jobject as one of type String so it dies on me. Does anyone know how to "cast" a jobject? Or am I just completely off in my assessment of what is causing the problem?Hi,
i face a problem in casting jobject in JNI. From Java layer i receive an array of super class objects. but in JNI layer i need to access the methods of subclass, for that i need to cast to subclass. in JNI there are methods like IsInstanceOf and IsAssignableFrom which can justify the validity of a casting, but there are no methods to cast as such. can some one help me sort it out.
Thanks in advance. -
Hello everyone,
I'm having myself a little problem. I hava a program in C++ which uses some Java classes through JNI. When i'm invoking a method on a class in Java i get back an object of some type A. But what i need in my C++ program is an object of type B so what i'm looking for is a mechanism to cast my jobject from type A to type B.
Someone knows how to do this?
Thanks in advance,
Bramyou might want to paste some source code examples in this case.
you're java objects with be of the base jobject type in JNI/C++ - so you shouldn't need to cast. What method are you using in JNI to invoke? -
these are few lines from my long STORED PROCEDURE actually i am new to oracle 11g please
declare
v_s nvarchar2(10);
p_RN nvarchar2(10);
begin
v_s := v_s || cast(p_RN as nvarchar2(10)); - ERROR IS COMING IN THIS LINE
end;
error
ORA-06550: line 5, column 39:
PLS-00103: Encountered the symbol "(" when expecting one of the following:
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
please somebody help meJust a little explanation about the error message.
ORA-06550: line 5, column 39:
PLS-00103: Encountered the symbol "(" when expecting one of the following:
Line 5 column 39 is the starting parenthesis of the "(10)". For using cast you can't add a lenght to the datatype.
If you change that, then you get a different error message:
declare
v_s nvarchar2(10);
p_RN varchar2(10);
begin
v_s := v_s || cast(p_RN as nvarchar2); -- ERROR IS COMING IN THIS LINE
end;
Fehler beim Start in Zeile 13 in Befehl:
declare
v_s nvarchar2(10);
p_RN varchar2(10);
begin
v_s := v_s || cast(p_RN as nvarchar2); -- ERROR IS COMING IN THIS LINE
end;
Fehlerbericht:
ORA-06550: line 5, column 22:
PLS-00382: expression is of wrong type
ORA-06550: line 5, column 3:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:ORA-06550: line 5, column 22:
PLS-00382: expression is of wrong type
This shows that you can't convert/cast a nvarchzar type into another nvarchar type.
It would work if you cast a number into a varchar2 type for example
declare
v_s nvarchar2(10);
p_RN number(10);
begin
v_s := v_s || cast(p_RN as nvarchar2); -- ERROR IS COMING IN THIS LINE
end;
anonymer Block abgeschlossen. -
Error in cast multiset in collections
DECLARE
TYPE emp_dept_rec IS RECORD (
v_sal emp.sal%TYPE,
v_name emp.ename%TYPE,
v_deptname dept.DEPTNAME%type
TYPE emp_dept_tab_type IS TABLE OF emp_dept_rec;
l_emp_dept_tab emp_dept_tab_type;
type emp_tab is table of emp%rowtype;
type l_emp_tab is table of emp%rowtype;
type dept_tab is table of dept%rowtype;
type l_dept_tab is table of dept%rowtype;
cursor e1 is
select * from emp;
cursor d1 is select * from dept;
begin
OPEN e1;
FETCH e1
BULK COLLECT INTO l_emp_tab;
open d1;
FETCH d1
BULK COLLECT INTO l_dept_tab;
select cast(multiset (select em.sal,em,ename ,dep.DEPTNAME
from table(l_emp_tab) em,table(l_dept_tab) dep
where em.deptno=dep.deptno)
as emp_dept_tab_type)
into l_emp_dept_tab ;
end;
it is giving error as
ORA-06550: line 43, column 25:
PL/SQL: ORA-00923: FROM keyword not found where expected
ORA-06550: line 39, column 5:
PL/SQL: SQL Statement ignoredHere is an example.
SQL> CREATE OR REPLACE TYPE emp_rec IS OBJECT (
2 v_sal NUMBER(7,2),
3 v_name VARCHAR2(35),
4 v_empno NUMBER(4),
5 v_deptno NUMBER(2)
6 )
7 ;
8 /
Type created.
SQL> CREATE OR REPLACE TYPE emp_tab IS TABLE OF emp_rec;
2 /
Type created.
SQL> CREATE OR REPLACE TYPE dept_rec IS OBJECT (
2 v_deptno NUMBER,
3 v_dname VARCHAR2(50)
4 )
5 ;
6 /
Type created.
SQL> CREATE OR REPLACE TYPE dept_tab IS TABLE OF dept_rec;
2 /
Type created.
SQL> CREATE OR REPLACE TYPE emp_dept_rec IS
2 OBJECT (
3 v_sal NUMBER,
4 v_name VARCHAR2(35),
5 v_deptname VARCHAR2(30)
6 );
7 /
Type created.
SQL> CREATE OR REPLACE TYPE emp_dept_tab_type IS TABLE OF emp_dept_rec;
2 /
Type created.
SQL> set serverout on
SQL> DECLARE
2 l_emp_dept_tab emp_dept_tab_type; --emp_dept_tab_type declared in database
3 l_emp_tab emp_tab; --emp_tab declared in database
4 l_dept_tab dept_tab; --dept_tab declared in database
5
6 CURSOR e1 IS
7 SELECT emp_rec(sal, ename, empno, deptno) FROM emp; --Note the type casting here
8
9 CURSOR d1 IS
10 SELECT dept_rec(deptno, dname) FROM dept; --Note the type casting here
11 BEGIN
12 OPEN e1;
13
14 FETCH e1 BULK COLLECT
15 INTO l_emp_tab;
16
17 OPEN d1;
18
19 FETCH d1 BULK COLLECT
20 INTO l_dept_tab;
21
22 SELECT CAST(MULTISET (SELECT em.v_sal, em.v_name, dep.v_dname
23 FROM TABLE(l_emp_tab) em, TABLE(l_dept_tab) dep
24 WHERE em.v_deptno = dep.v_deptno) AS emp_dept_tab_type)
25 INTO l_emp_dept_tab
26 FROM DUAL;
27 FOR i IN 1 .. l_emp_dept_tab.COUNT LOOP
28 dbms_output.put_line(l_emp_dept_tab(i)
29 .v_sal || '--' || l_emp_dept_tab(i)
30 .v_name || '--' || l_emp_dept_tab(i).v_deptname);
31 END LOOP;
32
33 END;
34 /
1300--MILLER--ACCOUNTING
5000--KING--ACCOUNTING
2450--CLARK--ACCOUNTING
3000--FORD--RESEARCH
1100--ADAMS--RESEARCH
3000--SCOTT--RESEARCH
2975--JONES--RESEARCH
800--SMITH--RESEARCH
950--JAMES--SALES
1500--TURNER--SALES
2850--BLAKE--SALES
1250--MARTIN--SALES
1250--WARD--SALES
1600--ALLEN--SALES
PL/SQL procedure successfully completed.It is just for educational purpose, because the thing you have achieved by so much programming can be done easily by simple join in the table itself.
user10447332 Newbie
Handle: user10447332
Status Level: Newbie
Registered: Oct 20, 2008
Total Posts: 227
Total Questions: 153 (152 unresolved) >
What a record! and most of the time you don't care to follow/revisit the thread also!. -
Hi, I test the follow Jguru tutorial code for getting atacchements
Multipart multipart = (Multipart)message.getContent();
for (int i=0, n=multipart.getCount(); i<n; i++) {
Part part = multipart.getBodyPart(i));
String disposition = part.getDisposition();
if ((disposition != null) &&
((disposition.equals(Part.ATTACHMENT) ||
(disposition.equals(Part.INLINE))) {
saveFile(part.getFileName(), part.getInputStream());
But i have a problem of cast in this line
Multipart mp = (Multipart)message.getContent();
the error of CastClass is:
java.lang.String cannot be cast to javax.mail.Multipart
why????? Please help me
ThanksMost likely you don't have a multipart message. See the msgshow.java
demo program that comes with JavaMail. -
Could not type cast in java embedding
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
org.xml.sax.InputSource in = (org.xml.sax.InputSource) getVariableData("Invoke_1_getRoutingAndFrameJumpers_OutputVariable","getRoutingAndFrameJumpersResponse");
Document doc = db.parse(in);
In the above code I am trying to type cast the variable getRoutingAndFrameJumpersResponse into org.xml.sax.InputSource so that i can parse.
I am not getting any error during compilation
but I am unable to type cast some run time error is coming in the line were I am type casting but I am not able to see the runtime error.
How can I see the runtime error in java embedding, how to type cast a variable into xml so that I can parse it.Hi Arun,
Could you try using the bpelx:rename extension in an assign activity enables a BPEL process to rename an element through use of XSD type casting.
<bpel:assign>
<bpelx:rename elementTo="QName1"? typeCastTo="QName2"?>
<bpelx:target variable="ncname" part="ncname"? query="xpath_str" />
</bpelx:rename>
</bpel:assign>
Cheers
A -
Derive found flag in SQL with where clause using TABLE(CAST function
Dear All,
Stored procedure listEmployees
==========================
CREATE OR REPLACE TYPE STRING_ARRAY AS VARRAY(8000) OF VARCHAR2(15);
empIdList STRING_ARRAY
countriesList STRING_ARRAY
SELECT EMP_ID, EMP_COUNTRY, EMP_NAME, FOUND_FLAG_
FROM EMPLOYEE WHERE
EMP_ID IN
(SELECT * FROM TABLE(CAST(empIdList AS STRING_ARRAY))
AND EMP_COUNTRY IN
(SELECT * FROM TABLE(CAST(countriesList AS STRING_ARRAY))
=================
I have a stored procedure which lists the employees using above simple query.
Here I am using table CAST function to find the list of employees in one go
instead of looping through each and every employee
Everything fine until requirements forced me to get the FOUND_FLAG as well.
Now I wanted derive the FOUND_FLAG by using rownum, rowid, decode functions
but I was not successful
Can you please suggest if there is any intelligent way to say weather the
row is found for given parameters in the where clause?
If not I may have to loop through each set of empIdList, countriesList
and find the values individually just to set a flag. In this approach I can’t use
the TABLE CAST function which is efficient I suppose.
Note that query STRING_ARRAY is an VARRAY. It is very big in size and this procedure
suppose to handle large sets of data.
Thanks In advance
Regards
Charan
Edited by: kmcharan on 03-Dec-2009 09:55
Edited by: kmcharan on 03-Dec-2009 09:55If your query returns results, you have found them... so your "FOUND" flag might be a constant,...
-
Why the cast error generates only in Widening cast?
Hi Shyam,
WELCOME TO SDN!!!
Please check this link
http://abapprogramming.blogspot.com/2007/10/oops-abap-8.html
The widening cast in this case does not cause an error because the reference airplane actually points to an instance in the subclass lcl_cargo_airplane. The dynamic type is therefore u2018REF TO lcl_cargo_airplaneu2019.
Here the widening cast produces the MOVE_CAST_ERROR runtime error that can be caught with u201CCATCH ... ENDCATCHu201D, because the airplane reference does not point to an instance in the subclass lcl_cargo_airplane, but to a u201Cgeneral airplane objectu201D. Its dynamic type is therefore u2018REF TO lcl_airplaneu2019 and does not correspond to the reference type cargo_airplane.
The widening cast logically represents the opposite of the narrowing cast. The widening cast cannot be checked statically, only at runtime. The Cast Operator u201C?=u201D (or the equivalent u201CMOVE ... ?TO u2026u201D) must be used to make this visible.
With this kind of cast, a check is carried out at runtime to ensure that the current content of the source variable corresponds to the type requirements of the target variables. In this case therefore, it checks that the dynamic type of the source reference airplane is compatible with the static type of the target reference cargo_airplane. If it is, the assignment is carried out. Otherwise the catchable runtime error u201CMOVE_CAST_ERRORu201D occurs, and the original value of the target variable remains the same.
Best regards,
raam -
Can not cast from object to int
Hi All,
I have the following bunch of code
Session session;
session = getSessionFactory().openSession();
Query query;
int MaxPageId = 0;
List list;
try{
query = session.createQuery("select max(emp.id) from EmpBean emp");
list = query.list();
MaxPageId = (int) list.get(0);
return MaxPageId;
catch(Exception e){
System.out.println(e.getMessage());
return MaxPageId;
The query executed successfully but when i get the max id in a integer variable by the following statement
MaxPageId = (int) list.get(0);
I get the following error "can not cast from object to int"
Please suggest for the same.
-ThanksCast to an Integer, not an int, and let autoboxing turn the Integer into an int.
int maxPageId;
maxPageId = (Integer) list.get(0);You can't cast objects into primitives.
Autoboxing isn't casting.
And use Java naming conventions. Local variables start with a lower-case letter. -
How to cast a column of a derived column in a view to NULL
I have a derived column in my view and this column by default is picked up as not null.
I want to cast it to null how can i do it ?
Actual column
column1 varchar(3) not null
Expected column
column1 varchar(3) null
MudassarShridar I havent defined it but the derived column has been picked up as not null which is strange
CREATE VIEW test
AS
SELECT
CASE
WHEN COMPANY_SIZE IS NULL then 'a'
ELSE 'b'
END AS
column1 ----- added derived column identifier
,[Company_Size] AS [CompanySize]
FROM xyz
Mudassar -
Oracle Arrays and getVendorConnection API and Class Cast Exception
I 've gone through various threads relating to the topic of Oracle Arrays and the getVendorConnecton API call to avoid the class Cast Exception.. i ve used all these but am still facing the problem...
I would appreciate it if some one could resolve the following queries :
I am using Weblogic 8.1 SP5 with oracle 8i
1. I read that the need to use the getVendorConnection API to make pl/sql proc calls with oracle arrays from the WL Server wont be required to avoid classCastException...
I tried to use the connection from the WL connection pool ..but it didnot work....I used the getVendorConnection API ..which also doesnot seem to work..
I got the Heurisitc Hazard exception...I used the Oracle 9i driver ie ojdbc14.jar ...after this the exception is not coming but still the code doesnt seem to work...
the snippet of the code is pasted below :
~~~~~~~~~~~~~~~~~~~~~~~code is : ~~~~~~~~~~~~~~~~~~~
/*below :
logicalCon is the Connection from the WL connection pool
JDBCcon is the JDBC connection. */
<div> try </div>
<div>{ </div>
<div>
<b>vendorConn</b> = ((WLConnection)logicalCon).getVendorConnection();
</div>
<div>
//Calling the procedure
</div>
<div>
//java.util.Map childMap1 = JDBCcon.getTypeMap();
</div>
<div>
java.util.Map childMap1 = <b>vendorConn</b>.getTypeMap();
</div>
<div>
childMap1.put("SST_ROUTE_ENTRY", Class.forName("svm.stport.ejb.StaticRouteEntry"));
</div>
<div>
//JDBCcon.setTypeMap(childMap1);
<b>vendorConn</b>.setTypeMap(childMap1);
</div>
<div>
// Create an oracle.sql.ARRAY object to hold the values
</div>
<div>
/*oracle.sql.ArrayDescriptor arrayDesc1 = oracle.sql.ArrayDescriptor.createDescriptor("SST_ROUTE_ENTRY_ARR", JDBCcon); */
</div>
<div>
oracle.sql.ArrayDescriptor arrayDesc1 =
oracle.sql.ArrayDescriptor.createDescriptor("SST_ROUTE_ENTRY_ARR", <b>vendorConn</b>); // here if i use the JDBCcon it works perfectly.... <u>^%^%^%</u>
</div>
<div>
code to fill in the sst route entry array....
.....arrayValues1 */
</div>
<div>
/* oracle.sql.ARRAY array1 = new oracle.sql.ARRAY(arrayDesc1, JDBCcon, arrayValues1); */
</div>
<div>
oracle.sql.ARRAY array1 = new oracle.sql.ARRAY(arrayDesc1, <b>vendorConn</b>, arrayValues1);
</div>
<div>
callStatement = logicalCon.prepareCall( "? = call procName(?, ?, ?)");
</div>
<div>
/* ..code to set the ?s ie array1 */
</div>
<div>
callStatement.execute();
</div>
<div>
}catch(Exceptio e){
</div>
<div>
}</div>
<div>
finally </div>
</div>{</div>
<div>System.out.println(" I ve come to finally"); </div>
<div>}</div>
<div>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~code snippet ends here ~~~~~~~~~~~~~~``
</div>
I have observed that the control immediately comes to the finally block after the call to the createDescriptor line above with <u>^%^%^%</u> in the comment. If i use the JDBCCon in this line...it works perfectly fine.
Any pointers to where anything is getting wrong.
I have jst set the vendorCon to null in the end of the file and not closed it. Subsequently i have closed the logicalCon. This has been mentioned in some of the thread in this forum also.
Thanks,
-jwJatinder Wadhwa wrote:
I 've gone through various threads relating to the topic of Oracle Arrays and the getVendorConnecton API call to avoid the class Cast Exception.. i ve used all these but am still facing the problem...
I would appreciate it if some one could resolve the following queries :
I am using Weblogic 8.1 SP5 with oracle 8i
1. I read that the need to use the getVendorConnection API to make pl/sql proc calls with oracle arrays from the WL Server wont be required to avoid classCastException...
I tried to use the connection from the WL connection pool ..but it didnot work....I used the getVendorConnection API ..which also doesnot seem to work..
I got the Heurisitc Hazard exception...I used the Oracle 9i driver ie ojdbc14.jar ...after this the exception is not coming but still the code doesnt seem to work...
the snippet of the code is pasted below :
~~~~~~~~~~~~~~~~~~~~~~~code is : ~~~~~~~~~~~~~~~~~~~Hi. Show me the whole exception and stacktrace if you do:
try
vendorConn = ((WLConnection)logicalCon).getVendorConnection();
java.util.Map childMap1 = vendorConn.getTypeMap();
childMap1.put("SST_ROUTE_ENTRY" Class.forName("svm.stport.ejb.StaticRouteEntry"));
vendorConn.setTypeMap(childMap1);
oracle.sql.ArrayDescriptor arrayDesc1 =
oracle.sql.ArrayDescriptor.createDescriptor("SST_ROUTE_ENTRY_ARR",
vendorConn);
oracle.sql.ARRAY array1 = new oracle.sql.ARRAY(arrayDesc1, vendorConn, arrayValues1);
callStatement = logicalCon.prepareCall( "? = call procName(? ? ?)");
callStatement.execute();
}catch(Exception e){
e.printStackTrace();
finally
try{logicalCon.close();}catch(Exception ignore){}
System.out.println(" I ve come to finally");
/*below :
logicalCon is the Connection from the WL connection pool
JDBCcon is the JDBC connection. */
<div> try </div>
<div>{ </div>
<div>
<b>vendorConn</b> = ((WLConnection)logicalCon).getVendorConnection();
</div>
<div>
//Calling the procedure
</div>
<div>
//java.util.Map childMap1 = JDBCcon.getTypeMap();
</div>
<div>
java.util.Map childMap1 = <b>vendorConn</b>.getTypeMap();
</div>
<div>
childMap1.put("SST_ROUTE_ENTRY", Class.forName("svm.stport.ejb.StaticRouteEntry"));
</div>
<div>
//JDBCcon.setTypeMap(childMap1);
<b>vendorConn</b>.setTypeMap(childMap1);
</div>
<div>
// Create an oracle.sql.ARRAY object to hold the values
</div>
<div>
/*oracle.sql.ArrayDescriptor arrayDesc1 = oracle.sql.ArrayDescriptor.createDescriptor("SST_ROUTE_ENTRY_ARR", JDBCcon); */
</div>
<div>
oracle.sql.ArrayDescriptor arrayDesc1 =
oracle.sql.ArrayDescriptor.createDescriptor("SST_ROUTE_ENTRY_ARR", <b>vendorConn</b>); // here if i use the JDBCcon it works perfectly.... <u>^%^%^%</u>
</div>
<div>
code to fill in the sst route entry array....
.....arrayValues1 */
</div>
<div>
/* oracle.sql.ARRAY array1 = new oracle.sql.ARRAY(arrayDesc1, JDBCcon, arrayValues1); */
</div>
<div>
oracle.sql.ARRAY array1 = new oracle.sql.ARRAY(arrayDesc1, <b>vendorConn</b>, arrayValues1);
</div>
<div>
callStatement = logicalCon.prepareCall( "? = call procName(?, ?, ?)");
</div>
<div>
/* ..code to set the ?s ie array1 */
</div>
<div>
callStatement.execute();
</div>
<div>
}catch(Exceptio e){
</div>
<div>
}</div>
<div>
finally </div>
</div>{</div>
<div>System.out.println(" I ve come to finally"); </div>
<div>}</div>
<div>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~code snippet ends here ~~~~~~~~~~~~~~``
</div>
I have observed that the control immediately comes to the finally block after the call to the createDescriptor line above with <u>^%^%^%</u> in the comment. If i use the JDBCCon in this line...it works perfectly fine.
Any pointers to where anything is getting wrong.
I have jst set the vendorCon to null in the end of the file and not closed it. Subsequently i have closed the logicalCon. This has been mentioned in some of the thread in this forum also.
Thanks,
-jw -
Explicit cast needed to convert java.* to to oracle.*
Hello,
I am trying to compile and run the following JSP but keep getting the "Incompatible type for = Explicit cast needed ..." error. The JSP and oracle procedure code are as follows:
<%@ page language="java" import="java.sql.*" %>
<%@ page import="oracle.jdbc.driver.*" %>
<HTML>
<HEAD>
<TITLE>
SimpleQuery JSP
</TITLE>
</HEAD>
<BODY BGCOLOR=EOFFFO>
<TABLE BORDER=1 BGCOLOR="C0C0C0">
<TH BGCOLOR="white"> <I>Node ID</I> </TH>
<%
Connection con = null;
OracleCallableStatement cstmt= null;
ResultSet rs = null;
try {
String SYSTEM_DB_DRIVER =
"oracle.jdbc.driver.OracleDriver";
String SYSTEM_DB_URL =
"jdbc:oracle:thin:@myserver.com:1521:";
String SYSTEM_DB_FILE = "CONN_STRING";
String SYSTEM_DB_USER = "UNAME";
String SYSTEM_DB_PASSWORD = "PASSWD";
Class.forName(SYSTEM_DB_DRIVER);
con = DriverManager.getConnection(SYSTEM_DB_URL +
SYSTEM_DB_FILE, SYSTEM_DB_USER, SYSTEM_DB_PASSWORD);
cstmt = con.prepareCall("call eaicl_p_requirement.open_rule_dtl(?,?)");
cstmt.registerOutParameter(1, OracleTypes.CURSOR);
<<I think I have to pass the p_product_id_in here but not sure how>>
cstmt.execute();
rs = ((OracleCallableStatement)cstmt).getCursor(1);
while(rs.next())
{%>
<TR>
<TD ALIGN=CENTER> <%= rs.getString(1) %> </TD>
<TD ALIGN=CENTER> <%= rs.getInt(2) %> </TD>
</TR>
<%}
rs.close();
cstmt.close();
con.close();
catch(Exception e)
%>
</TABLE>
</BODY>
</HTML>
The Oracle PL/SQL package.procedure it is calling is:
PROCEDURE open_rules_dtl (
prc_rules_dtl_out OUT rc_fetch_rule_dtl,
p_product_id_in IN NUMBER )
IS
vrc_rules_dtl rc_fetch_rule_dtl;
BEGIN
OPEN vrc_rules_dtl FOR
SELECT
r.rule_id,
r.rule_name,
r.rule_objective,
r.rule_description,
r.clearance_requirement,
r.rule_type
FROM
eaicl_rule r
WHERE
r.is_old = 'N' AND
r.product_id = CHR( p_product_id_in )
ORDER BY
r.rule_name
prc_rules_dtl_out := vrc_rules_dtl;
END open_rules_dtl;
I keep getting the following error on the webserver:
[05/Dec/2001:16:56:02] info ( 632): JSP: JSP1x compiler threw exception
org.apache.jasper.JasperException: Unable to compile class for JSPC:\iPlanet\Server4\https-wacc\config\..\ClassCache\_jsps\_ss_test5_jsp.java:84: Incompatible type for =. Explicit cast needed to convert java.sql.CallableStatement to oracle.jdbc.driver.OracleCallableStatement.
cstmt = con.prepareCall("call eaicl_p_requirement.open_rule_dtl(?,?)");
^
I'm not sure how to fix it. I also need to pass the p_product_id parameter to the procedure.
Hope someone can point me in the right direction. Thanks.Here's how you do an explicit cast:cstmt = (OracleCallableStatement)con.prepareCall("call eaicl_p_requirement.open_rule_dtl(?,?)");
-
Class casting, creating an image and decompiling...
Hi, I've got a couple of questions:
1)
How can I fully decompile classes, so with the implementation of the methods? Is it always possible to fully decompile a class file? When is it and when not?
2)
I aks this questions before, but I still haven't got it working, so sorry, but I ask it again :) :
I want to create my own class, for example cMyClass which extends the java.awt.Image class, which has abstract methods. How do these methods(for example getGraphics etc) have to be implemented?
3)
I can't cast a Image to cMyClass... why not?
Someone told me he did the following:
Canvas c = new Canvas()
cMyClass oImage = (cMyClass) c.createImage (100, 100);
and that this worked... I tried to do this too, and it seemed to work, but it actually didn't!!
I found out that c.createImage returns a null reference!!! That's why Java was able to cast it to my own cMyClass (not a problem to cast a null to something else), but when I created a Image (by doing a lot of unnessacary difficult stuff), and then tried to cast this Image to cMyClass it throw a ClassCastException or something like that...
How can I cast the java.awt.Image class to my class anyway?
3)
Why can't you create a image like i've done above or even like below:
Canvas c = new Canvas()
Image oImage = c.createImage (100, 100);
Why does this return a null reference?
Isn't there a better way to create an image?
4)
The getWidth and getHeight need a I thought observer...? Why is this? I just want the width and height and don't have an observer or something like that. Is there a way around this?
I tried getWidth(null) but this returns -1
Please help! :)Hi, I've got a couple of questions:
1)
How can I fully decompile classes, so with the
implementation of the methods? Is it always possible
to fully decompile a class file? When is it and when
not?You can always get a dump of the bytecode with 'javap -c'. If you don't want to figure things out yourself, try searching google for a class file decompiler, possibly a de-obfuscator.
De-compilation is completely possible if the original author wanted that, by including debugging information. Depending on the degree of such information and the amount of code obfuscation, the decompiled code may lack variable names, line numbers, field and method names, class names, and even code structure. Names and line numbers are usually not re-creatable automatically, since the information is simply lost, but you can replace them with your own strings when analyzing an unknown class file (using the correct tools). Re-creating the original code structure may work in some cases, but to me the general case looks rather close to the halt problem (i.e. not solvable).
Use a de-obfuscator, hope you've got good luck, and analyze the bytecode manually if that doesn't work.
2)
I aks this questions before, but I still haven't got
it working, so sorry, but I ask it again :) :
I want to create my own class, for example cMyClass
which extends the java.awt.Image class, which has
abstract methods. How do these methods(for example
getGraphics etc) have to be implemented?I don't really understand the problem. 'abstract' means on the language level that your subclass must provide an implementation, i.e. a method body. What that method is expected to do is explained in the javadocs for Image. But in fact you're free to do anything. You could play a sound in the getWidth() method (replace with any method name if you want). Just consider the fact that a lot of code calls getWidth in the hope of getting the width of the image, not playing a sound. So much about the language level.
On a higher level, a subclass of Image should implement a certain way to describe an image. AFAIK this means that your code must know the size of the image and know how to produce the pixels of the image. I can't tell you in general how you must do this, because it depends on your special case. This boils down to the question, why do you want to write a subclass of 'Image'? What new way of describing and image have you come up with?
3)
I can't cast a Image to cMyClass... why not?Simple, and that's certainly not an ALT. Because that specific Image is not a cMyClass. It's probably a BufferedImage or similar that was produced by AWT.
Please read the specs carefully what casting is about.
Someone told me he did the following:
Canvas c = new Canvas()
cMyClass oImage = (cMyClass) c.createImage (100,
100);
and that this worked... I tried to do this too, and it
seemed to work, but it actually didn't!!
I found out that c.createImage returns a null
reference!!! That's why Java was able to cast it to my
own cMyClass (not a problem to cast a null to
something else), but when I created a Image (by doing
a lot of unnessacary difficult stuff), and then tried
to cast this Image to cMyClass it throw a
ClassCastException or something like that...
How can I cast the java.awt.Image class to my class
anyway?You can't, and if you understood casting then you'd understand that it wouldn't make sense.
3, 4(don't know)
Maybe stupid question, but for example the BufferedImage, is this
completly written in Java?
How is the link made between the OS+hardware and the Java code? I
mean, displaying images etc. is very platform dependend not?Look for JNI (Java Native Interface). It's a way to link native (e.g. C) code with Java code.
Maybe you are looking for
-
Mp2 files plays in iTunes, but does not transfer to my iPod
Hi, I have been recording digital radio programs using my Cyrus DAB 8.0. The recordings are on a SD card and are in mp2 format. These easily transfer into iTunes, but do not transfer to my iPod. How can I overcome this. I guess I have to convert the
-
No Audio in Compaq Presario CQ-40 421 in XP professional
There is no Audio, i cant play any song or in video sound doesnt come. When i play mp3 in windows media player , it shows no audio device installed When i start iTune, a message display - no audio can be played. I dont get volume controls, mixtures.
-
Shared photostream icloud usage
Hi guys (or girls ;-)), I love the shared photostream, now I can create an album and put some photo's in it and it automatically shows those albums on all my devices without the need to sync them through itunes. Besides that, I can also easily share
-
Apps that use microphone are accessing sound out channel inst
In both teamspeak and Ventrilo I can set my input channel to X-fi or default sound device and use direct sound or wave and I still transmit to other people the sound output channel thats going to my speakers, not the input channel from my mic. So whe
-
Hi All, I created a Oracle Message in one instance and downloaded the ldt file using fndload. when I try to create the same message in another instance using fndload there are special characters added to the message. since it is a french message I gu