I think this should do it:
diff --git
a/java/common/src/main/java/org/apache/shindig/common/JsonUtil.java
b/java/common/src/main/java/org/apache/shindig/common/JsonUtil.java
index 9e392a8..b650178 100644
--- a/java/common/src/main/java/org/apache/shindig/common/JsonUtil.java
+++ b/java/common/src/main/java/org/apache/shindig/common/JsonUtil.java
@@ -84,9 +84,11 @@ public class JsonUtil {
methods = Maps.newHashMap();
for (Method method : clazz.getMethods()) {
- String name = getPropertyName(method);
- if (name != null) {
- methods.put(name, method);
+ if (method.getParameterTypes().length == 0) {
+ String name = getPropertyName(method);
+ if (name != null) {
+ methods.put(name, method);
+ }
}
}
diff --git
a/java/common/src/test/java/org/apache/shindig/common/JsonSerializerTest.java
b/java/common/src/test/java/org/apache/shindig/common/JsonSerializerTest.java
index 57145a5..7715d52 100644
---
a/java/common/src/test/java/org/apache/shindig/common/JsonSerializerTest.java
+++
b/java/common/src/test/java/org/apache/shindig/common/JsonSerializerTest.java
@@ -136,6 +136,10 @@ public class JsonSerializerTest {
public Object getNullValue() {
return null;
}
+ @JsonProperty("simple!")
+ public void setSimpleName(int foo) {
+
+ }
}
@Test
On Thu, Jul 30, 2009 at 2:44 PM, Kevin Brown <[email protected]> wrote:
> On Thu, Jul 30, 2009 at 2:29 PM, Paul Lindner <[email protected]> wrote:
>
> > How important is it to support non-bean style getters/setter method
> names?
> > If it's not a problem then we can just check for get/set before checking
> > for JsonProperty annotations.
> >
> > Another thing we could do is check the results of
> Method#getParameterTypes
> > or Method#getReturnType calls to insure we have something that looks like
> a
> > getter/setter
>
>
> I think it's pretty trivial:
>
> - if it takes no arguments, it's a getter.
> - if it does take arguments, it's a setter.
>
> looking at return types doesn't work because it can be ambiguous. Consider
> this class:
>
> class Thingamjig {
>
> @JsonProperty("Foo")
> Thingamajig setFoo(Foo foo) {
> this.foo = foo;
> return this;
> }
> }
>
>
> >
> >
> >
> >
> > On Wed, Jul 29, 2009 at 3:47 PM, Cassie <[email protected]> wrote:
> >
> > > That makes sense, but unfortunately, the code is already using it in
> > > deserialization... in BeanJsonConverter, line 89-119ish, the getSetter
> > > method calls getPropertyName which uses the annotation.
> > >
> > > So, can this be safely changed to check for a different annotation
> name,
> > > like JsonSetterProperty, while leaving the serialization code the same?
> > > Because as it stands, its sorta broken. If no one is supposed to be
> using
> > > it, then I suppose it shouldn't affect anyone.
> > >
> > > - Cassie
> > >
> > >
> > > On Wed, Jul 29, 2009 at 3:39 PM, Kevin Brown <[email protected]> wrote:
> > >
> > > > JsonProperty was originally only added for serialization (as
> indicated
> > by
> > > > the documentation). It could certainly be used for deserialization,
> but
> > > the
> > > > BeanJsonConverter and JsonSerializer both need to be updated
> > accordingly.
> > > >
> > > > On Wed, Jul 29, 2009 at 3:28 PM, Cassie <[email protected]> wrote:
> > > >
> > > > > Hey everyone -
> > > > >
> > > > > I have some legacy objects in my code base that I wanted to convert
> > to
> > > > and
> > > > > from json with the BeanJsonConverter and JsonProperty. Problem is,
> it
> > > > seems
> > > > > that the same logic/annotation is being used to find getters and
> > > setters
> > > > on
> > > > > my pojos. So when I try to convert my pojo to a string, it ends up
> > > trying
> > > > > to
> > > > > call setters, and not getters (or vice versa).
> > > > >
> > > > > For example, I have a class Post.java with two fields "title" and
> > > "body".
> > > > > Add setters and getters for these fields and things work dandy.
> > > However,
> > > > I
> > > > > need my json to use capital case: "Title" and "Body". To do this I
> > > figure
> > > > I
> > > > > need JsonProperty. So I go and add the JsonProperty("Title") and
> the
> > > > other
> > > > > annotation to the setters and who hoo I can take my json into a
> pojo
> > > with
> > > > > capital case. But then - on the way from pojo to json the code
> grabs
> > > all
> > > > > methods, and if they have a jsonProperty - it puts them in the
> getter
> > > > map!
> > > > > Unfortunately, this causes an IllegalArgException because of course
> > my
> > > > > setters take params, and the code is expecting them to be
> getters...
> > > > >
> > > > > So, I'm thinking we either need a JsonGetProperty and
> JsonSetProperty
> > > > > annotation. Or, the code needs to check that a property exists
> -and-
> > > that
> > > > > the method starts with "get" or "set" or maybe there is something
> > > > better...
> > > > >
> > > > > Anyway, did I completely screw something up here? Is someone
> getting
> > > this
> > > > > to
> > > > > work correctly?
> > > > > If not, how should we fix it?
> > > > > Thanks!
> > > > >
> > > > > - Cassie
> > > > >
> > > >
> > >
> >
>