Non anonymous class
I have a doubt in the following piece of code, Here JPanel class is getting two extra methods, how does this works and what do we call this kind of class in programming language terms. Where can i use it.
public class XYX {
// constructor goes here.....
public void displayXYZ(){
JPanel panel = new JPanel(){
public String getPanelID(){
return "SOMEID";
public void delete(){
// do delete operation .
// some more logic here
}TIA
Zoha
i got it....
I have one more doubt..
Consider this example.
public class XYX {
// constructor goes here.....
public JPanel displayXYZ(){
JPanel panel = new JPanel(){
public String getPanelID(){
return "SOMEID";
public void repaint(){
// repaint in my way operation .
// some more logic here
return panel;
}I have overwritten repaint() method of JPanel now if i issue a repaint() method it should repaint in the new way. IS that right.
The second doubt is, I create this panel and i am returning it in this method is that possible to do that, will i still have a reference to this new JPanel, what are the effects of doing so.
How to use reflection to access anonymous classes.
TIA
Zoha
Similar Messages
-
Anonymous classes and non-default constructors
I've got a class with only one constructor and that takes an argument. In another class, I want to have an anonymous class that extends this class with something like:
new MyClassWithoutDefaultConstructor(myConstuctorArg) {...}
However, I get a "The constructor MyClassWithoutDefaultConstructor() is undefined".
As a workaround I can create a local class (not anonymous) that extends MyClassWithoutDefaultConstructor and then includes a default constructor which passes my arg to the super constructor. But this is rather messy.
Am I missing something?The following works fine for me (prints 5):
public abstract class Test
private final int parameter;
public Test(int parameter)
this.parameter=parameter;
public int getParameter()
return parameter;
public abstract int getSomething();
public static void main(String[] args)
Test test=new Test(3)
public int getSomething()
return getParameter()+2;
System.out.println(test.getSomething());
}You say your anonymous class is in a different class to the one it extends - what is the access modifier on the constuctor you are calling in the base class? Is the constructor visible from the class containing the anonymous class? Can you post a concise example that produces the compiler error that you are getting? -
Server: JBoss EAP 6.2.0
Client: JDK 1.7.0_51 x64
JAX-WS: RI 2.2.8 ( via -Djava.endorsed.dirs )
I am getting a java.lang.NullPointerException when calling the operation on the WS endpoint from the client when using non-anonymous replyTo address.
I have simplified the scenario into a small test case that hopefully others can replicate. Since the exception is happening on the client instead of the server, I would think that the container used is irrelevant, but I have specified it nonetheless.
1) WebService:
package test.webservice;
import java.util.Random;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.soap.Addressing;
@WebService(targetNamespace="http://services.nowhere.org/")
@Addressing(required=true)
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class RandomTest {
@WebMethod
public long nextRandom(@WebParam boolean forceException) throws Exception {
if( forceException ) {
throw new Exception("Some exception");
Random rand = new Random();
return rand.nextLong();
2) Generated WSDL by JBossEAP 6.2.2:
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:tns="http://webservice.test/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="RandomTestService" targetNamespace="http://webservice.test/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://webservice.test/" elementFormDefault="unqualified" targetNamespace="http://webservice.test/" version="1.0">
<xs:element name="nextRandom" type="tns:nextRandom"/>
<xs:element name="nextRandomResponse" type="tns:nextRandomResponse"/>
<xs:complexType name="nextRandom">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="nextRandomResponse">
<xs:sequence>
<xs:element name="return" type="xs:long"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="nextRandom">
<wsdl:part element="tns:nextRandom" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="nextRandomResponse">
<wsdl:part element="tns:nextRandomResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="RandomTest">
<wsdl:operation name="nextRandom">
<wsdl:input message="tns:nextRandom" name="nextRandom" wsam:Action="http://webservice.test/RandomTest/nextRandomRequest" wsaw:Action="http://webservice.test/RandomTest/nextRandomRequest">
</wsdl:input>
<wsdl:output message="tns:nextRandomResponse" name="nextRandomResponse" wsam:Action="http://webservice.test/RandomTest/nextRandomResponse" wsaw:Action="http://webservice.test/RandomTest/nextRandomResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="RandomTestServiceSoapBinding" type="tns:RandomTest">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsaw:UsingAddressing wsdl:required="true"/>
<wsp:PolicyReference URI="#RandomTestServiceSoapBinding_WSAM_Addressing_Policy"/>
<wsdl:operation name="nextRandom">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="nextRandom">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="nextRandomResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="RandomTestService">
<wsdl:port binding="tns:RandomTestServiceSoapBinding" name="RandomTestPort">
<soap:address location="http://localhost:8080/servertest/RandomTest"/>
</wsdl:port>
</wsdl:service>
<wsp:Policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="RandomTestServiceSoapBinding_WSAM_Addressing_Policy"><wsam:Addressing><wsp:Policy/></wsam:Addressing></wsp:Policy>
</wsdl:definitions>
3) ant build.xml to generate the client code from WSDL
<?xml version="1.0" encoding="UTF-8"?>
<project default="build" basedir="..">
<property name="jaxws.classpath" location="C://jaxws-2.2.8/jaxws-ri/lib/*.jar"/>
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
<classpath path="${jaxws.classpath}"/>
</taskdef>
<target name="build" >
<!-- For these to work, the JAR files in tools/jaxws-ri must be included in Ant's classpath -->
<wsimport wsdl="http://localhost:8080/servertest/RandomTest?wsdl"
verbose="true"
sourcedestdir="src"
destdir="bin"
keep="true">
<xjcarg value="-enableIntrospection"/>
</wsimport>
</target>
</project>
4) Client code
4a) ClientTest.java - Actual client run from client
package test.wsclient;
import java.util.ArrayList;
import java.util.List;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Endpoint;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.soap.AddressingFeature;
import org.nowhere.services.RandomTest;
import org.nowhere.services.RandomTestService;
public class ClientTest {
public static void main(String args[]) throws Exception {
ClientTest app = new ClientTest();
app.testAddressing();
public void testAddressing() throws Exception {
String REPLY_TO_ADDRESS = "http://localhost:8082/servertest/RandomCallback";
String FAULT_TO_ADDRESS = "http://localhost:8082/servertest/RandomCallbackFault";
RandomTestService service = new RandomTestService();
RandomTest port = service.getRandomTestPort(new AddressingFeature());
BindingProvider provider = (BindingProvider) port;
// pass the replyTo address to the handler
provider.getRequestContext().put("ReplyTo", REPLY_TO_ADDRESS);
provider.getRequestContext().put("FaultTo", FAULT_TO_ADDRESS);
// Register handlers to set the ReplyTo and FaultTo on the SOAP request sent to the WS endpoint
List<Handler> handlerChain = new ArrayList<Handler>();
handlerChain.add(new ClientHandler());
provider.getBinding().setHandlerChain(handlerChain);
// Start endpoint to receive callbacks from WS
Endpoint endpoint = Endpoint.publish(REPLY_TO_ADDRESS, new CallbackSEI());
try {
port.nextRandom(false);
} catch( Exception ex ) {
ex.printStackTrace();
} finally {
Thread.sleep(10000);
endpoint.stop();
System.exit(0);
4b) ClientHandler.java - Used to set the wsa ReplyTo address and FaultTo address when sending SOAP request from client to server
package test.wsclient;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.MessageContext.Scope;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class ClientHandler implements SOAPHandler<SOAPMessageContext> {
public ClientHandler() {};
@Override
public Set<QName> getHeaders() {
return null;
@Override
public void close(MessageContext arg0) {
@Override
public boolean handleFault(SOAPMessageContext context) {
return true;
protected void setAnAddress(SOAPHeader header, String tagName, String address) {
NodeList nodeListReplyTo = header.getElementsByTagName(tagName);
NodeList nodeListAddress = nodeListReplyTo.item(0).getChildNodes();
for (int i = 0; i < nodeListAddress.getLength(); i++) {
Node node = nodeListAddress.item(i);
if ("Address".equals(node.getLocalName())) {
node.setTextContent(address);
break;
protected String getMessageID(SOAPHeader header) {
NodeList nodeListMessageId = header.getElementsByTagName("MessageID");
return nodeListMessageId.item(0).getTextContent();
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean isOutbound = (Boolean) context.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (isOutbound) {
try {
SOAPEnvelope envelope = context.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = envelope.getHeader();
/* extract the generated MessageID */
String messageID = getMessageID(header);
context.put("MessageID", messageID);
context.setScope("MessageID", Scope.APPLICATION);
/* change ReplyTo address */
setAnAddress(header, "ReplyTo", (String) context.get("ReplyTo"));
setAnAddress(header, "FaultTo", (String) context.get("FaultTo"));
} catch (Exception ex) {
throw new RuntimeException(ex);
return true;
4c) CallbackSEI.java - endpoint on the client for server to send the SOAP response back to the client
package test.wsclient;
import javax.annotation.Resource;
import javax.jws.Oneway;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Action;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.soap.Addressing;
@WebService
@Addressing
//@HandlerChain(file = "/handler-chain.xml")
public class CallbackSEI {
@Resource
private WebServiceContext context;
* If there is no namespace specified in the method below, then the CallbackSEI needs to be in the same package as the
* WS endpoint.
@Oneway
@Action(input="http://services.nowhere.org/RandomTest/nextRandomResponse")
@RequestWrapper(localName="nextRandomResponse", targetNamespace="http://services.nowhere.org/")
public void handleNotification(@WebParam(name="return")long random) {
System.out.println("Asynch response received");
System.out.println( random );
//System.out.println("This response relates to the message ID: "+ getMessageID());
In summary:
Server is listening on port 8080
Client will listen in port 8082 for the callback from the server for the SOAP response
Now when I run the client, I see that the proper behaviour as far as ws-addressing is concerned. That is:
client -- SOAP request ( on port 8080 ) --> server
client <-- HTTP 202 ( empty HTTP body ) --- server
client <-- SOAP response ( on port 8082 ) --- server
All well and good, except that I am getting a NullPointerException on the client side when I call the operation.
With debugging of the SOAP request and responses, I get the following output:
---[HTTP request - http://localhost:8080/servertest/RandomTest]---
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://services.nowhere.org/RandomTest/nextRandomRequest"
User-Agent: JAX-WS RI 2.2.8 svn-revision#13980
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><S:Header><To xmlns="http://www.w3.org/2005/08/addressing">http://localhost:8080/servertest/RandomTest</To><Action xmlns="http://www.w3.org/2005/08/addressing">http://services.nowhere.org/RandomTest/nextRandomRequest</Action><ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
<Address>http://localhost:8082/servertest/RandomCallback</Address>
</ReplyTo><FaultTo xmlns="http://www.w3.org/2005/08/addressing">
<Address>http://localhost:8082/servertest/RandomCallbackFault</Address>
</FaultTo><MessageID xmlns="http://www.w3.org/2005/08/addressing">uuid:bcd2f6ef-3034-49e8-b837-dbd6a772fb93</MessageID></S:Header><S:Body><ns2:nextRandom xmlns:ns2="http://services.nowhere.org/"><arg0>false</arg0></ns2:nextRandom></S:Body></S:Envelope>--------------------
---[HTTP response - http://localhost:8080/servertest/RandomTest - 202]---
null: HTTP/1.1 202 Accepted
Content-Length: 0
Content-Type: text/xml;charset=UTF-8
Date: Fri, 18 Jul 2014 08:34:36 GMT
Server: Apache-Coyote/1.1
java.lang.NullPointerException
at com.sun.proxy.$Proxy38.nextRandom(Unknown Source)
at test.wsclient.ClientTest.testAddressing(ClientTest.java:43)
at test.wsclient.ClientTest.main(ClientTest.java:18)
---[HTTP request]---
Cache-control: no-cache
Host: localhost:8082
Content-type: text/xml; charset=UTF-8
Content-length: 704
Connection: keep-alive
Pragma: no-cache
User-agent: Apache CXF 2.7.7.redhat-1
Accept: */*
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><Action xmlns="http://www.w3.org/2005/08/addressing">http://services.nowhere.org/RandomTest/nextRandomResponse</Action><MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:65d8d7fc-09e4-494a-a9c5-0a01faf4d7e6</MessageID><To xmlns="http://www.w3.org/2005/08/addressing">http://localhost:8082/servertest/RandomCallback</To><RelatesTo xmlns="http://www.w3.org/2005/08/addressing">uuid:bcd2f6ef-3034-49e8-b837-dbd6a772fb93</RelatesTo></soap:Header><soap:Body><ns2:nextRandomResponse xmlns:ns2="http://services.nowhere.org/"><return>2870062781194370669</return></ns2:nextRandomResponse></soap:Body></soap:Envelope>--------------------
Asynch response received
2870062781194370669
As you can see from the output above, the proxy is throwing an Exception when it receives the HTTP 202 response.
Any ideas ?I think I have found when I get this error and probably I have found a bug. I will appreciate if someone can confirm this.
In my BPEL project setup, my BPEL process's wsdl file imports another wsdl from different namespace. Here is sample snippet -
<wsdl:definitions targetNamespace="http://namespace/1">
<wsdl:import namespace="http://namespace/2" location="resources/another.wsdl"/>
<plnk:partnerLinkType....../>
</wsdl:definitions>
Please let me know. I checked the bundled samples with Oracle BPEL PM and did not find any similar case where process wsdl imports another wsdl.
Thank you.
Meghana -
Jax-ws ws-addressings non-anonymous replyto header asynchronous client
Hi All,
I have an asynchronous jax-ws client with addressingfeature enabled.
This will add the replyto header as anonymous and open a client listening port for the reply message when I execute the asynchronous method to the server.
The client is then waiting for asynchronous reply from the server.
Although I don't know the listening "replyto" address, I can see with netstat that it is listening to a random opened port (TCP).
How can I make the client send the non-anonymous random generated replyto header with the port so that the server can reply to?
Kind Regards,
TunoHi,
there is a bug in 11.1.1.3 which is fixed in 11.1.1.4. but I found a simple workaround.
I changed the web service annotation from the callback function for "@Adressing" from "true" to "false". e.g.
@WebService(targetNamespace="http://xmlns.oracle.com/SOAHelloApp/SOAHelloAsync/SOAHelloAsyncProcess", name="SOAHelloAsyncProcessCallback")
@XmlSeeAlso(
{ ObjectFactory.class })
@SOAPBinding(style=Style.DOCUMENT)
@Addressing(enabled=false, required=false)
so I still have the wrong wsa:Action, but nobody cares.
HTH -
Where is the anonymous class in this? (lotsa code)
When I compile ThreadPool.java, I get three classes: ThreadPool.class, ThreadPool$WorkerThread.class, and ThreadPool$1.class. I understand the first two, but I can't figure out where the anonymous class is coming from. Could it be some kind of automatically-generated wrapper class caused by the fact that all accesses to the Queue object are within synchronized blocks? Curiosity attacks!
Thanks,
Krum
ThreadPool.java:
package krum.util;
* A thread pool with a bounded task queue and fixed number of worker threads.
public class ThreadPool {
protected Queue queue;
public ThreadPool(int threads, int taskQueueSize) {
queue = new Queue(taskQueueSize);
/* create the worker threads */
for(int i = 0; i < threads; ++i) {
Thread t = new Thread(new WorkerThread());
t.setDaemon(true);
t.start();
* Queues a task to be executed by this ThreadPool. If the task queue is
* full, the task will run in the calling thread. (Could easily be modified
* to throw an exception instead.)
public void doTask(Runnable task) {
boolean added = false;
synchronized(queue) {
if(!queue.isFull()) {
queue.add(task);
added = true;
queue.notify();
if(!added) task.run();
* Tests if the task queue is empty. Useful if you want to wait for all
* queued tasks to complete before terminating your program.
public boolean queueEmpty() {
synchronized(queue) {
return queue.isEmpty();
private class WorkerThread implements Runnable {
public void run() {
Runnable task;
while(true) {
task = null;
synchronized(queue) {
try {
if(queue.isEmpty()) queue.wait();
else task = (Runnable)queue.getNext();
} catch(InterruptedException e) { break; }
if(task != null) task.run();
} /* end inner class WorkerThread */
} /* end class ThreadPool */Queue.java:
package krum.util;
* Implements a FIFO queue for storage and retrieval of objects. This class
* is not synchronized.
public class Queue {
/** circular buffer containing queued objects */
protected Object[] queue;
/** index of next object to be returned */
protected int nextReturn;
/** index in which to store next object inserted */
protected int nextInsert;
public Queue(int capacity) {
queue = new Object[capacity];
nextInsert = 0;
nextReturn = 0;
public boolean isEmpty() { return(queue[nextReturn] == null); }
public boolean isFull() { return(queue[nextInsert] != null); }
public void add(Object obj) throws QueueException {
if(queue[nextInsert] == null) {
queue[nextInsert] = obj;
++nextInsert;
nextInsert %= queue.length;
} else throw new QueueException();
public Object getNext() throws QueueException {
if(queue[nextReturn] != null) {
Object obj = queue[nextReturn];
queue[nextReturn] = null;
++nextReturn;
nextReturn %= queue.length;
return obj;
} else throw new QueueException();
} /* end class Queue */QueueException.java:
package krum.util;
public class QueueException extends RuntimeException { }I can't explain why it happens, but I've seen this
behaviour before. I found that it was to do with an
inner class (WorkerThread in your code) having a
private constructor - if I made my inner class
constructor at least package (default) access, then
the anonymous class was no longer created.
The generated default constructor for a class has the
same access modifier as the class, so in your example,
the default constructor that the compiler generates is
private.
I suspect the problem will go away if you either:
1. Remove the private modifier from the WorkerThread
class declaration.
or:
2. Add a no-args constructor to the WorkerThread
class, and don't specify an access modifier.Yes, the reason is the private constructor. After decompile using JAD, the reason seems to be: if a private inner class does not explicitly have any constructor, a default no-arguments private constructor is created, and seems this default constructor can't be accessed directly (in source code, it can). So, another no-private constructor (package accessible) is created automatically (with an argument of Object's type), and the
new WorkThread();is actually like this:
new WorkThread(null);
private class WorkThread implements Runnable{
private WorkThread(){}
WorkThread(Object obj) {
this();
}and I would guess it's using anonymous class tech to achieve this like:
new WorkThread(null) {
WorkThread(Object obj){
this();
}The JLS should have specified this situation. -
"Abstract" method in a non-abstract class
Hi all.
I have a class "SuperClass" from which other class are extended...
I'd like to "force" some methods (method1(), method2, ...) to be implemented in the inherited classes.
I know I can accomplish this just implementing the superclass method body in order to throw an exception when it's directly called:
void method1(){
throw new UnsupportedOperationException();
}...but I was wondering if there's another (better) way...
It's like I would like to declare some abstract methods in a non-abstract class...
Any ideas?The superclass just models the information held by
the subclasses.
The information is taken from the database, by
accessing the proper table (one for each subclass).??
What do you mean by "models the information"?
You should use inheritance (of implementation) only when the class satisfies the following criteria:
1) "Is a special kind of," not "is a role played by a";
2) Never needs to transmute to be an object in some other class;
3) Extends rather than overrides or nullifies superclass;
4) Does not subclass what is merely a utility class (useful functionality you'd like to reuse); and
5) Within PD: expresses special kinds of roles, transactions, or things.
Why are you trying to force these mystery methodsfrom the superclass?
It's not mandatory for me to do it... I 'd see it
just like a further way to check that the subclasses
implements these methods, as they have to do.That's not a good idea. If the superclass has no relation to the database, it shouldn't contain methods (abstract or otherwise) related to database transactions.
The subclasses are the classes that handle db
transaction.
They are designed as a binding to a db table.And how is the superclass designed to handle db transactions? My guess (based on your description) is that it isn't. That should tell you right away that the subclasses should not extend your superclass. -
Bug? Unable to add ActionListener using Anonymous class.
Hi,
I come accross one strange behaviour while adding ActionListener to RCF component.
I am trying to add the ActionListener in the managed bean using the Anonymous.
We can add the actionListener to a button using following methods. I am talking about the the first case. Only this case is not working. Rest other 2 cases are working properly.
Case 1:
class MyClass {
RichCommmandButton btnTest = new RichCommmandButton();
public MyClass(){
btnTest.addActionListener(new ActionListener(){
public void processAction(ActionEvent event){
Case 2:
class MyClass implements ActionListener {
RichCommmandButton btnTest = new RichCommmandButton();
public void processAction(ActionEvent event){
<af:button binding="#{myClassBean.btnTest}" actionListener="#{myClassBean.processAction}"/>
Case 3:
class MyClass implements ActionListener {
RichCommmandButton btnTest = new RichCommmandButton();
public void addActionLister(){
//Use EL to add processAction(). Create MethodBinding
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory exprfactory = facesContext.getApplication().getExpressionFactory();
MethodExpression actionListener =
exprfactory.createMethodExpression(elContext, "#{myClassBean.processAction}", null, new Class[] { ActionEvent.class });
btnTest.setActionListener(actionListener);
public void processAction(ActionEvent event){
Java has provided good way to use the Anonymous classes while adding the listeners. It should work with the RCF also.
Some how i found the case 1 usefull, as i can have as many buttons in my screen and i can add the actionListener in one method. Also it is easy to read. I dont have to see the JSPX page to find the associated actionListener method.
Is it a bug or i am wrong at some point?
Any sujjestions are welcome.
- Sujay.Hello Sujay,
As I said in my previous reply, you can try with request scope. In JSF you shouldn't use the binding attribute very often. I agree that anonymous class is nice, but don't forget that you might be dealing with client state saving here so it cannot be perfectly compared with Swing that maintains everything in RAM. What I think happens with you currently is the following:
1. Bean is created and the button instance as well. The ActionListener is added to the button;
2. The view is rendered and while it is, the binding attribute is evaluated, resulting in the get method of your bean being called;
3. Since the method returns something different than null, the button instance created in 1. get used in the component tree;
4. The tree's state is saved on the client, since your class isn't a StateHolder, nor Serializable, the StateManager doesn't know how to deal with it so it gets discarded from the saved state and maybe from the component itself (would have to debug the render view phase to be sure);
5. The postback request arrives, the tree is restored. When the handler reaches the button, it call the bean that returns the same instance that was used in the previous tree (since not request scoped), which is BAD because the remaining of the tree is not made of the same object instances, but rather new deserialized ones. The component then gets updated from the client state saved in 4, this might also be where the listener get removed (again debugging would tell you this, but I would tend more with the previous possibility). Note that with a request scoped bean you would have to add the listener during the first get method call (by checking if the component is null) or in the constructor as you're doing right now. It would be a very clean way and you could give the request bean (and thus the listener) access to the conversation scoped bean through injection which is very nice as well.
6. The invoke application phase occurs and the listener is no longer there.
Btw, this isn't a rich client issue, more a specification one. I'm curious if it works in a simple JSF RI application, if it does then I guess it would be a bug in Trinidad and/or rich client state handling architecture (using FacesBean).
Regards,
~ Simon -
I have searched and found other versions of this question, but haven't run across the answer yet, so...
My program runs correctly from the command line.
When I try to execute the .jar file using the java -jar TIS.jar command I get a noclassdeffound error. The class it can't find happens to be the first inner class it encounters. I have checked the jar file, and the class is in there. Is there a problem with java finding inner classes in jar files?
Some supporting info:
here is my manifest:
Manifest-Version: 1.0
Created-By: 1.4.1_01 (Sun Microsystems Inc.)
Main-Class: ToolInventorySystem
class not found has the name ControlScreen$addToolListener.class
I found in another post that the $ indicates either an anonymous class or an inner class (I have both in my programs)
Thanks in advanceWow, that formatting didn't work, let me try that again...
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ControlScreen extends JFrame {
//Fields for screen size
public static final int DEFAULT_WIDTH = 500;
public static final int DEFAULT_HEIGHT = 500;
public ControlScreen(){
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
Container contentPane = getContentPane();
JPanel SelectButtonPanel = new JPanel();
//Selection Buttons
//add new tools
JButton addToolButton = new JButton("Add Tool");
SelectButtonPanel.add(addToolButton);
ActionListener atl = new AddToolListener();
addToolButton.addActionListener(atl);
//add new projects
JButton addProjectButton = new JButton("Add Project");
SelectButtonPanel.add(addProjectButton);
ActionListener apl = new AddProjectListener();
addProjectButton.addActionListener(apl);
//check out tools
JButton checkOutToolButton = new JButton("Check Out Tools");
SelectButtonPanel.add(checkOutToolButton);
ActionListener cotl = new CheckOutToolListener();
checkOutToolButton.addActionListener(cotl);
//return tools
JButton returnToolButton = new JButton("Return Tool");
SelectButtonPanel.add(returnToolButton);
ActionListener rtl = new ReturnToolListener();
returnToolButton.addActionListener(rtl);
//generate bill
JButton billButton = new JButton("Create Billing Statement");
SelectButtonPanel.add(billButton);
ActionListener bl = new BillListener();
billButton.addActionListener(bl);
contentPane.add(SelectButtonPanel, BorderLayout.SOUTH);
}//close constructor
class AddToolListener implements ActionListener{
public void actionPerformed(ActionEvent event){
//This class will display the tool entry frame
ToolScreen ts = new ToolScreen();
ts.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
ts.show();
}//close method
}//close addToolListener
class AddProjectListener implements ActionListener{
public void actionPerformed(ActionEvent event){
//This class will display the project entry frame
ProjectScreen ps = new ProjectScreen();
ps.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
ps.show();
}//close method
}//close addprojectlistener
class CheckOutToolListener implements ActionListener{
public void actionPerformed(ActionEvent event){
//this class displays the list of active projects
Project[] projectList = TISController.getProjectList();
CheckoutProjectListDisplayScreen cplds = new CheckoutProjectListDisplayScreen(projectList);
cplds.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
cplds.show();
}//close method
}//close check out tool listener
class ReturnToolListener implements ActionListener{
public void actionPerformed(ActionEvent event){
//this class displays the list of active projects
Project[] projectList = TISController.getProjectList();
ReturnProjectListDisplayScreen rplds = new ReturnProjectListDisplayScreen(projectList);
rplds.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
rplds.show();
}//close method
}//close check out tool listener
class BillListener implements ActionListener{
public void actionPerformed(ActionEvent event){
//this class displays the list of active projects
Project[] projectList = TISController.getProjectList();
BillProjectListDisplayScreen bplds = new BillProjectListDisplayScreen(projectList);
bplds.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
bplds.show();
}//close method
}//close create bill listener
}//close Control Screen class -
How to access class variables in anonymous class??.
I have a boolean class level variable. Fom a button action , this boolean will set to true and then it used in anonymous class. In anonymous class, I am getting default value instead of true. Could u anyone help in this plzzz.
first of all, you don't want parent because that is something that Containers use to remember their containment hierarchy. you are thinking of super which is also incorrect, because that has to do with inheritance.
the problem here is a scoping problem. you generally would use final if you were accessing variables in an anonymous class that are in the local scope. in this case, you just need to create some test code and play with it. snip the code below and play with it. it shows both the given examples and some additional ways to change/display class variables.
good luck, hackerx
import javax.swing.*;
import java.awt.event.*;
public class Foo extends JPanel
private boolean the_b = true;
public static void main(String[] args)
Foo f = new Foo();
JFrame frame = new JFrame();
frame.getContentPane().add(f);
frame.pack();
frame.show();
public Foo()
// get your button
JButton b = new JButton("Not!");
b.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent ae)
// *** uncomment these to play around ***
// Foo.this.the_b = false; // this will work, but unnecessary
// the_b = false; // this works fine too
notFoo();
this.add(b);
// something to show the value that accesses a class variable
// using an inner class instead of final nonsense
DisplayThread t = new DisplayThread();
t.start();
private void notFoo()
the_b = !the_b;
class DisplayThread extends Thread
public void run()
while(true)
System.err.println("boolean value: " + the_b);
try {
sleep(1000);
} catch(InterruptedException ie) {}
} -
Static variables in anonymous classes ..
How can i access a static variable from an anonymous class ..
class A{
outerMeth(){
Interface anon=new Interface(){
static int i;
// how can i acess 'i' ..
thanx in advance ..sorry .. not a valid question ..
static var are not allowed in anonymous/inner classes ..
sorry ..
ignore this one .. -
Non-servlet class in servlet program
hi,
I declare a non-servlet class which is defined by myself in a servlet class. I passed the complie but got an runtime error said NoClassDefFoundError. Does anyone can help me? Thanks.
The following is my code.
//get the search string from web form
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
import java.util.*;
public class SearchEngines extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String searchString = (String) request.getParameter("searchString");
String searchType = (String) request.getParameter("searchType");
Date date = new java.util.Date();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Vector doc_retrieved = new Vector();
BooleanSearch bs = new BooleanSearch();
doc_retrieved=bs.beginSearch(searchString, searchType);
out.println("<HTML><HEAD><TITLE>Hello Client!</TITLE>" +
"</HEAD><BODY>Hello Client! " + doc_retrieved.size() + " documents have been found.</BODY></HTML>");
out.close();
response.sendError(response.SC_NOT_FOUND,
"No recognized search engine specified.");
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
// a search engine implements the boolean search
import java.io.*;
import java.util.*;
import au.com.pharos.gdbm.GdbmFile;
import au.com.pharos.gdbm.GdbmException;
import au.com.pharos.packing.StringPacking;
import IRUtilities.Porter;
public class BooleanSearch{
BooleanSearch(){;}
public Vector beginSearch(String searchString, String searchType){
Vector query_vector = queryVector(searchString);
Vector doc_retrieved = new Vector();
if (searchType.equals("AND"))
doc_retrieved = andSearch(query_vector);
else
doc_retrieved = orSearch(query_vector);
return doc_retrieved;
private Vector queryVector(String query){
Vector query_vector = new Vector();
try{
GdbmFile dbTerm = new GdbmFile("Term.gdbm", GdbmFile.READER);
dbTerm.setKeyPacking(new StringPacking());
dbTerm.setValuePacking(new StringPacking());
query = query.toLowerCase();
StringTokenizer st = new StringTokenizer(query);
String word = "";
String term_id = "";
while (st.hasMoreTokens()){
word = st.nextToken();
if (!search(word)){
word = Stemming(word);
if (dbTerm.exists(word)){
// System.out.println(word);
term_id = (String) dbTerm.fetch(word);
query_vector.add(term_id);
catch(GdbmException e){
System.out.println(e.getMessage());
return query_vector;
private Vector orSearch(Vector query_vector){
Vector doc_retrieved = new Vector();
try{
GdbmFile dbVector = new GdbmFile("Vector.gdbm", GdbmFile.READER);
dbVector.setKeyPacking(new StringPacking());
dbVector.setValuePacking(new StringPacking());
int doc_num = dbVector.size();
String doc_id = "";
String temp = "";
for (int i = 1; i <= doc_num; i++){
boolean found = false;
doc_id = String.valueOf(i);
temp = (String) dbVector.fetch(doc_id);
StringTokenizer st = new StringTokenizer(temp);
while (st.hasMoreTokens() && !found){
temp = st.nextToken();
StringTokenizer st1 = new StringTokenizer(temp, ",");
String term = st1.nextToken();
if (query_vector.contains(term)){
doc_retrieved.add(doc_id);
found = true;
catch(GdbmException e){
System.out.println(e.getMessage());
return doc_retrieved;
private Vector andSearch(Vector query_vector){
Vector doc_retrieved = new Vector();
try{
GdbmFile dbVector = new GdbmFile("Vector.gdbm", GdbmFile.READER);
dbVector.setKeyPacking(new StringPacking());
dbVector.setValuePacking(new StringPacking());
int doc_num = dbVector.size();
String doc_id = "";
String temp = "";
for (int i = 1; i <= doc_num; i++){
Vector doc_vector = new Vector();
boolean found = true;
doc_id = String.valueOf(i);
temp = (String) dbVector.fetch(doc_id);
StringTokenizer st = new StringTokenizer(temp);
while (st.hasMoreTokens()){
temp = st.nextToken();
StringTokenizer st1 = new StringTokenizer(temp, ",");
String term = st1.nextToken();
doc_vector.add(term);
for (int j = 0; j < query_vector.size(); j++){
temp = (String) query_vector.get(j);
if (doc_vector.contains(temp))
found = found & true;
else
found = false;
if (found)
doc_retrieved.add(doc_id);
catch(GdbmException e){
System.out.println(e.getMessage());
return doc_retrieved;
private String Stemming(String str){
Porter st = new Porter ();
str = st.stripAffixes(str);
return str;
private boolean search(String str){
//stop word list
String [] stoplist ={"a","about","above","according","across","actually","adj","after","afterwards","again",
"against","all","almost","alone","along","already","also","although","always","am","among",
"amongst","an","and","another","any","anyhow","anyone","anything","anywhere","are",
"aren't","around","as","at","away","be","became","because","become","becomes","becoming",
"been","before","beforehand","begin","beginning","behind","being","below","beside",
"besides","between","beyond","billion","both","but","by","can","cannot","can't",
"caption","co","co.","could","couldn't","did","didn't","do","does","doesn't","don't",
"down","during","each","eg","eight","eighty","either","else","elsewhere","end","ending",
"enough","etc","even","ever","every","everyone","everything","everywhere","except",
"few","fifty","first","five","for","former","formerly","forty","found","four","from",
"further","had","has","hasn't","have","haven't","he","he'd","he'll","hence","her","here",
"hereafter","hereby","herein","here's","hereupon","hers","he's","him","himself","his",
"how","however","hundred","i'd","ie","if","i'll","i'm","in","inc.","indeed","instead",
"into","is","isn't","it","its","it's","itself","i've","last","later","latter","latterly",
"least","less","let","let's","like","likely","ltd","made","make","makes","many","maybe",
"me","meantime","meanwhile","might","million","miss","more","moreover","most","mostly",
"mr","mrs","much","must","my","myself","namely","neither","never","nevertheless","next",
"nine","ninety","no","nobody","none","nonetheless","noone","nor","not","nothing","now",
"nowhere","of","off","often","on","once","one","one's","only","onto","or","other","others",
"otherwise","our","ours","ourselves","out","over","overall","own","per","perhaps","pm",
"rather","recent","recently","same","seem","seemed","seeming","seems","seven","seventy",
"several","she","she'd","she'll","she's","should","shouldn't","since","six","sixty",
"so","some","somehow","someone","sometime","sometimes","somewhere","still","stop",
"such","taking","ten","than","that","that'll","that's","that've","the","their","them",
"themselves","then","thence","there","thereafter","thereby","there'd","therefore",
"therein","there'll","there're","there's","thereupon","there've","these","they","they'd",
"they'll","they're","they've","thirty","this","those","though","thousand","three","through",
"throughout","thru","thus","to","together","too","toward","towards","trillion","twenty",
"two","under","unless","unlike","unlikely","until","up","upon","us","used","using",
"very","via","was","wasn't","we","we'd","well","we'll","were","we're","weren't","we've",
"what","whatever","what'll","what's","what've","when","whence","whenever","where",
"whereafter","whereas","whereby","wherein","where's","whereupon","wherever","whether",
"which","while","whither","who","who'd","whoever","whole","who'll","whom","whomever",
"who's","whose","why","will","with","within","without","won't","would","wouldn't",
"yes","yet","you","you'd","you'll","your","you're","yours","yourself","you've"};
int i = 0;
int j = stoplist.length;
int mid = 0;
boolean found = false;
while (i < j && !found){
mid = (i + j)/2;
if (str.compareTo(stoplist[mid]) == 0)
found = true;
else
if (str.compareTo(stoplist[mid]) < 0)
j = mid;
else
i = mid + 1;
return found;
}please show us the full error message.
it sounds like a classpath problem... -
Access a mc or textfeild from a non document class.
Hey all.
This use to be simple in as2, but seems to allude me from as3. It used to be simple to access an object you put on the stage like a mc or dynamic text field by simply using _root.instanceName ect. Now I see references to making references to the Stage and such like:
private var stage:Stage;
stage = stageRef;
and I am still confused.
What I have going on is, I have placed a movieclip on the stage in Flash and gave it an instance name of Cell_mc.
I have a cusom class that extends MovieClip with the following imports
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
This Class is tied to a set of MovieClips in my Library.
I have a listener: this.addEventListener(MouseEvent.MOUSE_DOWN,pickUp);
And a function:
private function pickUp(event:MouseEvent):void
this.startDrag();
_interval = new Timer(100);
_interval.addEventListener(TimerEvent.TIMER,onInterval);
_interval.start();
And
private function onInterval(event:TimerEvent):void
//Set up hit test
this.hitArea(Cell_mc)
trace("hit");
I get the following error whenever I try to access an object I placed on the stage from anywhere other than the document class:
1120: Access of undefined property Cell_mc.
How do I access the cell_mc that is already on the stage from this non-document class?
Thanks guys.try:
private var stage:Stage;
stage = stageRef;
and I am still confused.
What I have going on is, I have placed a movieclip on the stage in Flash and gave it an instance name of Cell_mc.
I have a cusom class that extends MovieClip with the following imports
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
This Class is tied to a set of MovieClips in my Library.
I have a listener: this.addEventListener(MouseEvent.MOUSE_DOWN,pickUp);
And a function:
private function pickUp(event:MouseEvent):void
this.startDrag();
_interval = new Timer(100);
_interval.addEventListener(TimerEvent.TIMER,onInterval);
_interval.start();
And
private function onInterval(event:TimerEvent):void
//Set up hit test
this.hitArea(MovieClip(root).Cell_mc)
trace("hit");
I get the following error whenever I try to access an object I placed on the stage from anywhere other than the document class:
1120: Access of undefined property Cell_mc.
How do I access the cell_mc that is already on the stage from this non-document class?
Thanks guys. -
Can't access non ejb classes from JSP - NoClassDefFound error
Hi,
I have one session ejb which has a method returning a collection of non ejb class objects (say of Class 'Foo').
The method signature is like :
"Collection getFinacialData() throws RemoteException"
It is working fine with normal java clients. Now when I run this from a JSP it gives a "NoClassDefFoundError". I kept class 'Foo' and the remote interface of the session bean in the same package and also in the same ejb jar file. Also I am running JSP and ejb in same WL server(ver 5.1, SP8 on solaris). What I have done is only deployed the bean jar file. Do I need to do anything more?
thanks in advance.
I ran into a similar problem. I solved it by putting the client classes for
accessing my EJB in the WebLogic POST_CLASSPATH in the startWebLogic script
file:
set POST_CLASSPATH=d:\weblogic\myserver\myClient.jar
For more information on class visibility between the JSP and EJB class
loaders, check out
http://www.weblogic.com/docs51/classdocs/API_ejb/EJB_deployover.html#1056256
Rick
"niroja" <[email protected]> wrote in message
news:3a6ed903$[email protected]..
>
> Hi,
>
> I have one session ejb which has a method returning a collection of non
ejb class objects (say of Class 'Foo').
> The method signature is like :
> "Collection getFinacialData() throws RemoteException"
> It is working fine with normal java clients. Now when I run this from a
JSP it gives a "NoClassDefFoundError". I kept class 'Foo' and the remote
interface of the session bean in the same package and also in the same ejb
jar file. Also I am running JSP and ejb in same WL server(ver 5.1, SP8 on
solaris). What I have done is only deployed the bean jar file. Do I need to
do anything more?
>
> thanks in advance.
>
-
Checked Exception and Anonymous classes
Hi I am refering to java certification book that says : If a checked exception is thrown during the execution of initializer expression, then it has to be caught and handled. This restriction does not apply to instance initializer expressions in anonymous classes.
I have codes for the above statement but failed to get the correct result. Is there some problem with the code :
class RoomOccupancyTooHighException extends RuntimeException {} // (1) Unchecked Exception
class TooManyHotelsException extends Exception {} // (2) Checked Exception
class base
public void fun()
System.out.println("base");
class derived
public static base funtion()
return new base()
int a = fu();
int fu()
if(a==1)
throw new TooManyHotelsException();
return 100;
public void fun()
System.out.println("derived");
public static void main(String str[])
base b = funtion();
b.fun();
}In anonynous class initialisation you don't need to declare the exception but you still need to handle it in the calling code.
The code you provided does not compile for that reason. -
Multiple instances of one anonymous class
Hi,
I am implementing the Command pattern for an interpreter. I've created a Command class to describe the common behavior of all commands and create anonymous classes to manage the few exceptions I have. This design was chosen because I have numerous commands very similar and only a few exception, and I didn't wanted to create one class by command (the ration exception/normal is really low).
registerCommand(new Command("commandName1", specificParameters...));
registerCommand(new Command("commandName2", specificParameters...));
registerCommand(new Command("exception3", specificParameters...)
protected void execute()
exceptional treatment...
registerCommand(new Command("commandName4", specificParameters...));I came to the point that I have two exceptions that extend the Command class in the same way and I was asking if it is possible to create two object instances of the same anonymous class?
Or asked differently, can one confirm that generally, anonymous classes object instances are unique?
ThanksOK, perhaps I wasn't clear enough...
Let's go with an example:
registerCommand(new Command("exception3", specificParameters...)
protected void execute()
x = 1;
registerCommand(new Command("exception4", specificParameters...)
protected void execute()
x = 1;
});This code fragment creates 2 objects instances of 2 different anonymous classes. You can see that these classes have exactly the same definition (but are different), and the 2 instances are different (at least because of new instruction and that the constructor arguments are different, select the whatever reason you like).
This new Command(..) {...} syntax defines in the same instruction an instance and an anonymous class. I would like to define an anonymous class and create 2 instances from the same anonymous class. I feel no need to name the class as only 2 instances will ever been created. And I was wondering if it is possible...
I hope it's clearer now :)
Maybe you are looking for
-
hi friends, have 1 issue in script i have the code in my script: /: PERFORM F_SO_DATA IN PROGRAM ZZZFR0021F USING &P_BUKRS& /: CHANGING &L_VAR& /: ENDPERFORM and then in the prog.
-
My husband and I use the same itunes account and ID. I set up a new account in his name with a new ID but his purchases still come under my account. On his ipod I still see my username not his. How can I change it?
-
How to center a component on the page????
Hi all i want to center a component on the page Sorry it may be some thing trivial ??? but i ve a command button i want to center it on the page ???? how???
-
Satellite P300-05x - keyboard is loose up the top right
Hi i have a new Satellite P300-05x and the keyboard is loose up the top right side mainly between buttons 5 and the backspace button say. It is very anoying and it clicks/ makes noises as it moves up and down when i type.. I'm sure its nothing to wor
-
Tax Segments in IDOC Processing
Hello, For intercompany postings of the Sales and corresponding Purchsing invoices we have set up the IDOC process. In this porcess, once we post the Billing Document then an IDOC posts the corresponding Purchasing Invoice with MIRO. We have also set