ok Martin thanks for explanation!

On 04/25/2013 05:00 PM, Martin Grigorov wrote:
Hi Wolfgang,


On Thu, Apr 25, 2013 at 5:46 PM, Wolfgang <[email protected]> wrote:

Hi heikki!

I needed the same so I did following:

extending AbstractResource
implemented the needed:

protected ResourceResponse newResourceResponse(Attributes attributes) {
   ResourceResponse resourceResponse = new ResourceResponse();
   final StringBuilder sb = new StringBuilder();
   //do sb.append() here your json etc.
   resourceResponse.**setWriteCallback(new WriteCallback() {
             @Override
             public void writeData(Attributes attributes) throws
IOException {
                 Response response = attributes.getResponse();
                 response.write(sb.toString());
             }
         });

         resourceResponse.**setContentType("application/**json");
         return resourceResponse;
}

written a subclass of ResourceReference which takes a Class as constructor
parameter.
@Martin: why doesn't wicket hasn't something generic?

I guess because it is too simple.

Or maybe it is not ?! See below.


public class GenericResourceReference extends ResourceReference {
     private Class<? extends IResource> iResourceClass;

Problem 1) You keep a reference to a class!
- may lead to class loader leaks
- definitely a problem in OSGi environment


     public GenericResourceReference(**Class<? extends IResource>
iResourceClass) {
         super(iResourceClass.getName()**);
         this.iResourceClass = iResourceClass;
     }

     @Override
     public IResource getResource() {
         try {
             return iResourceClass.newInstance();

What if there is no default constructor ? Users will ask for a factory...
It is much easier to do:
mountResource("/my.json", new ResourceReference("someName") {
       @Override
     public IResource getResource() {
       return new MyResource(...);
     }
});

No usage of reflection. The application developer knows what constructor
arguments to pass, etc.

         } catch (InstantiationException e) {
             throw new RuntimeException(e);
         } catch (IllegalAccessException e) {
             throw new RuntimeException(e);
         }
     }

and mounted it in the WebApplication init() method like this:
mountResource("/my.json", new GenericResourceReference(**
MyResource.class));

Greetings from sunny Austria.
-Wolfgang


On 04/25/2013 04:28 PM, heikki wrote:

thanks,

that example does indeed work fine, but I'd rather have *no* markup file,
just generate the XML or JSON myself and send that back in the response.

So I need a mounted IResource to do that ? Any tip how to go about it for
this use case, e.g. use a ByteArrayResource ?




--
View this message in context: http://apache-wicket.1842946.**
n4.nabble.com/Wicket-**returning-XML-or-JSON-**tp4658271p4658273.html<http://apache-wicket.1842946.n4.nabble.com/Wicket-returning-XML-or-JSON-tp4658271p4658273.html>
Sent from the Users forum mailing list archive at Nabble.com.

------------------------------**------------------------------**---------
To unsubscribe, e-mail: 
users-unsubscribe@wicket.**apache.org<[email protected]>
For additional commands, e-mail: [email protected]





---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to